我打電話給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