我hook了ntcreateprocessex以后,需要根据process handle来得到相应的进程的名称
用了getprocessid来得到进程id,然后列举进程找到对应名称,但是getprocessid这个
函数在2000下无法使用,
又想到GetModuleFileNameEx这个函数,但是在hook函数调用这个api的时候,报handle无效的错误。有没有什么办法啊,谢谢

解决方案 »

  1.   

    找了半天 你试试
    DWORD WINAPI GetProcessIdNT(HANDLE hProcess)
    {
        NTSTATUS                  Status;
        PROCESS_BASIC_INFORMATION pbi;
        HANDLE                    hDupHandle;
        HANDLE                    hCurrentProcess;    hCurrentProcess = GetCurrentProcess();    // Use DuplicateHandle() to get PROCESS_QUERY_INFORMATION access right
        if (!DuplicateHandle(hCurrentProcess,
                             hProcess,
                             hCurrentProcess,
                             &hDupHandle,
                             PROCESS_QUERY_INFORMATION,
                             FALSE,
                             0))
        {
            SetLastError(ERROR_ACCESS_DENIED);
            return 0;
        }    Status = NtQueryInformationProcess(hDupHandle,
                                           ProcessBasicInformation,
                                           &pbi,
                                           sizeof(pbi),
                                           NULL);    CloseHandle(hDupHandle);    if (!NT_SUCCESS(Status))
        {
            SetLastError(RtlNtStatusToDosError(Status));
            return 0;
        }    // Return PID
        return pbi.UniqueProcessId;
    }
      

  2.   

    shizhen兄弟,你这个是不是要加什么类库呀?