GetProcessIoCounters错误出现,代码为998

问题描述

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

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

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

有人可以帮我吗?

谢谢。

解决方法

发生“无效访问”错误,因为您正在传递nullptr结构的地址的IO_COUNTERS值,将要检索的信息写入其中。您需要为此提供一个 actual 结构的地址:

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

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