GENERIC_EXECUTE 的 OpenSCManager 调用失败

Failed OpenSCManager call for GENERIC_EXECUTE

我的设置

我检查了一些与我相似的答案,例如:

但是 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 解决了这个问题。

这些资源很有帮助。