登录
首页 >  Golang >  Go问答

TerminateProcess() 返回 EINVAL

来源:stackoverflow

时间:2024-04-09 22:48:26 136浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《TerminateProcess() 返回 EINVAL》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我正在尝试调试一个问题,但我不明白它。

func BackgroundProcess(lpCommandLine string) (error) {
    var lpProcessAttrs windows.SecurityAttributes
    var lpThreadAttrs windows.SecurityAttributes
    var lpProcInfo windows.ProcessInformation
    var lpStartup windows.StartupInformation

    // convert to null terminated
    lpCli, err := StringToLpStr(lpCommandLine)
    if err != nil {
        return err
    }

    if ok := CreateProcess(nil, lpCli, &lpProcessAttrs, &lpThreadAttrs, true, 0, nil, nil, &lpStartup, &lpProcInfo); !ok {
        return GetLastError()
    }
    // DeleteProcessAccessRight is just a const for 1
    childProcessHandle = OpenProcess(DeleteProcessAccessRight, false, lpProcInfo.dwProcess)
    if ok := TerminateProcess(childProcessHandle, 0); !ok {
        return GetLastError()
    }
}

如果我用 backgroundprocess("c:\\windows\\system32\\calc.exe") 调用此函数,我会收到错误 einval,即 invalid argument,在 terminateprocess 上。查看 terminateprocess 的 msdn 文档,您需要首先使用 process_terminate 访问权限打开对进程的访问。我正在使用该访问权限打开该进程,因此它应该可以正常工作。我做错了什么/遗漏了什么?


解决方案


所以我弄清楚了这个具体问题。我正在使用 C:\\Windows\\System32\\calc.exe 进行测试,它是一个通用 Windows 应用程序,具有运行时代理。当我开始使用 C:\\Windows\\System32\\notepad.exe 进行测试时,它就开始工作了。一旦我弄清楚如何处理运行时代理,我将更新这个答案。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>