GetProcessIoCounters 错误代码 998

GetProcessIoCounters errors out with code 998

我正在尝试通过以下方式获取当前进程的 PIO_COUNTERS:

DWORD pid = GetCurrentProcessId();
auto handle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
PIO_COUNTERS ctr = nullptr;
if (!GetProcessIoCounters(handle, ctr)) {
  DWORD dw = GetLastError();
}

我得到 dw 的值为 998,这是“内存位置的无效访问”。这实质上意味着我正在使用的句柄没有足够的权限,但这是具有最大访问控制权限的标志。我也尝试使用“GetCurrentProcess”给出的句柄(与我上面得到的不同)但是在将它传递给 GetProcessIoCounters 后也给出了错误代码 998。

有人可以帮我解决这个问题吗?

提前致谢。

发生 'invalid access' 错误是因为您正在为 IO_COUNTERS 结构的地址传递一个 nullptr 值,以便将您正在检索的信息写入该结构。您需要为此提供 actual 结构的地址:

DWORD pid = GetCurrentProcessId();
auto handle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
IO_COUNTERS info;
if (!GetProcessIoCounters(handle, &info)) { // Pass the address of your structure!
  DWORD dw = GetLastError();
}

然后您可以访问 info 结构的各个成员以获取您想要的信息。