태그 보관물: Process ID

9X 에서 커널모드에서 프로세스 ID 얻기

9X 용 드라이버 개발해 본지가 호랑이 담배 필적이라…아주 잊고 있었는데..
(조금)아는 분이랑 메신저 대화하다가.. 9X 커널모드에서 타 프로세스 ID 얻는 방법이 갑자기 궁금해졌습니다.
분명 2X 계열과는 틀렸었는데(커널모드에서 얻은 프로세스 ID와 유저모드의 프로세스 ID가 매치되지 않는)… ‘뭐였지?’ 하면서 기억들 더듬 더듬…


1. 유저모드에서 얻은 자기 자신 프로세스 ID를 드라이버로 보냅니다.
2. 커널모드에서 1. 번에서 프로세스 ID를 보내온 프로세스(자기 자신) 핸들을 얻습니다.
    – VWIN32_GetCurrentProcessHandle() 함수를 이용해서 유저모드(Ring 3) 프로세스 핸들을 얻습니다.
3. 1번의 유저모드의 프로세스 ID와 2번의 커널모드 프로세스 핸들을 ‘^’ 연산을 해서 Obsfuscator를 얻습니다.
    – 예) ULONG AppProcessID : 유저모드 프로세스 ID
            PVOID ProcessHandle : 커널모드 프로세스 핸들
            ProcessHandle = VWIN32_GetCurrentProcessHandle();
            ULONG Obsfuscator = (ULONG)ProcessHandle ^ AppProcessID;
4. 이제 필터 드라이버(파일 시스템이든 TDI 레이어 이든)등에서 특정 연산을 호출하는 프로세스의 프로세스 ID는 해당 연산에서 얻어진 프로세스 핸들과 Obsfuscator를 ‘^’ 연산을 통해 얻어질 수 있습니다.
     – 예) PVOID CurrentProcessHandle = VWIN32_GetCurrentProcessHandle();
            ULONG CurrentProcessID = (ULONG)CurrentProcessHandle ^ Obsfuscator;

요새는 거의 9X 용 드라이버를 개발하는 경우가 없으실테니 필요가 없는 내용일 것입니다.
더군다나 맞는지도 모르겠고.. 확인해볼 플랫폼이나 테스트 해 볼 9X용 드라이버도 없으니..

지금 돌이켜보면 9X 용 드라이버 개발할때가 참 색다른 맛이 있었던것 같네요.
WDM 이다 WDF 다 하면서 점점 드라이버 개발 진입이 쉬워지기는 하지만.. 그래도 나름 그때가 묘한 매력이 있었던것 같습니다.