Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SafeDeleteContext.cs
Go to the documentation of this file.
5
6namespace System.Net.Security;
7
8internal abstract class SafeDeleteContext : SafeHandle
9{
10 internal global::Interop.SspiCli.CredHandle _handle;
11
12 private static readonly IdnMapping s_idnMapping = new IdnMapping();
13
15
16 public override bool IsInvalid
17 {
18 [MethodImpl(MethodImplOptions.AggressiveInlining)]
19 get
20 {
21 if (!base.IsClosed)
22 {
23 return _handle.IsZero;
24 }
25 return true;
26 }
27 }
28
30 : base(IntPtr.Zero, ownsHandle: true)
31 {
32 _handle = default(global::Interop.SspiCli.CredHandle);
33 }
34
35 public override string ToString()
36 {
37 return _handle.ToString();
38 }
39
40 internal unsafe static int InitializeSecurityContext(ref System.Net.Security.SafeFreeCredentials inCredentials, ref System.Net.Security.SafeDeleteSslContext refContext, string targetName, global::Interop.SspiCli.ContextFlags inFlags, global::Interop.SspiCli.Endianness endianness, System.Net.Security.InputSecurityBuffers inSecBuffers, ref System.Net.Security.SecurityBuffer outSecBuffer, ref global::Interop.SspiCli.ContextFlags outFlags)
41 {
42 if (inCredentials == null)
43 {
44 throw new ArgumentNullException("inCredentials");
45 }
46 global::Interop.SspiCli.SecBufferDesc secBufferDesc = new global::Interop.SspiCli.SecBufferDesc(inSecBuffers.Count);
47 global::Interop.SspiCli.SecBufferDesc outputBuffer = new global::Interop.SspiCli.SecBufferDesc(1);
48 bool flag = (((inFlags & global::Interop.SspiCli.ContextFlags.AllocateMemory) != 0) ? true : false);
49 int result = -1;
50 bool flag2 = true;
51 if (refContext != null)
52 {
53 flag2 = refContext._handle.IsZero;
54 }
55 IntPtr intPtr = IntPtr.Zero;
56 try
57 {
58 Span<global::Interop.SspiCli.SecBuffer> span = stackalloc global::Interop.SspiCli.SecBuffer[3];
59 fixed (global::Interop.SspiCli.SecBuffer* ptr = span)
60 {
61 void* pBuffers = ptr;
62 fixed (byte* ptr2 = inSecBuffers._item0.Token)
63 {
64 void* ptr3 = ptr2;
65 fixed (byte* ptr4 = inSecBuffers._item1.Token)
66 {
67 void* ptr5 = ptr4;
68 fixed (byte* ptr6 = inSecBuffers._item2.Token)
69 {
70 void* ptr7 = ptr6;
71 secBufferDesc.pBuffers = pBuffers;
72 if (inSecBuffers.Count > 2)
73 {
74 span[2].BufferType = inSecBuffers._item2.Type;
75 if (inSecBuffers._item2.UnmanagedToken != null)
76 {
77 span[2].pvBuffer = inSecBuffers._item2.UnmanagedToken.DangerousGetHandle();
78 span[2].cbBuffer = ((ChannelBinding)inSecBuffers._item2.UnmanagedToken).Size;
79 }
80 else
81 {
82 span[2].cbBuffer = inSecBuffers._item2.Token.Length;
83 span[2].pvBuffer = (IntPtr)ptr7;
84 }
85 }
86 if (inSecBuffers.Count > 1)
87 {
88 span[1].BufferType = inSecBuffers._item1.Type;
89 if (inSecBuffers._item1.UnmanagedToken != null)
90 {
91 span[1].pvBuffer = inSecBuffers._item1.UnmanagedToken.DangerousGetHandle();
92 span[1].cbBuffer = ((ChannelBinding)inSecBuffers._item1.UnmanagedToken).Size;
93 }
94 else
95 {
96 span[1].cbBuffer = inSecBuffers._item1.Token.Length;
97 span[1].pvBuffer = (IntPtr)ptr5;
98 }
99 }
100 if (inSecBuffers.Count > 0)
101 {
102 span[0].BufferType = inSecBuffers._item0.Type;
103 if (inSecBuffers._item0.UnmanagedToken != null)
104 {
105 span[0].pvBuffer = inSecBuffers._item0.UnmanagedToken.DangerousGetHandle();
106 span[0].cbBuffer = ((ChannelBinding)inSecBuffers._item0.UnmanagedToken).Size;
107 }
108 else
109 {
110 span[0].cbBuffer = inSecBuffers._item0.Token.Length;
111 span[0].pvBuffer = (IntPtr)ptr3;
112 }
113 }
114 fixed (byte* ptr8 = outSecBuffer.token)
115 {
116 global::Interop.SspiCli.SecBuffer secBuffer = default(global::Interop.SspiCli.SecBuffer);
117 outputBuffer.pBuffers = &secBuffer;
118 secBuffer.cbBuffer = outSecBuffer.size;
119 secBuffer.BufferType = outSecBuffer.type;
120 secBuffer.pvBuffer = ((outSecBuffer.token == null || outSecBuffer.token.Length == 0) ? IntPtr.Zero : ((IntPtr)(ptr8 + outSecBuffer.offset)));
121 if ((refContext == null || refContext.IsInvalid) && flag2)
122 {
123 refContext = new System.Net.Security.SafeDeleteSslContext();
124 }
125 if (targetName == null || targetName.Length == 0)
126 {
127 targetName = " ";
128 }
129 string ascii = s_idnMapping.GetAscii(targetName);
130 fixed (char* ptr9 = ascii)
131 {
132 result = MustRunInitializeSecurityContext(ref inCredentials, flag2, (byte*)(((object)targetName == " ") ? null : ptr9), inFlags, endianness, &secBufferDesc, refContext, ref outputBuffer, ref outFlags, null);
133 if (flag)
134 {
135 intPtr = secBuffer.pvBuffer;
136 }
137 outSecBuffer.size = secBuffer.cbBuffer;
138 outSecBuffer.type = secBuffer.BufferType;
139 outSecBuffer.token = ((outSecBuffer.size > 0) ? new Span<byte>((void*)secBuffer.pvBuffer, secBuffer.cbBuffer).ToArray() : null);
140 if (inSecBuffers.Count > 1 && span[1].BufferType == System.Net.Security.SecurityBufferType.SECBUFFER_EXTRA && inSecBuffers._item1.Type == System.Net.Security.SecurityBufferType.SECBUFFER_EMPTY)
141 {
142 int cbBuffer = span[1].cbBuffer;
143 int num = inSecBuffers._item0.Token.Length - span[1].cbBuffer;
144 span[0].cbBuffer = cbBuffer;
145 span[0].pvBuffer = span[0].pvBuffer + num;
146 span[1].BufferType = System.Net.Security.SecurityBufferType.SECBUFFER_EMPTY;
147 span[1].cbBuffer = 0;
148 secBuffer.cbBuffer = 0;
149 if (intPtr != IntPtr.Zero)
150 {
151 global::Interop.SspiCli.FreeContextBuffer(intPtr);
152 intPtr = IntPtr.Zero;
153 }
154 result = MustRunInitializeSecurityContext(ref inCredentials, flag2, (byte*)(((object)targetName == " ") ? null : ptr9), inFlags, endianness, &secBufferDesc, refContext, ref outputBuffer, ref outFlags, null);
155 if (flag)
156 {
157 intPtr = secBuffer.pvBuffer;
158 }
159 if (secBuffer.cbBuffer > 0)
160 {
161 if (outSecBuffer.size == 0)
162 {
163 outSecBuffer.size = secBuffer.cbBuffer;
164 outSecBuffer.type = secBuffer.BufferType;
165 outSecBuffer.token = new Span<byte>((void*)secBuffer.pvBuffer, secBuffer.cbBuffer).ToArray();
166 }
167 else
168 {
169 byte[] array = new byte[outSecBuffer.size + secBuffer.cbBuffer];
170 Buffer.BlockCopy(outSecBuffer.token, 0, array, 0, outSecBuffer.size);
171 new Span<byte>((void*)secBuffer.pvBuffer, secBuffer.cbBuffer).CopyTo(new Span<byte>(array, outSecBuffer.size, secBuffer.cbBuffer));
172 outSecBuffer.size = array.Length;
173 outSecBuffer.token = array;
174 }
175 }
176 if (span[1].BufferType == System.Net.Security.SecurityBufferType.SECBUFFER_EXTRA)
177 {
178 result = -2146893032;
179 }
180 }
181 }
182 }
183 }
184 }
185 }
186 }
187 }
188 finally
189 {
190 if (intPtr != IntPtr.Zero)
191 {
192 global::Interop.SspiCli.FreeContextBuffer(intPtr);
193 }
194 }
195 return result;
196 }
197
198 private unsafe static int MustRunInitializeSecurityContext(ref System.Net.Security.SafeFreeCredentials inCredentials, bool isContextAbsent, byte* targetName, global::Interop.SspiCli.ContextFlags inFlags, global::Interop.SspiCli.Endianness endianness, global::Interop.SspiCli.SecBufferDesc* inputBuffer, System.Net.Security.SafeDeleteContext outContext, ref global::Interop.SspiCli.SecBufferDesc outputBuffer, ref global::Interop.SspiCli.ContextFlags attributes, System.Net.Security.SafeFreeContextBuffer handleTemplate)
199 {
200 int num = -2146893055;
201 try
202 {
203 bool success = false;
204 inCredentials.DangerousAddRef(ref success);
205 outContext.DangerousAddRef(ref success);
206 global::Interop.SspiCli.CredHandle credentialHandle = inCredentials._handle;
207 global::Interop.SspiCli.CredHandle credHandle = outContext._handle;
208 void* ptr = (credHandle.IsZero ? null : (&credHandle));
209 isContextAbsent = ptr == null;
210 num = global::Interop.SspiCli.InitializeSecurityContextW(ref credentialHandle, ptr, targetName, inFlags, 0, endianness, inputBuffer, 0, ref outContext._handle, ref outputBuffer, ref attributes, out var _);
211 }
212 finally
213 {
214 if (outContext._EffectiveCredential != inCredentials && (num & 0x80000000u) == 0L)
215 {
216 outContext._EffectiveCredential?.DangerousRelease();
217 outContext._EffectiveCredential = inCredentials;
218 }
219 else
220 {
221 inCredentials.DangerousRelease();
222 }
223 outContext.DangerousRelease();
224 }
225 if (handleTemplate != null)
226 {
227 handleTemplate.Set(((global::Interop.SspiCli.SecBuffer*)outputBuffer.pBuffers)->pvBuffer);
228 if (handleTemplate.IsInvalid)
229 {
230 handleTemplate.SetHandleAsInvalid();
231 }
232 }
233 if (isContextAbsent && (num & 0x80000000u) != 0L)
234 {
235 outContext._handle.SetToInvalid();
236 }
237 return num;
238 }
239
240 internal unsafe static int AcceptSecurityContext(ref System.Net.Security.SafeFreeCredentials inCredentials, ref System.Net.Security.SafeDeleteSslContext refContext, global::Interop.SspiCli.ContextFlags inFlags, global::Interop.SspiCli.Endianness endianness, System.Net.Security.InputSecurityBuffers inSecBuffers, ref System.Net.Security.SecurityBuffer outSecBuffer, ref global::Interop.SspiCli.ContextFlags outFlags)
241 {
242 if (inCredentials == null)
243 {
244 throw new ArgumentNullException("inCredentials");
245 }
246 global::Interop.SspiCli.SecBufferDesc secBufferDesc = new global::Interop.SspiCli.SecBufferDesc(inSecBuffers.Count);
247 global::Interop.SspiCli.SecBufferDesc outputBuffer = new global::Interop.SspiCli.SecBufferDesc(2);
248 bool flag = (((inFlags & global::Interop.SspiCli.ContextFlags.AllocateMemory) != 0) ? true : false);
249 int result = -1;
250 bool flag2 = true;
251 if (refContext != null)
252 {
253 flag2 = refContext._handle.IsZero;
254 }
255 Span<global::Interop.SspiCli.SecBuffer> span = stackalloc global::Interop.SspiCli.SecBuffer[2];
256 span[1].pvBuffer = IntPtr.Zero;
257 try
258 {
259 Span<global::Interop.SspiCli.SecBuffer> span2 = stackalloc global::Interop.SspiCli.SecBuffer[3];
260 fixed (global::Interop.SspiCli.SecBuffer* ptr = span2)
261 {
262 void* pBuffers = ptr;
263 fixed (global::Interop.SspiCli.SecBuffer* ptr2 = span)
264 {
265 void* pBuffers2 = ptr2;
266 fixed (byte* ptr3 = inSecBuffers._item0.Token)
267 {
268 void* ptr4 = ptr3;
269 fixed (byte* ptr5 = inSecBuffers._item1.Token)
270 {
271 void* ptr6 = ptr5;
272 fixed (byte* ptr7 = inSecBuffers._item2.Token)
273 {
274 void* ptr8 = ptr7;
275 secBufferDesc.pBuffers = pBuffers;
276 if (inSecBuffers.Count > 2)
277 {
278 span2[2].BufferType = inSecBuffers._item2.Type;
279 if (inSecBuffers._item2.UnmanagedToken != null)
280 {
281 span2[2].pvBuffer = inSecBuffers._item2.UnmanagedToken.DangerousGetHandle();
282 span2[2].cbBuffer = ((ChannelBinding)inSecBuffers._item2.UnmanagedToken).Size;
283 }
284 else
285 {
286 span2[2].cbBuffer = inSecBuffers._item2.Token.Length;
287 span2[2].pvBuffer = (IntPtr)ptr8;
288 }
289 }
290 if (inSecBuffers.Count > 1)
291 {
292 span2[1].BufferType = inSecBuffers._item1.Type;
293 if (inSecBuffers._item1.UnmanagedToken != null)
294 {
295 span2[1].pvBuffer = inSecBuffers._item1.UnmanagedToken.DangerousGetHandle();
296 span2[1].cbBuffer = ((ChannelBinding)inSecBuffers._item1.UnmanagedToken).Size;
297 }
298 else
299 {
300 span2[1].cbBuffer = inSecBuffers._item1.Token.Length;
301 span2[1].pvBuffer = (IntPtr)ptr6;
302 }
303 }
304 if (inSecBuffers.Count > 0)
305 {
306 span2[0].BufferType = inSecBuffers._item0.Type;
307 if (inSecBuffers._item0.UnmanagedToken != null)
308 {
309 span2[0].pvBuffer = inSecBuffers._item0.UnmanagedToken.DangerousGetHandle();
310 span2[0].cbBuffer = ((ChannelBinding)inSecBuffers._item0.UnmanagedToken).Size;
311 }
312 else
313 {
314 span2[0].cbBuffer = inSecBuffers._item0.Token.Length;
315 span2[0].pvBuffer = (IntPtr)ptr4;
316 }
317 }
318 fixed (byte* ptr9 = outSecBuffer.token)
319 {
320 outputBuffer.pBuffers = pBuffers2;
321 span[0].cbBuffer = outSecBuffer.size;
322 span[0].BufferType = outSecBuffer.type;
323 span[0].pvBuffer = ((outSecBuffer.token == null || outSecBuffer.token.Length == 0) ? IntPtr.Zero : ((IntPtr)(ptr9 + outSecBuffer.offset)));
324 span[1].cbBuffer = 0;
325 span[1].BufferType = System.Net.Security.SecurityBufferType.SECBUFFER_ALERT;
326 if ((refContext == null || refContext.IsInvalid) && flag2)
327 {
328 refContext = new System.Net.Security.SafeDeleteSslContext();
329 }
330 result = MustRunAcceptSecurityContext_SECURITY(ref inCredentials, flag2, &secBufferDesc, inFlags, endianness, refContext, ref outputBuffer, ref outFlags, null);
331 int index = ((span[0].cbBuffer == 0 && span[1].cbBuffer > 0) ? 1 : 0);
332 outSecBuffer.size = span[index].cbBuffer;
333 outSecBuffer.type = span[index].BufferType;
334 outSecBuffer.token = ((outSecBuffer.size > 0) ? new Span<byte>((void*)span[index].pvBuffer, span[0].cbBuffer).ToArray() : null);
335 if (inSecBuffers.Count > 1 && span2[1].BufferType == System.Net.Security.SecurityBufferType.SECBUFFER_EXTRA && inSecBuffers._item1.Type == System.Net.Security.SecurityBufferType.SECBUFFER_EMPTY)
336 {
337 int cbBuffer = span2[1].cbBuffer;
338 int num = inSecBuffers._item0.Token.Length - span2[1].cbBuffer;
339 span2[0].cbBuffer = cbBuffer;
340 span2[0].pvBuffer = span2[0].pvBuffer + num;
341 span2[1].BufferType = System.Net.Security.SecurityBufferType.SECBUFFER_EMPTY;
342 span2[1].cbBuffer = 0;
343 span[0].cbBuffer = 0;
344 if (flag && span[0].pvBuffer != IntPtr.Zero)
345 {
346 global::Interop.SspiCli.FreeContextBuffer(span[0].pvBuffer);
347 span[0].pvBuffer = IntPtr.Zero;
348 }
349 result = MustRunAcceptSecurityContext_SECURITY(ref inCredentials, flag2, &secBufferDesc, inFlags, endianness, refContext, ref outputBuffer, ref outFlags, null);
350 index = ((span[0].cbBuffer == 0 && span[1].cbBuffer > 0) ? 1 : 0);
351 if (span[index].cbBuffer > 0)
352 {
353 if (outSecBuffer.size == 0)
354 {
355 outSecBuffer.size = span[index].cbBuffer;
356 outSecBuffer.type = span[index].BufferType;
357 outSecBuffer.token = new Span<byte>((void*)span[index].pvBuffer, span[index].cbBuffer).ToArray();
358 }
359 else
360 {
361 byte[] array = new byte[outSecBuffer.size + span[index].cbBuffer];
362 Buffer.BlockCopy(outSecBuffer.token, 0, array, 0, outSecBuffer.size);
363 new Span<byte>((void*)span[index].pvBuffer, span[index].cbBuffer).CopyTo(new Span<byte>(array, outSecBuffer.size, span[index].cbBuffer));
364 outSecBuffer.size = array.Length;
365 outSecBuffer.token = array;
366 }
367 }
368 if (span2[1].BufferType == System.Net.Security.SecurityBufferType.SECBUFFER_EXTRA)
369 {
370 result = -2146893032;
371 }
372 }
373 }
374 }
375 }
376 }
377 }
378 }
379 }
380 finally
381 {
382 if (flag && span[0].pvBuffer != IntPtr.Zero)
383 {
384 global::Interop.SspiCli.FreeContextBuffer(span[0].pvBuffer);
385 }
386 if (span[1].pvBuffer != IntPtr.Zero)
387 {
388 global::Interop.SspiCli.FreeContextBuffer(span[1].pvBuffer);
389 }
390 }
391 return result;
392 }
393
394 private unsafe static int MustRunAcceptSecurityContext_SECURITY(ref System.Net.Security.SafeFreeCredentials inCredentials, bool isContextAbsent, global::Interop.SspiCli.SecBufferDesc* inputBuffer, global::Interop.SspiCli.ContextFlags inFlags, global::Interop.SspiCli.Endianness endianness, System.Net.Security.SafeDeleteContext outContext, ref global::Interop.SspiCli.SecBufferDesc outputBuffer, ref global::Interop.SspiCli.ContextFlags outFlags, System.Net.Security.SafeFreeContextBuffer handleTemplate)
395 {
396 int num = -2146893055;
397 try
398 {
399 bool success = false;
400 inCredentials.DangerousAddRef(ref success);
401 outContext.DangerousAddRef(ref success);
402 global::Interop.SspiCli.CredHandle credentialHandle = inCredentials._handle;
403 global::Interop.SspiCli.CredHandle credHandle = outContext._handle;
404 void* ptr = (credHandle.IsZero ? null : (&credHandle));
405 isContextAbsent = ptr == null;
406 num = global::Interop.SspiCli.AcceptSecurityContext(ref credentialHandle, ptr, inputBuffer, inFlags, endianness, ref outContext._handle, ref outputBuffer, ref outFlags, out var _);
407 }
408 finally
409 {
410 if (outContext._EffectiveCredential != inCredentials && (num & 0x80000000u) == 0L)
411 {
412 outContext._EffectiveCredential?.DangerousRelease();
413 outContext._EffectiveCredential = inCredentials;
414 }
415 else
416 {
417 inCredentials.DangerousRelease();
418 }
419 outContext.DangerousRelease();
420 }
421 if (handleTemplate != null)
422 {
423 handleTemplate.Set(((global::Interop.SspiCli.SecBuffer*)outputBuffer.pBuffers)->pvBuffer);
424 if (handleTemplate.IsInvalid)
425 {
426 handleTemplate.SetHandleAsInvalid();
427 }
428 }
429 if (isContextAbsent && (num & 0x80000000u) != 0L)
430 {
431 outContext._handle.SetToInvalid();
432 }
433 return num;
434 }
435
436 internal unsafe static int CompleteAuthToken(ref System.Net.Security.SafeDeleteSslContext refContext, in System.Net.Security.SecurityBuffer inSecBuffer)
437 {
438 if (System.Net.NetEventSource.Log.IsEnabled())
439 {
440 System.Net.NetEventSource.Info(null, $"refContext = {refContext}, inSecBuffer = {inSecBuffer}", "CompleteAuthToken");
441 }
442 global::Interop.SspiCli.SecBufferDesc inputBuffers = new global::Interop.SspiCli.SecBufferDesc(1);
443 int result = -2146893055;
444 global::Interop.SspiCli.SecBuffer secBuffer = default(global::Interop.SspiCli.SecBuffer);
445 inputBuffers.pBuffers = &secBuffer;
446 fixed (byte* ptr = inSecBuffer.token)
447 {
448 secBuffer.cbBuffer = inSecBuffer.size;
449 secBuffer.BufferType = inSecBuffer.type;
450 secBuffer.pvBuffer = ((inSecBuffer.unmanagedToken != null) ? inSecBuffer.unmanagedToken.DangerousGetHandle() : ((inSecBuffer.token == null || inSecBuffer.token.Length == 0) ? IntPtr.Zero : ((IntPtr)(ptr + inSecBuffer.offset))));
451 global::Interop.SspiCli.CredHandle credHandle = ((refContext != null) ? refContext._handle : default(global::Interop.SspiCli.CredHandle));
452 if ((refContext == null || refContext.IsInvalid) && credHandle.IsZero)
453 {
454 refContext = new System.Net.Security.SafeDeleteSslContext();
455 }
456 bool success = false;
457 try
458 {
459 refContext.DangerousAddRef(ref success);
460 result = global::Interop.SspiCli.CompleteAuthToken(credHandle.IsZero ? null : (&credHandle), ref inputBuffers);
461 }
462 finally
463 {
464 if (success)
465 {
466 refContext.DangerousRelease();
467 }
468 }
469 }
470 return result;
471 }
472}
static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count)
Definition Buffer.cs:102
static readonly System.Net.NetEventSource Log
static void Info(object thisOrContextObject, FormattableString formattableString=null, [CallerMemberName] string memberName=null)
static unsafe int CompleteAuthToken(ref System.Net.Security.SafeDeleteSslContext refContext, in System.Net.Security.SecurityBuffer inSecBuffer)
static readonly IdnMapping s_idnMapping
global::Interop.SspiCli.CredHandle _handle
static unsafe int AcceptSecurityContext(ref System.Net.Security.SafeFreeCredentials inCredentials, ref System.Net.Security.SafeDeleteSslContext refContext, global::Interop.SspiCli.ContextFlags inFlags, global::Interop.SspiCli.Endianness endianness, System.Net.Security.InputSecurityBuffers inSecBuffers, ref System.Net.Security.SecurityBuffer outSecBuffer, ref global::Interop.SspiCli.ContextFlags outFlags)
static unsafe int MustRunInitializeSecurityContext(ref System.Net.Security.SafeFreeCredentials inCredentials, bool isContextAbsent, byte *targetName, global::Interop.SspiCli.ContextFlags inFlags, global::Interop.SspiCli.Endianness endianness, global::Interop.SspiCli.SecBufferDesc *inputBuffer, System.Net.Security.SafeDeleteContext outContext, ref global::Interop.SspiCli.SecBufferDesc outputBuffer, ref global::Interop.SspiCli.ContextFlags attributes, System.Net.Security.SafeFreeContextBuffer handleTemplate)
System.Net.Security.SafeFreeCredentials _EffectiveCredential
static unsafe int InitializeSecurityContext(ref System.Net.Security.SafeFreeCredentials inCredentials, ref System.Net.Security.SafeDeleteSslContext refContext, string targetName, global::Interop.SspiCli.ContextFlags inFlags, global::Interop.SspiCli.Endianness endianness, System.Net.Security.InputSecurityBuffers inSecBuffers, ref System.Net.Security.SecurityBuffer outSecBuffer, ref global::Interop.SspiCli.ContextFlags outFlags)
static unsafe int MustRunAcceptSecurityContext_SECURITY(ref System.Net.Security.SafeFreeCredentials inCredentials, bool isContextAbsent, global::Interop.SspiCli.SecBufferDesc *inputBuffer, global::Interop.SspiCli.ContextFlags inFlags, global::Interop.SspiCli.Endianness endianness, System.Net.Security.SafeDeleteContext outContext, ref global::Interop.SspiCli.SecBufferDesc outputBuffer, ref global::Interop.SspiCli.ContextFlags outFlags, System.Net.Security.SafeFreeContextBuffer handleTemplate)
void DangerousAddRef(ref bool success)
Definition SafeHandle.cs:76
static readonly IntPtr Zero
Definition IntPtr.cs:18
void CopyTo(Span< T > destination)
Definition Span.cs:224
T[] ToArray()
Definition Span.cs:291
int Length
Definition Span.cs:70