Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / Microsoft / Win32 / SafeHandles / SafeWaitHandle.cs / 1305376 / SafeWaitHandle.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: SafeWaitHandle ** ** ** A wrapper for Win32 events (mutexes, auto reset events, and ** manual reset events). Used by WaitHandle. ** ** ===========================================================*/ using System; using System.Security; using System.Security.Permissions; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Runtime.Versioning; using Microsoft.Win32; using System.Threading; namespace Microsoft.Win32.SafeHandles { [System.Security.SecurityCritical] // auto-generated_required public sealed class SafeWaitHandle : SafeHandleZeroOrMinusOneIsInvalid { // Special case flags for Mutexes enables workaround for known OS bug at // http://support.microsoft.com/default.aspx?scid=kb;en-us;889318 // One machine-wide mutex serializes all OpenMutex and CloseHandle operations. // bIsMutex: if true, we need to grab machine-wide mutex before doing any Close ops. // Initialized to false by the runtime. private bool bIsMutex; // bIsMutex: if true, we need to avoid grabbing the machine-wide mutex before Close ops, // since that mutex is, of course, this very handle. // Initialized to false by the runtime. private bool bIsReservedMutex; // Called by P/Invoke marshaler private SafeWaitHandle() : base(true) { } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public SafeWaitHandle(IntPtr existingHandle, bool ownsHandle) : base(ownsHandle) { SetHandle(existingHandle); } [System.Security.SecurityCritical] [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] override protected bool ReleaseHandle() { #if !FEATURE_CORECLR if (!bIsMutex || Environment.HasShutdownStarted) return Win32Native.CloseHandle(handle); bool bReturn = false; bool bMutexObtained = false; try { if (!bIsReservedMutex) { Mutex.AcquireReservedMutex(ref bMutexObtained); } bReturn = Win32Native.CloseHandle(handle); } finally { if (bMutexObtained) Mutex.ReleaseReservedMutex(); } return bReturn; #else return Win32Native.CloseHandle(handle); #endif } internal void SetAsMutex() { bIsMutex = true; } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] internal void SetAsReservedMutex() { bIsReservedMutex = true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InputReport.cs
- ADMembershipProvider.cs
- PropertyTab.cs
- PagePropertiesChangingEventArgs.cs
- MatchingStyle.cs
- DataBindingHandlerAttribute.cs
- PassportAuthenticationModule.cs
- DataGridViewCellCancelEventArgs.cs
- TextServicesContext.cs
- ListViewGroupConverter.cs
- TextWriter.cs
- StaticFileHandler.cs
- RectAnimationBase.cs
- CompilerGlobalScopeAttribute.cs
- Encoder.cs
- WizardForm.cs
- ViewManagerAttribute.cs
- GC.cs
- Timer.cs
- IdentitySection.cs
- Transaction.cs
- WindowsStatusBar.cs
- DataGridViewSortCompareEventArgs.cs
- AssemblyBuilder.cs
- HMACSHA384.cs
- BufferBuilder.cs
- WebConvert.cs
- NumericExpr.cs
- MonthCalendarDesigner.cs
- ToolStripDropDownClosingEventArgs.cs
- SQLInt64Storage.cs
- MachineKeyValidationConverter.cs
- ObjectMemberMapping.cs
- Process.cs
- LocalizableResourceBuilder.cs
- ActivityCollectionMarkupSerializer.cs
- objectresult_tresulttype.cs
- DataGridTextBoxColumn.cs
- Subtree.cs
- Transform.cs
- WindowsSpinner.cs
- ResourceCategoryAttribute.cs
- TextInfo.cs
- ItemContainerGenerator.cs
- Pair.cs
- EventRouteFactory.cs
- ViewLoader.cs
- ToolBarPanel.cs
- UniformGrid.cs
- BinaryFormatter.cs
- ComAdminInterfaces.cs
- StrongNamePublicKeyBlob.cs
- DeferredSelectedIndexReference.cs
- PngBitmapDecoder.cs
- TabControl.cs
- HtmlString.cs
- CapabilitiesState.cs
- Enum.cs
- QueryExtender.cs
- DependencyPropertyHelper.cs
- XmlSchemaFacet.cs
- XmlDeclaration.cs
- IntSecurity.cs
- HandlerBase.cs
- SvcMapFileSerializer.cs
- TableLayoutPanelDesigner.cs
- TextViewBase.cs
- EmptyImpersonationContext.cs
- CachedBitmap.cs
- DataListCommandEventArgs.cs
- WebPartZoneBaseDesigner.cs
- RayMeshGeometry3DHitTestResult.cs
- BinarySerializer.cs
- CapabilitiesAssignment.cs
- AssociatedControlConverter.cs
- AvTrace.cs
- ImageSourceValueSerializer.cs
- LiteralLink.cs
- DocumentViewerHelper.cs
- NetworkAddressChange.cs
- EntityContainerEmitter.cs
- PresentationAppDomainManager.cs
- SecurityException.cs
- Effect.cs
- AdapterUtil.cs
- SqlGatherConsumedAliases.cs
- OLEDB_Enum.cs
- HtmlElementErrorEventArgs.cs
- ExpandCollapseProviderWrapper.cs
- InstalledFontCollection.cs
- DbConnectionPool.cs
- IconBitmapDecoder.cs
- NativeCompoundFileAPIs.cs
- Native.cs
- ToolStripRenderEventArgs.cs
- TransformerInfo.cs
- XmlSchemaAnyAttribute.cs
- CopyNodeSetAction.cs
- Directory.cs
- SqlRowUpdatingEvent.cs