헬마입니다.

드라이버에서 사용할 수 있는 프로세스 핸들로 프로세스 이름을 반환하는 루틴입니다.

미니필터 드라이버에서는 사용할 수 없습니다.

출처는 osronlie site 입니다.

// 프로세스 이름 구하기 함수 관련 선언
typedef NTSTATUS (*QUERY_INFO_PROCESS) (__in HANDLE ProcessHandle,
          __in PROCESSINFOCLASS ProcessInfomationClass,
          __out_bcount(ProcessInformationLength) PVOID ProcessInformation,
          __in ULONG ProcessInformationLength,
          __out_opt PULONG ReturnLength );

extern QUERY_INFO_PROCESS ZwQueryInformationProcess;

EXTERN_C NTSTATUS GetProcessImageName( __in HANDLE ProcessHandle, __out PUNICODE_STRING ProcessImageName );

QUERY_INFO_PROCESS ZwQueryInformationProcess;
NTSTATUS GetProcessImageName( __in HANDLE ProcessHandle, __out PUNICODE_STRING ProcessImageName )
{
 NTSTATUS  status = STATUS_SUCCESS;
 ULONG   returnedLength = 0;
 ULONG   bufferLength = 0;
 PVOID   buffer = 0;
 PUNICODE_STRING imageName = NULL;

 PAGED_CODE();

 if( NULL == ZwQueryInformationProcess )
 {
  UNICODE_STRING routineName;

  RtlInitUnicodeString( &routineName, L"ZwQueryInformationProcess" );

  ZwQueryInformationProcess = (QUERY_INFO_PROCESS) MmGetSystemRoutineAddress( &routineName );

  if( NULL == ZwQueryInformationProcess )
   return STATUS_NOT_IMPLEMENTED;
 }
 
 status = ZwQueryInformationProcess( ProcessHandle, ProcessImageFileName, NULL, 0, &returnedLength );

 if( STATUS_INFO_LENGTH_MISMATCH != status )
  return status;

 bufferLength = returnedLength - sizeof(UNICODE_STRING);

 if( ProcessImageName->MaximumLength < bufferLength )
 {
  ProcessImageName->Length = (USHORT)bufferLength;
  return STATUS_BUFFER_TOO_SMALL;
 }

 buffer = ExAllocatePoolWithTag( NonPagedPool, returnedLength, 'ipgD' );

 if( NULL == buffer )
  return STATUS_INSUFFICIENT_RESOURCES;

 status = ZwQueryInformationProcess( ProcessHandle, ProcessImageFileName, buffer, returnedLength, &returnedLength );

 if( NT_SUCCESS(status) )
 {
  imageName = (PUNICODE_STRING)buffer;

  RtlCopyUnicodeString( ProcessImageName, imageName );

 }

 if( buffer )
  ExFreePoolWithTag( buffer, 'ipgD' );

 return status;
}

댓글을 달아 주세요