Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Win32.cs
Go to the documentation of this file.
4
6
7internal static class Win32
8{
9 internal static SafeLsaPolicyHandle LsaOpenPolicy(string systemName, PolicyRights rights)
10 {
11 global::Interop.OBJECT_ATTRIBUTES Attributes = default(global::Interop.OBJECT_ATTRIBUTES);
12 SafeLsaPolicyHandle PolicyHandle;
13 uint num = global::Interop.Advapi32.LsaOpenPolicy(systemName, ref Attributes, (int)rights, out PolicyHandle);
14 switch (num)
15 {
16 case 0u:
17 return PolicyHandle;
18 case 3221225506u:
20 case 3221225495u:
21 case 3221225626u:
22 throw new OutOfMemoryException();
23 default:
24 {
25 uint error = global::Interop.Advapi32.LsaNtStatusToWinError(num);
26 throw new Win32Exception((int)error);
27 }
28 }
29 }
30
31 internal static byte[] ConvertIntPtrSidToByteArraySid(IntPtr binaryForm)
32 {
33 byte b = Marshal.ReadByte(binaryForm, 0);
35 {
37 }
38 byte b2 = Marshal.ReadByte(binaryForm, 1);
39 if (b2 < 0 || b2 > 15)
40 {
42 }
43 int num = 8 + b2 * 4;
44 byte[] array = new byte[num];
45 Marshal.Copy(binaryForm, array, 0, num);
46 return array;
47 }
48
49 internal static int CreateSidFromString(string stringSid, out byte[] resultSid)
50 {
51 IntPtr ByteArray = IntPtr.Zero;
52 int lastWin32Error;
53 try
54 {
55 if (global::Interop.Advapi32.ConvertStringSidToSid(stringSid, out ByteArray) == 0)
56 {
57 lastWin32Error = Marshal.GetLastWin32Error();
58 goto IL_002b;
59 }
60 resultSid = ConvertIntPtrSidToByteArraySid(ByteArray);
61 }
62 finally
63 {
64 Marshal.FreeHGlobal(ByteArray);
65 }
66 return 0;
67 IL_002b:
68 resultSid = null;
69 return lastWin32Error;
70 }
71
72 internal static int CreateWellKnownSid(WellKnownSidType sidType, SecurityIdentifier domainSid, out byte[] resultSid)
73 {
74 uint resultSidLength = (uint)SecurityIdentifier.MaxBinaryLength;
75 resultSid = new byte[resultSidLength];
76 if (global::Interop.Advapi32.CreateWellKnownSid((int)sidType, domainSid?.BinaryForm, resultSid, ref resultSidLength) != 0)
77 {
78 return 0;
79 }
80 resultSid = null;
82 }
83
85 {
86 if (sid1 == null || sid2 == null)
87 {
88 return false;
89 }
90 byte[] array = new byte[sid1.BinaryLength];
91 sid1.GetBinaryForm(array, 0);
92 byte[] array2 = new byte[sid2.BinaryLength];
93 sid2.GetBinaryForm(array2, 0);
94 if (global::Interop.Advapi32.IsEqualDomainSid(array, array2, out var result) != 0)
95 {
96 return result;
97 }
98 return false;
99 }
100
101 internal unsafe static void InitializeReferencedDomainsPointer(SafeLsaMemoryHandle referencedDomains)
102 {
103 referencedDomains.Initialize((uint)Marshal.SizeOf<global::Interop.LSA_REFERENCED_DOMAIN_LIST>());
104 global::Interop.LSA_REFERENCED_DOMAIN_LIST lSA_REFERENCED_DOMAIN_LIST = referencedDomains.Read<global::Interop.LSA_REFERENCED_DOMAIN_LIST>(0uL);
105 byte* pointer = null;
106 try
107 {
108 referencedDomains.AcquirePointer(ref pointer);
109 if (lSA_REFERENCED_DOMAIN_LIST.Domains != IntPtr.Zero)
110 {
111 global::Interop.LSA_TRUST_INFORMATION* ptr = (global::Interop.LSA_TRUST_INFORMATION*)(void*)lSA_REFERENCED_DOMAIN_LIST.Domains;
112 ptr += lSA_REFERENCED_DOMAIN_LIST.Entries;
113 long numBytes = (byte*)ptr - pointer;
114 referencedDomains.Initialize((ulong)numBytes);
115 }
116 }
117 finally
118 {
119 if (pointer != null)
120 {
121 referencedDomains.ReleasePointer();
122 }
123 }
124 }
125
127 {
128 byte[] array = new byte[sid.BinaryLength];
129 sid.GetBinaryForm(array, 0);
130 uint resultSidLength = (uint)SecurityIdentifier.MaxBinaryLength;
131 byte[] array2 = new byte[resultSidLength];
132 if (global::Interop.Advapi32.GetWindowsAccountDomainSid(array, array2, ref resultSidLength) != 0)
133 {
134 resultSid = new SecurityIdentifier(array2, 0);
135 return 0;
136 }
137 resultSid = null;
138 return Marshal.GetLastWin32Error();
139 }
140
142 {
143 byte[] array = new byte[sid.BinaryLength];
144 sid.GetBinaryForm(array, 0);
145 if (global::Interop.Advapi32.IsWellKnownSid(array, (int)type) == 0)
146 {
147 return false;
148 }
149 return true;
150 }
151}
static void FreeHGlobal(IntPtr hglobal)
Definition Marshal.cs:1680
static byte ReadByte(object ptr, int ofs)
Definition Marshal.cs:49
static void Copy(int[] source, int startIndex, IntPtr destination, int length)
Definition Marshal.cs:800
static int SizeOf(object structure)
Definition Marshal.cs:697
unsafe void AcquirePointer(ref byte *pointer)
Definition SafeBuffer.cs:58
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string IdentityReference_InvalidNumberOfSubauthorities
Definition SR.cs:46
static string IdentityReference_InvalidSidRevision
Definition SR.cs:48
Definition SR.cs:7
void GetBinaryForm(byte[] binaryForm, int offset)
static unsafe void InitializeReferencedDomainsPointer(SafeLsaMemoryHandle referencedDomains)
Definition Win32.cs:101
static int CreateWellKnownSid(WellKnownSidType sidType, SecurityIdentifier domainSid, out byte[] resultSid)
Definition Win32.cs:72
static int CreateSidFromString(string stringSid, out byte[] resultSid)
Definition Win32.cs:49
static int GetWindowsAccountDomainSid(SecurityIdentifier sid, out SecurityIdentifier resultSid)
Definition Win32.cs:126
static bool IsWellKnownSid(SecurityIdentifier sid, WellKnownSidType type)
Definition Win32.cs:141
static byte[] ConvertIntPtrSidToByteArraySid(IntPtr binaryForm)
Definition Win32.cs:31
static bool IsEqualDomainSid(SecurityIdentifier sid1, SecurityIdentifier sid2)
Definition Win32.cs:84
static SafeLsaPolicyHandle LsaOpenPolicy(string systemName, PolicyRights rights)
Definition Win32.cs:9
static readonly IntPtr Zero
Definition IntPtr.cs:18