【问题标题】:GetProcessIoCounters errors out with code 998 [duplicate]GetProcessIoCounters 错误,代码 998 [重复]
【发布时间】:2020-10-01 08:58:19
【问题描述】:

我正在尝试通过以下方式获取当前进程的 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。

有人可以帮我吗?

提前致谢。

【问题讨论】:

  • 您没有传递有效的指针来接收数据。 IO_COUNTERS ctr = {}; GetProcessIoCounters(handle, &ctr);
  • 直接来自documentation"lpIoCounters:一个指向IO_COUNTERS 结构的指针,它接收进程的I/O 记帐信息。"

标签: windows winapi visual-c++ win32com win32-process


【解决方案1】:

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

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 结构的各个成员以获取所需的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2012-07-12
    • 2012-09-24
    • 1970-01-01
    • 2015-03-28
    • 2014-04-05
    相关资源
    最近更新 更多