디바이스 드라이버에서 PID로 프로세스네임 얻어오기

1. DriverEntry에서 이름까지의 거리게산을 위해 다음 함수를 호출합니다.

VOID GetProcessNameOffset( void ) {

    PEPROCESS curproc;
    int i;

 curproc = PsGetCurrentProcess();
    for( i = 0; i < 3*PAGE_SIZE; i++ )
 {
        if( !strncmp( "System", (PCHAR)curproc + i, strlen("System") ))
  {
            gProcessNameOffset = i;
  }
    }STATUS_SUCCESS;
}

2.

NTKERNELAPI
NTSTATUS
PsLookupProcessByProcessId (
    IN HANDLE ProcessId,
    OUT PEPROCESS *Process
    );

을 이용해서

PEPROCESS EPROC;
PsLookupProcessByProcessId(넘어온PID,&EPROC);

를 해주면 해당 PID의 EPROCESS를 알 수 있고,

3.
int GetProcessName( PEPROCESS EPROC,PCHAR theName )
{
    PEPROCESS       curproc;
    char            *nameptr;

    if( gProcessNameOffset )
 {
        curproc = EPROC;
        nameptr   = (PCHAR) curproc + gProcessNameOffset;
        strncpy( theName, nameptr, NT_PROCNAMELEN );
        theName[NT_PROCNAMELEN] = 0; /* NULL at end */
  return TRUE;
    }
 return FALSE;
}

by 프레야 | 2007/01/31 21:19 | Device Driver | 트랙백 | 덧글(1)

트랙백 주소 : http://beehone.egloos.com/tb/875436
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 엠오브이 at 2008/01/30 13:28
좋은자료 잘 보고 갑니다.

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶