【问题标题】:Windows: Terminate a process: ERROR_INVALID_HANDLEWindows:终止进程:ERROR_INVALID_HANDLE
【发布时间】:2013-06-29 04:40:47
【问题描述】:

我正在尝试在我的子进程上调用 TerminateProcess(仅作为当子进程陷入死锁或严重情况时使用的安全机制),但我收到了 ERROR_INVALID_HANDLER。

我尝试过使用“进程”设置,但没有帮助。如果我在 CreateProcess() 之后立即调用 TerminateProcess(),则调用确实有效。

BOOL ret;
HANDLE hProcess;

hProcess = OpenProcess(PROCESS_TERMINATE,
                        FALSE,
                        pid);

if (hProcess = NULL) {
    debug("Error: OpenProcess failed: %d", GetLastError());
    return -1;
}

ret = TerminateProcess(hProcess, 1);
CloseHandle(hProcess);

if (!ret) {
    debug("Error: TerminateProcess failed: %d", GetLastError());
    return -1;
}
else return 0;

我收到错误 6,INVALID_HANDLE_EXCEPTION。我仔细检查了 pid 是正确的(它与任务管理器中的内容匹配)。唯一可能的错误可能是我如何使用 OpenProcess() 获取句柄。我尝试使用 PROCESS_ALL_ACCESS 但效果不佳。

请问有谁知道哪里出了问题?

编辑:投出这么愚蠢的错误!我将 NULL 分配给 hProcess('=' 而不是 '==')

抱歉发帖了!

【问题讨论】:

  • 您的 if() 语句将 NULL 分配给 hProcess。请改用 == 运算符。并在失败后立即调用 GetLastError(),而不是在 CloseHandle() 之后调用。
  • “我收到 ERROR_INVALID_HANDLER”。不,您收到的是“我收到 ERROR_INVALID_HANDLE”。
  • 谢谢,我注意到了我的错误,有时很难看到(不只是看那些行)。感谢您的帮助,谢谢!

标签: windows terminate createprocess


【解决方案1】:
if (hProcess = NULL)

这是一个赋值而不是一个条件,将“=”更改为“==”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 2019-08-01
    • 2011-04-02
    • 2011-08-02
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多