GENERIC_EXECUTE 的 OpenSCManager 调用失败
Failed OpenSCManager call for GENERIC_EXECUTE
我的设置
- Windows 10
- Visual Studio 2017
- Windows SDK 10.0.17763.0
我检查了一些与我相似的答案,例如:
- wrapper | OpenSCManager failed - Access is denied. (0x5)
- On Non-Admin Account OpenSCManager() function returns null
但是 none 这些情况和我一样糟糕。其他人的代码都要求管理员权限,例如 SC_MANAGER_ALL_ACCESS
但我的代码只要求 GENERIC_EXECUTE
,这对于普通用户帐户来说似乎完全正常:
SC_HANDLE hSC = ::OpenSCManager(NULL,
NULL, GENERIC_EXECUTE);
if (hSC == NULL) {
error("Error opening SCManager {}. Aborted.", GetLastError());
return Mam_ErrorWindowsAppleDeviceServiceInit;
}
现在这个调用总是失败,GetLassError()
给出:ERROR_ACCESS_DENIED
(0x5).
我尝试以管理员身份打开Visual Studio,然后上面的调用通过了。
以上代码一周前有效。在我背后可能有一个我不知道的 Windows10 更新,但这可能只是 Windows 安全策略的更改吗?
感谢@SoumenMukherjee 和@RbMm 的提示。我发现 LocalSystem
权限,我即将打开的服务要求
SC_MANAGER_LOCK
SERVICE_START
SERVICE_STOP
应该用作管理员。
如果 Windows 方面这方面有一段时间没有改变,那么我最近继承的代码可能从未按预期工作过。现在,基本上用户必须在安装期间或 运行 时间启动服务或向应用程序授予适当的管理员权限。
但是,我真的不需要 SC_MANAGER_LOCK
,所以用 STANDARD_RIGHTS_EXECUTE | SC_MANAGER_CONNECT
替换 GENERIC_EXECUTE
解决了这个问题。
这些资源很有帮助。
我的设置
- Windows 10
- Visual Studio 2017
- Windows SDK 10.0.17763.0
我检查了一些与我相似的答案,例如:
- wrapper | OpenSCManager failed - Access is denied. (0x5)
- On Non-Admin Account OpenSCManager() function returns null
但是 none 这些情况和我一样糟糕。其他人的代码都要求管理员权限,例如 SC_MANAGER_ALL_ACCESS
但我的代码只要求 GENERIC_EXECUTE
,这对于普通用户帐户来说似乎完全正常:
SC_HANDLE hSC = ::OpenSCManager(NULL,
NULL, GENERIC_EXECUTE);
if (hSC == NULL) {
error("Error opening SCManager {}. Aborted.", GetLastError());
return Mam_ErrorWindowsAppleDeviceServiceInit;
}
现在这个调用总是失败,GetLassError()
给出:ERROR_ACCESS_DENIED
(0x5).
我尝试以管理员身份打开Visual Studio,然后上面的调用通过了。
以上代码一周前有效。在我背后可能有一个我不知道的 Windows10 更新,但这可能只是 Windows 安全策略的更改吗?
感谢@SoumenMukherjee 和@RbMm 的提示。我发现 LocalSystem
权限,我即将打开的服务要求
SC_MANAGER_LOCK
SERVICE_START
SERVICE_STOP
应该用作管理员。
如果 Windows 方面这方面有一段时间没有改变,那么我最近继承的代码可能从未按预期工作过。现在,基本上用户必须在安装期间或 运行 时间启动服务或向应用程序授予适当的管理员权限。
但是,我真的不需要 SC_MANAGER_LOCK
,所以用 STANDARD_RIGHTS_EXECUTE | SC_MANAGER_CONNECT
替换 GENERIC_EXECUTE
解决了这个问题。
这些资源很有帮助。