2014-08-27 4 views
2

Я пытаюсь написать основной драйвер для процесса мониторинга и получить путь к процессу.
я создать PsSetCreateProcessNotifyRoutine и получить информацию о процессе с использованием ZwQueryInformationProcess
, но в моей ProcessCallback функции, когда я пытаюсь получить текущий процесс HANDLE с помощью NtCurrentProcess, он дает мне текущий процесс, запустить другой процесс.Преобразование ProcessID в обрабатываемую ручку

Для примера:

я пытаюсь запустить myprogram.exe в C: \, когда я иду к C: \ С помощью проводника Windows и запустить myprogram.exe мой водитель дать мне explorer.exe путь потому что myprogram.exe работать внутри explorer.exe

я есть ProcessId в моем заголовке ProcessCallback

void ProcessCallback(
    IN HANDLE hParentId, 
    IN HANDLE hProcessId, 
    IN BOOLEAN bCreate 
    ) 

.can я могу преобразовать его в обработку дескриптора?

+1

Я не уверен, но похоже, что вы должны быть в состоянии преобразовать идентификатор процесса к ручке процесса с использованием ZwOpenProcess. –

+0

Я пытаюсь ZwOpenProcess, но я не уверен, что это работает отлично! Мой драйвер аварии и не работает! – AminM

+0

Что такое ошибка при сбое? – dvasanth

ответ

1

благодарит всех вас за полезные комментарии наконец я решить мою проблему с ниже код

HANDLE proc = NULL; 
OBJECT_ATTRIBUTES obj_attr; 
CLIENT_ID cid; 

cid.UniqueProcess= hProcessId; //PsGetCurrentProcessId(); 
cid.UniqueThread= NULL ; //(HANDLE)0; 
InitializeObjectAttributes(&obj_attr,NULL, 0, NULL, NULL); 
ZwOpenProcess(&proc, PROCESS_ALL_ACCESS, &obj_attr, &cid);