为了账号安全,请及时绑定邮箱和手机立即绑定

TerminateProcess() 返回 EINVAL

TerminateProcess() 返回 EINVAL

Go
慕码人8056858 2023-06-01 14:31:14
我正在尝试调试一个问题,但我不明白。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 argumenton TerminateProcess。查看 TerminateProcess 的 MSDN 文档,您需要首先使用 PROCESS_TERMINATE 访问权限打开对进程的访问权限。我正在使用该访问权限打开流程,因此它应该可以正常工作。我做错了什么/错过了什么?
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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



查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信