2015-02-21 5 views
0

Как я могу использовать функцию PsLookupProcessByProcessId() с идентификатором процесса (DWORD pid), который я получил из пользовательского пространства?PsLookupProcessByProcessId с DWORD pid? Для параметра 1 требуется РУЧКА?

Я закодировал приложение C++ для пользовательского пространства, которое получает идентификатор процесса другого приложения (например, calc.exe) и используя DeviceIoControl. Я могу успешно отправить драйверу pid через созданную мной структуру.

DbgPrint("PID received : %i", pInp->pid); 

Распечатывает правильный pid для процесса. Но при выполнении:

PsLookupProcessByProcessId(pInp->pid, eProcess); 

я получаю предупреждение:

C4022: 'PsLookupProcessByProcessId': указатель рассогласования для фактического параметра 1

Предупреждение получает рассматривается как ошибка и против не позволю мне скомпилировать. Я просмотрел документацию для «PsLookupProcessByProcessId», и он говорит, что для первого параметра требуется «дескриптор». Итак, в таком случае, как мне получить получение дескриптора с помощью DWORD pid, отправленного из приложения для пользовательского пространства?

+0

'OpenProcess()'? –

+1

Вам нужно объявить 'pInp-> pid' типа' HANDLE'. Второй параметр также выглядит неверным. Вам обязательно нужно передать адрес вашей переменной «PEPROCESS». –

+1

@ ThePara - функция пользовательского режима. Это вопрос в режиме ядра. –

ответ

0
PEPROCESS eProcess = NULL; 
PsLookupProcessByProcessId((HANDLE)pInp->pid, &eProcess); 

"Указывает идентификатор процесса процесса". -> HANDLE может показаться запутанным, в данном случае это не настоящий объект «HANDLE».