Конференция "Основная" » ProcessHandleToProcessId
 
  • p © (14.01.12 16:16) [0]
    Здрасьте, подскажите как получить ID процесса из HANDLE'а в kernel mode, щас делаю так, все работает отлично, но нужно избежать использования Zw функций, проблемма в совместной работе с антивирусами и перехвате Zw функций

    PVOID GetSystemRoutineAddress(WCHAR *Name)
    {
     UNICODE_STRING RoutineName;
     PVOID RoutineAddress = NULL;
       
     RtlInitUnicodeString(&RoutineName, Name);

     try
     {
         RoutineAddress = MmGetSystemRoutineAddress(&RoutineName);
     }

     except (EXCEPTION_EXECUTE_HANDLER)
     {
         RoutineAddress = NULL;
     }

       
     return RoutineAddress;
    }

    typedef NTSTATUS (*_ZwQueryInformationProcess)(__in HANDLE ProcessHandle, __in PROCESSINFOCLASS ProcessInformationClass, __out PVOID ProcessInformation, __in ULONG ProcessInformationLength, __out_opt PULONG ReturnLength);  
    _ZwQueryInformationProcess ZwQueryInformationProcess;

    HANDLE ProcessHandleToProcessId(HANDLE ProcessHandle)
    {
    NTSTATUS Status;
    ULONG ReturnLength;
    PROCESS_BASIC_INFORMATION PBI;

    __try
       {
     ZwQueryInformationProcess = GetSystemRoutineAddress(L"ZwQueryInformationProcess");
       
     if (!ZwQueryInformationProcess)
      return (HANDLE)0;

     Status = ZwQueryInformationProcess(ProcessHandle, ProcessBasicInformation, &PBI, sizeof(PROCESS_BASIC_INFORMATION), &ReturnLength);
     if (!NT_SUCCESS(Status))
     {
      return (HANDLE)0;
     }


     ZwQueryInformationProcess = NULL;
       }
    __except( EXCEPTION_EXECUTE_HANDLER )  
       {        
       }

    return (HANDLE)PBI.UniqueProcessId;
    }

  • Самуилыч (16.01.12 23:05) [1]
    DWORD GetProcessId(HANDLE Process);

    Parameters

    Process
    [in] Handle to the process.

    The handle must have the PROCESS_QUERY_INFORMATION access right.

    Return Values

    If the function succeeds, the return value is the process identifier of the specified process.

    If the function fails, the return value is zero. To get extended error information, call GetLastError.
  • p © (17.01.12 20:54) [2]

    > Самуилыч   (16.01.12 23:05) [1]


    Мля блин PsGetProcessId() в XP и выше то что нужно, спасибо плохо искал
Есть новые Нет новых   [120383   +27][b:0][p:0.001]