private static unsafe int MustRunInitializeSecurityContext(SafeFreeCredentials inCredentials, void *inContextPtr, byte *targetName, SspiContextFlags inFlags, Endianness endianness, SecurityBufferDescriptor inputBuffer, SafeDeleteContext outContext, SecurityBufferDescriptor outputBuffer, ref SspiContextFlags attributes, SafeFreeContextBuffer handleTemplate) { long num; int num1 = -1; bool flag = false; bool flag1 = false; RuntimeHelpers.PrepareConstrainedRegions(); try { try { inCredentials.DangerousAddRef(ref flag); outContext.DangerousAddRef(ref flag1); } catch (Exception exception1) { Exception exception = exception1; if (Fx.IsFatal(exception)) { throw; } if (flag) { inCredentials.DangerousRelease(); flag = false; } if (flag1) { outContext.DangerousRelease(); flag1 = false; } if (!(exception is ObjectDisposedException)) { throw; } } } finally { if (!flag) { inCredentials = null; } else if (flag && flag1) { SSPIHandle sSPIHandle = inCredentials._handle; num1 = SafeDeleteContext.InitializeSecurityContextW(ref sSPIHandle, inContextPtr, targetName, inFlags, 0, endianness, inputBuffer, 0, ref outContext._handle, outputBuffer, ref attributes, out num); if (outContext._EffectiveCredential == inCredentials || ((long)num1 & (ulong)-2147483648) != (long)0) { inCredentials.DangerousRelease(); } else { if (outContext._EffectiveCredential != null) { outContext._EffectiveCredential.DangerousRelease(); } outContext._EffectiveCredential = inCredentials; } outContext.DangerousRelease(); if (handleTemplate != null) { handleTemplate.Set((*(outputBuffer.UnmanagedPointer)).token); if (handleTemplate.IsInvalid) { handleTemplate.SetHandleAsInvalid(); } } } if (inContextPtr == null && ((long)num1 & (ulong)-2147483648) != (long)0) { outContext._handle.SetToInvalid(); } } return(num1); }