unsafe public static void Free(NativeOverlapped *nativeOverlappedPtr) { if (nativeOverlappedPtr == null) { throw new ArgumentNullException("nativeOverlappedPtr"); } // Debugging aid if (nativeOverlappedPtr->ReservedCOR1 == unchecked ((int)0xdeadbeef)) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_OverlappedFreedTwice")); } nativeOverlappedPtr->ReservedCOR1 = unchecked ((int)0xdeadbeef); #if _DEBUG nativeOverlappedPtr->InternalHigh = unchecked ((int)0xdeadbeef); nativeOverlappedPtr->InternalLow = unchecked ((int)0xdeadbeef); nativeOverlappedPtr->OffsetHigh = unchecked ((int)0xdeadbeef); nativeOverlappedPtr->OffsetLow = unchecked ((int)0xdeadbeef); nativeOverlappedPtr->EventHandle = unchecked ((int)0xdeadbeef); #endif GCHandle eeHandleForAr = (*nativeOverlappedPtr).ReservedClasslib; eeHandleForAr.__InternalFree(); (*nativeOverlappedPtr).ReservedCOR2.__InternalFree(); if (nativeOverlappedPtr->ReservedCOR3 != (IntPtr)null) { #if _DEBUG if (nativeOverlappedPtr->ReservedCOR3 == (IntPtr) unchecked ((int)0xdeadbeef)) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_OverlappedFreedTwice")); } #endif CodeAccessSecurityEngine.ReleaseDelayedCompressedStack(nativeOverlappedPtr->ReservedCOR3); } #if _DEBUG nativeOverlappedPtr->ReservedCOR3 = new IntPtr(unchecked ((int)0xdeadbeef)); #endif FreeNativeOverlapped(nativeOverlappedPtr); }