我打电话有从LsaOpenPolicy政策手柄和LookupAccountName帐户的SID ADVAPI32.DLL LsaEnumerateAccountRights功能.
然而,尝试为我可能,我总是又回到0xC0000034它通过LsaNtStatusToWinError翻译后给我"引用的文件不能被发现."
这不是很好.我的代码处理这个并继续使用LsaAddAccountRights授予帐户SID SeServiceLogonRight,所以我知道策略句柄和帐户SID是正常的,因为如果其中一个出现问题就会爆炸.
最终结果是该帐户确实具有所需的权限,因此代码的整体运行.
但是,我在MSI自定义操作中使用它,安装检查以查看该帐户是否有权,如果没有(或如上所述失败),它授予权限并记住它已在安装中完成州.如果发生回滚并且添加了正确的回滚,则将其删除.我们从未在卸载中删除,因为其他应用程序可能已使用我们运行的服务所使用的相同域帐户进行安装.
所以问题是当MSI执行回滚时 - 它总是会删除权限,因为它总是认为已经添加了它.因此,使用LsaEnumerateAccountRights检查权限是为了这个 - 但我无法让它工作.
任何想法 - 请注意,我使用C#与DllImport属性,露出Win32函数,和我之前C#有就是Unix不是世界上最好的Win32编程!