問題:我正在查找每個WellKnownSidType枚舉成員的帳戶名稱和SID,如下所示。
爲什麼它有時會失敗?
爲什麼它在將WellKnownSidType轉換爲sid時有時會失敗?
據我瞭解,只有從sid到accountname的轉換有時會失敗,甚至只有當賬戶不是本地的而且不在域中的時候。
WellKnownSidType爲什麼有時無法轉換爲sid /帳戶?
例如,平移所述枚舉LogonIdsSid到SID的情況下,我得到:
Bekannte的SID DES Typs LogonIdsSidkönnennicht標準化。創建werden。
(類型LogonIdsSid的已知的SID不能創建。)
或查找的帳戶名的NTAuthoritySid
當我得到:芒奧德全部identitätsverweisekonnten nichtübersetztwerden。
(部分或全部idendity引用不能轉換。)
Sub Main()
Enumerations.SidInfo(Of System.Security.Principal.WellKnownSidType)()
End Sub
Public Class Enumerations
Public Shared Sub SidInfo(Of T)()
Dim enumType As Type = GetType(T)
For Each ThisEnumValue As T In System.Enum.GetValues(GetType(T))
Try
Console.WriteLine("Enum: System.Security.Principal.WellKnownSidType." + System.Enum.Format(GetType(T), ThisEnumValue, "G"))
Dim enumItem1 As System.Reflection.FieldInfo = enumType.GetField(System.Enum.Format(GetType(T), ThisEnumValue, "G"))
Dim enumValue1 As T = CType(enumItem1.GetValue(enumType), T)
Dim sid As System.Security.Principal.SecurityIdentifier = New System.Security.Principal.SecurityIdentifier(CType(CType(enumValue1, Object), System.Security.Principal.WellKnownSidType), Nothing)
Console.WriteLine("SID: " + sid.ToString())
Dim ntAccount As Security.Principal.NTAccount = CType(sid.Translate(GetType(Security.Principal.NTAccount)), Security.Principal.NTAccount)
Console.WriteLine("Account: " + ntAccount.ToString())
Console.WriteLine(vbCrLf)
Catch ex As Exception
Console.WriteLine("Exception on: " + System.Enum.Format(GetType(T), ThisEnumValue, "G"))
Console.WriteLine(vbCrLf)
End Try
Next
End Sub
End Class
C#(自動翻譯):
//Dim sid As System.Security.Principal.SecurityIdentifier = New System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.WorldSid, Nothing)
//Dim rule As System.Security.AccessControl.MutexAccessRule = New System.Security.AccessControl.MutexAccessRule(sid, System.Security.AccessControl.MutexRights.FullControl, System.Security.AccessControl.AccessControlType.Allow)
public static void GetSID<T>()
{
Type enumType = typeof(T);
foreach (T ThisEnumValue in System.Enum.GetValues(typeof(T))) {
try {
Console.WriteLine("Enum: System.Security.Principal.WellKnownSidType." + System.Enum.Format(typeof(T), ThisEnumValue, "G"));
System.Reflection.FieldInfo enumItem1 = enumType.GetField(System.Enum.Format(typeof(T), ThisEnumValue, "G"));
T enumValue1 = (T)enumItem1.GetValue(enumType);
System.Security.Principal.SecurityIdentifier sid = new System.Security.Principal.SecurityIdentifier((System.Security.Principal.WellKnownSidType)(object)enumValue1, null);
Console.WriteLine("SID: " + sid.ToString());
System.Security.Principal.NTAccount ntAccount = (Security.Principal.NTAccount)sid.Translate(typeof(Security.Principal.NTAccount));
Console.WriteLine("Account: " + ntAccount.ToString());
Console.WriteLine(Constants.vbCrLf);
} catch (Exception ex) {
Console.WriteLine("Exception on: " + System.Enum.Format(typeof(T), ThisEnumValue, "G") + Constants.vbCrLf + ex.Message);
Console.WriteLine(Constants.vbCrLf);
}
}
}
你的意思是什麼樣的失敗?你得到一個例外嗎? – 2011-02-18 17:30:45
@Chris Haas:添加了異常消息。 – 2011-02-18 17:38:42