2010-08-07 4 views
0

Windows 필터링 플랫폼에서 드라이버를 개발 중이며 필요한 작업을 수행하기 위해 다른 프로세스의 프로세스 ID가 필요합니다. 그 프로세스 (name.exe)의 파일 이름만을 알고 있습니다.WDK : 이름으로 processId 가져 오기

win32에서 CreateToolhelp32Snapshot 함수를 사용하여 모든 프로세스의 목록을 얻을 수 있었고 거기에서 PID를 검색 할 수있었습니다. (http://msdn.microsoft.com/en-us/library/ms684834(VS.85).aspx)

불행히도 커널 모드에서는이 항목을 사용할 수 없습니다. 누구든지 kernelID에 의해 이진 이름만을 알고있는 processID를 어떻게 얻을 수 있는지 알고 있습니까?

답변

0

타이밍에 따라 CreateProcessNotifyEx()에 대한 자체 처리기로 PsSetCreateProcessNotifyRoutineEx()으로 전화 할 수있는 것으로 보입니다. 그러면 CreateProcessNotifyEx()PS_CREATE_NOTIFY_INFO에 대한 포인터가 수신됩니다. 이 구조체에는 ImageFileName 필드와 비트 FileOpenNameAvailable이 있습니다.

프로그램 이름은 ImageFileName이 가리키는 유니 코드 문자열입니다. FileOpenNameAvailable이면 해당 문자열에 바이너리의 정규화 된 경로가 포함됩니다. 그렇지 않으면 확장자가없는 모듈 이름 만 찾으십시오.

+1

답장을 보내 주셔서 감사합니다. MSDN에 따르면 "PsSetCreateProcessNotifyRoutineEx 루틴은 프로세스가 만들어 지거나 종료 될 때 호출자에게 알리는 콜백 루틴을 등록하거나 제거합니다." 그래서 불행히도 내가 필요로하지 않는 것 같습니다. 응용 프로그램이 시작된 후 드라이버가로드되기 때문에 이미 실행중인 프로세스를 알아야합니다. – Marco

+0

@Marco, 여러분은 환영합니다. 네, 그게 타이밍에 따라 궁금해하는 것입니다. "죄송합니다. 당신에게 효과가 없습니다 ... 제가 기억한다면, PEB는 이중 링크 목록을 어딘가에 가지고 있습니다. 당신은 시스템상의 모든 PEB에 접근 할 수 있습니다. –

관련 문제