某些进程的 NtQueryInformationProcess(ProcessBasicInformation) AV

问题描述 投票:0回答:1

我正在枚举所有进程。正如你所看到的,返回代码是好的,

UniqueProcessId
显示请求的进程ID并且
PebBaseAddress
不为空,但是系统在读取它时抛出AV。

此代码在大多数情况下都有效,但对于某些特定进程会失败(它们似乎不相关:

iexplore.exe
vcpkgsrv.exe
rdpclip.exe
等)。 Win10 22H2

这是文本代码

// using PROCESS_ALL_ACCESS nor MAXIMUM_ALLOWED doesn't help
AutoHandleNull hProcess{ ::OpenProcess(ProcessQueryRight/*PROCESS_QUERY_LIMITED_INFORMATION*/, FALSE, procEntry.th32ProcessID) };
if (hProcess)
{
    ::PROCESS_BASIC_INFORMATION pbi{};
    ULONG returnLength;
    const NTSTATUS st = pNtQueryInformationProcess(hProcess.get(), ProcessBasicInformation, &pbi, sizeof(pbi), &returnLength);
    if (NT_SUCCESS(st) && pbi.PebBaseAddress && pbi.PebBaseAddress->SessionId == sessionID)
    {
        return procEntry.th32ProcessID;
    }
}
c++ windows winapi
1个回答
0
投票

PebBaseAddress
位于目标进程的地址空间中,因此需要使用
ReadProcessMemory

© www.soinside.com 2019 - 2024. All rights reserved.