gpt4 book ai didi

windows - SetSecurityInfo 因 PROCESS_TERMINATE 而失败

转载 作者:可可西里 更新时间:2023-11-01 14:44:16 28 4
gpt4 key购买 nike

我正在尝试设置 PROCESS_TERMINATE 的安全性。这是代码:

   CreateProcess("C:\\ADP\\SQLBase\\dbntsrv.exe", NULL, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, "C:\\ADP\\SQLBase", &si, &pi);       

if(SetSecurityInfo(pi.hProcess, SE_KERNEL_OBJECT, PROCESS_TERMINATE, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
MessageBox(NULL, "process_terminate granted", NULL, MB_OK);
}
else
{
MessageBox(NULL, "process_terminate not granted", NULL, MB_OK);
}



//--------------------- Permission to query for info to use GetExitCode -------------------------
if(SetSecurityInfo(pi.hProcess, SE_KERNEL_OBJECT, PROCESS_QUERY_INFORMATION, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
{
MessageBox(NULL, "process_query_information granted", NULL, MB_OK);
}
else
{
MessageBox(NULL, "process_query_information not granted", NULL, MB_OK);
}


LPDWORD lpExitCode;
GetExitCodeProcess(pi.hProcess, lpExitCode);

此处 PROCESS_TERMINATE 的 SetSecurityInfo 失败,我收到 Unhandled Exception..(KERNEL32.dll):Access Violation

GetExitCodeProcess(pi.hProcess, lpExitCode);

为什么会这样?谢谢你

最佳答案

访问冲突是因为这段代码:

LPDWORD lpExitCode;
GetExitCodeProcess(pi.hProcess, lpExitCode);

在这里声明lpExitCode 是一个指针,但是您没有让它指向任何地方。当 GetExitCodeProcess 尝试写入 *lpExitCode 时,会导致访问冲突。

正确的做法是这样的:

DWORD ExitCode;
GetExitCodeProcess(pi.hProcess, &ExitCode);

我也不相信您根本不需要调用 SetSecurityInfoCreateProcess 返回的进程句柄应该有足够的权限。

您需要等待生成的进程终止,然后才能期望获得退出代码。这是因为 GetExitCodeProcess 是异步的。你可以这样等待:

WaitForSingleObject(pi.hProcess);
//now you can call GetExitCodeProcess and expect an answer.

并记得检查所有 API 调用是否有错误。

关于windows - SetSecurityInfo 因 PROCESS_TERMINATE 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9463437/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com