什么可能导致EnumProcesses()失败?

时间:2017-10-04 15:33:14

标签: c++ unit-testing winapi

documentation州:

  

如果函数失败,则返回值为零。要获得扩展错误   信息,调用GetLastError。

但它并没有举例说明该功能可能如何失败。

对于单元测试,我需要可靠地创建使EnumProcesses()失败的情况。

1 个答案:

答案 0 :(得分:3)

与大多数函数一样,如果传递无效参数,它可能会失败。在这种情况下,这意味着比您告诉它的大小更小的PID数组或接收计数的NULL指针。这样做有点冒险,因为你不知道该函数是否使用SEH来防止这种情况或是否会崩溃。

在内部,函数必须在调用NTDLL之前分配一些内存来获取进程信息,如果内存不足,这可能导致函数失败。

您应该在辅助函数中调用EnumProcesses来抽象出内存/重试细节,这将是在需要时模拟失败的好地方。

如果你绝对需要函数本身失败,你可以用微软Detours或IAT钩子挂钩...