我打电话给Advapi32.dll LsaEnumerateAccountRights函数,它有一个来自LsaOpenPolicy的策略句柄和一个来自LookupAccountName的账号SID。LsaEnumerateAccountRights总是返回“找不到文件”
但是,尽我所能,我总是回来0xC0000034,这是由LsaNtStatusToWinError翻译后给我“无法找到引用的文件。”
这不是一大堆好东西。我的代码处理这个并继续使用LsaAddAccountRights为SeServiceLogonRight授予帐户SID,所以我知道策略句柄和帐户SID都很好,因为如果其中一个出现问题,它就会被炸掉。
最终的结果是,该帐户确实有它需要的权利,因此整体代码的工作原理。
但是,我在MSI自定义操作中使用此操作,安装检查以查看帐户是否有权利,如果它没有(或如上述那样失败)它授予权利并记住它已完成它处于安装状态。如果发生回滚,并且它添加了正确的值,则会将其删除。我们绝不会在卸载时将其删除,因为其他应用程序可能使用与我们运行的服务相同的域帐户进行安装。
所以问题是当一个MSI执行回滚 - 它总是会删除它一直认为它已经添加它的权利。因此,使用LsaEnumerateAccountRights检查权限是用于此 - 但我不能让它工作。
任何想法 - 请注意,我使用C#与DllImport属性来公开Win32函数,并且我不是世界上最好的Win32程序员,在C#之前一直是Unix!
超级惊人!感谢那! – Ajay 2011-07-10 17:44:05