2010-08-10 46 views
1

System.Security.WindowsPrincipal.IsInRole()方法是否會遞歸驗證用戶成員身份? 我嘗試以下,並得到了不穩定的結果:System.Security.WindowsPrincipal.IsInRole()方法的異常行爲

案例1: 創建安全組 - SGroup1 添加 - NT AUTHORITY \身份驗證的用戶SGroup1。 註銷並登錄 爲登錄用戶調用IsInRole()。該API返回true。

案例2: 創建安全組 - SGroup1 添加 - 管理員到SGroup1。 註銷並以管理員身份登錄。 爲登錄用戶調用IsInRole()。該API返回false。

我錯過了什麼?

回答

1

你在運行什麼操作系統?如果您在Windows Vista或Windows 7(或其Server 2008/R2同系列)上運行,則適用以下情況。正如Note指出下的msdn documentation備註爲WindowsPrincipal.IsInRole(我的重點):

在Windows Vista中,用戶帳戶控制 (UAC)確定 用戶的權限。如果您是 內置管理員組的成員,則您爲 分配了兩個運行時訪問令牌: 標準用戶訪問令牌和 管理員訪問令牌。 通過 默認,你在標準用戶 的作用。當您嘗試執行需要管理 權限的 任務時,可以使用Consent 對話框動態地 提升您的角色。執行 IsInRole方法的代碼不顯示 同意對話框。 如果您處於標準用戶 角色中,即使您位於內置的 管理員組中,該代碼也會返回 false。在執行 代碼之前,您可以提升 的權限,方法是右鍵單擊應用程序 圖標並指示您想以管理員身份運行 。

+0

我正在使用Windows Server 2008 R2。以管理員身份運行應用程序也不能解決問題。有沒有Windows日誌,我可以找到失敗的原因? – user412272 2010-08-10 08:24:51

+0

只是爲了確認,通過「以管理員身份運行應用程序」,您的意思是「右鍵單擊該應用程序,從上下文菜單中選擇'以管理員身份運行'並向UAC提示'是',對吧?=) – Rob 2010-08-10 08:26:26

+0

是的,我甚至嘗試使用管理員憑據登錄,但它仍然無效。 這就是我所做的 - - 創建組 - SGroup1 - 打開cmd提示符並執行 - net localgroup「SGroup1」「Administrators」/ add [添加了BUILTIN \管理員到SGroup1] - 作爲Administrators組下的成員登錄,併爲登錄用戶調用IsInRole() – user412272 2010-08-10 08:36:51