у меня есть хендл процесса с минимальными правами доступа. и есть идентификатор процесса. Как можно определить, относятся ли они к одному процессу или нет?
Re: как получить идентификатор процесса по хендлу?
Здравствуйте, protestant, Вы писали:
P>у меня есть хендл процесса с минимальными правами доступа. и есть идентификатор процесса. Как можно определить, относятся ли они к одному процессу или нет?
GetProcessId
The GetProcessId function retrieves the process identifier of the specified process.
DWORD GetProcessId(
HANDLE Process
);
Have fun...
Re[2]: как получить идентификатор процесса по хендлу?
Здравствуйте, gandalf_g, Вы писали:
_>Здравствуйте, protestant, Вы писали:
P>>у меня есть хендл процесса с минимальными правами доступа. и есть идентификатор процесса. Как можно определить, относятся ли они к одному процессу или нет?
_>
GetProcessId
_>The GetProcessId function retrieves the process identifier of the specified process.
_>DWORD GetProcessId(
_> HANDLE Process
_>);
хотелось бы, что бы это работало и в win2000
к тому же для её работы требуются права доступа на хендл PROCESS_QUERY_INFORMATION. У меня их нет
Re[3]: как получить идентификатор процесса по хендлу?
Здравствуйте, protestant, Вы писали:
P>хотелось бы, что бы это работало и в win2000 P>к тому же для её работы требуются права доступа на хендл PROCESS_QUERY_INFORMATION. У меня их нет
неусмотрел) как вариант можно проэнумеровать все процессы в системе и сравнивать с нужным (EnumProcesses или Process32First, Process32Next)
Have fun...
Re[4]: как получить идентификатор процесса по хендлу?
Здравствуйте, gandalf_g, Вы писали:
_>Здравствуйте, protestant, Вы писали:
P>>хотелось бы, что бы это работало и в win2000 P>>к тому же для её работы требуются права доступа на хендл PROCESS_QUERY_INFORMATION. У меня их нет
_>неусмотрел) как вариант можно проэнумеровать все процессы в системе и сравнивать с нужным (EnumProcesses или Process32First, Process32Next)
и как мне это поможет? ведь так я получу идентификаторы всех процессов. и что мне с ними делать?
Re[5]: как получить идентификатор процесса по хендлу?
Здравствуйте, gandalf_g, Вы писали:
_>Здравствуйте, protestant, Вы писали:
P>>и как мне это поможет? ведь так я получу идентификаторы всех процессов. и что мне с ними делать?
_>хоть какую то информацию из хэндла вытянуть то можно? да уж, чую без PROCESS_QUERY_INFORMATION много не поймаешь
у меня пока не получилось
Re[3]: как получить идентификатор процесса по хендлу?
>хотелось бы, что бы это работало и в win2000 >к тому же для её работы требуются права доступа на хендл PROCESS_QUERY_INFORMATION. У меня их нет
по хэндлу можно получить PID и так
Здравствуйте, Вумудщзук, Вы писали:
>>хотелось бы, что бы это работало и в win2000 >>к тому же для её работы требуются права доступа на хендл PROCESS_QUERY_INFORMATION. У меня их нет В>по хэндлу можно получить PID и так В>
>>под 2k точно будет работать
>а можно немножко поподробнее о параметрах?
NTSYSAPI NTSTATUS NTAPI ZwQueryInformationProcess(
IN HANDLE ProcessHandle, // хэндл процесса
IN PROCESSINFOCLASS ProcessInformationClass, // чего хотим узнать (ProcessBasicInformation)
OUT PVOID ProcessInformation, // указатель на буфер
IN ULONG ProcessInformationLength, // длина входного буфера в байтах
OUT PULONG ReturnLength); // сколько байт вернулось
Здравствуйте, Вумудщзук, Вы писали:
>>хотелось бы, что бы это работало и в win2000 >>к тому же для её работы требуются права доступа на хендл PROCESS_QUERY_INFORMATION. У меня их нет В>по хэндлу можно получить PID и так В>
>Вопрос, хватит ли прав на получение информации. >Если даже PROCESS_QUERY_INFORMATION нет...
а если вызвать её из драйвера ? это ж легко проверить на практике...
Homo sum et nihil humani a me alienum puto...
Re[6]: как получить идентификатор процесса по хендлу?
Здравствуйте, Вумудщзук, Вы писали:
>>Вопрос, хватит ли прав на получение информации. >>Если даже PROCESS_QUERY_INFORMATION нет... В>а если вызвать её из драйвера ?
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: как получить идентификатор процесса по хендлу?
Здравствуйте, protestant, Вы писали:
P>>>у меня есть хендл процесса с минимальными правами доступа. и есть идентификатор процесса. Как можно определить, относятся ли они к одному процессу или нет?
_>>
GetProcessId
_>>The GetProcessId function retrieves the process identifier of the specified process.
_>>DWORD GetProcessId(
_>> HANDLE Process
_>>);
P>хотелось бы, что бы это работало и в win2000 P>к тому же для её работы требуются права доступа на хендл PROCESS_QUERY_INFORMATION. У меня их нет
Тяжелый случай. Если у вас нет доступа именно к этому хэндлу, а самому объекту процесса доступ есть, то можно попробовать вызвать DuplicateHandle на имеющийся у вас хэндл, чтобы "повысить" права доступа. Я, честно говоря, не помню, позволяет ли DuplicateHandle повышать права доступа к процессам, но стоит попробовать.
Если получится, то дальше можно вызывать GetProcessId или ZwQueryInformationProcess, как уже посоветовали.
-- Alex Fedotov
Re: как получить идентификатор процесса по хендлу?
Здравствуйте, protestant, Вы писали:
P>у меня есть хендл процесса с минимальными правами доступа. и есть идентификатор процесса. Как можно определить, относятся ли они к одному процессу или нет?
Под какой учетной записью работает процесс Вашей программы?
Можно получить, например, привилегию SeDebug, которая дает исключительные права на доступ к процессам. Получив ее, можно открывать, получать информацию, принудительно завершать даже системные процессы (smss, csrss, winlogon). Код примерно такой: