我有一个安装包,用于安装我创建的服务进程。我想提示用户输入服务进程应运行的帐户的用户名/密码。在继续安装之前,我想验证用户名/密码组合是否有效。我有一个C DLL,我用于特殊的安装行为,但我无法弄清楚如何使用Windows API来验证帐户的凭据。我希望能够支持服务控制管理器使用的相同帐户名语法。
答案 0 :(得分:12)
您要使用的功能是LogonUser。您甚至可以非常酷,并指定LOGON32_LOGON_SERVICE标志,该标志会检查以确保用户具有运行服务的适当权限。
答案 1 :(得分:2)
LogonUser是规范的方法,尽管微软有点discourages it。
答案 2 :(得分:0)
我已经使用LogonUser函数实现了这个,正如你们提到的那样(顺便说一下,这个服务需要WinXP SP2或更高版本,所以我不担心特权问题)。但是,这并不像我希望的那样有效。如果我调用QueryServiceConfig,则lpServiceStartName的格式为“。\ accountname”。如果我按原样将此字符串传递给LogonUser,则会失败。我假设'\'前面的部分代表用户所属的机器?
另外,如果我分别为lpServiceStartName和lpPassword参数调用ChangeServiceConfig指定“LocalSystem”和“”,这样可以正常工作。但是,使用这些参数调用LogonUser不起作用。
我真的想使用与SCM用于帐户名称相同的语法。