问题描述
我正在尝试通过以下方式获取当前进程的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
结构的各个成员以获取所需的信息。