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
- Send.cs
- ArrayTypeMismatchException.cs
- HostedHttpTransportManager.cs
- IconBitmapDecoder.cs
- UniqueID.cs
- DoubleCollectionConverter.cs
- XmlSchemaSimpleType.cs
- Dispatcher.cs
- UserMapPath.cs
- TransformGroup.cs
- CodeDelegateCreateExpression.cs
- TextElementAutomationPeer.cs
- GridLength.cs
- MSAAEventDispatcher.cs
- EntityModelBuildProvider.cs
- GridViewUpdateEventArgs.cs
- AddInActivator.cs
- GridItemProviderWrapper.cs
- InvalidComObjectException.cs
- TreeNodeClickEventArgs.cs
- Utils.cs
- InstanceDataCollectionCollection.cs
- MarkupCompilePass1.cs
- ParsedRoute.cs
- XmlILAnnotation.cs
- WebPartCatalogAddVerb.cs
- Exception.cs
- CalendarDay.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- DecoderFallback.cs
- CalloutQueueItem.cs
- XmlElement.cs
- EncoderFallback.cs
- SimpleMailWebEventProvider.cs
- TextBreakpoint.cs
- HttpPostedFileWrapper.cs
- Selection.cs
- XmlSerializer.cs
- ToolStripContentPanelRenderEventArgs.cs
- FixedFindEngine.cs
- ToolboxComponentsCreatedEventArgs.cs
- SerializationUtilities.cs
- AssemblyUtil.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- WindowsServiceElement.cs
- FileLoadException.cs
- UniqueID.cs
- ConnectionPointConverter.cs
- XmlSchemaDocumentation.cs
- Control.cs
- HttpListenerPrefixCollection.cs
- CustomAttributeSerializer.cs
- SqlFormatter.cs
- InputProviderSite.cs
- CompilationUnit.cs
- DataGridColumnsPage.cs
- PageBuildProvider.cs
- WindowsPen.cs
- StrokeNodeOperations.cs
- LineProperties.cs
- GZipStream.cs
- ResourceProviderFactory.cs
- SignatureResourcePool.cs
- SendActivityValidator.cs
- DetailsViewRowCollection.cs
- SafeEventHandle.cs
- XmlAttribute.cs
- Rules.cs
- SlipBehavior.cs
- DataRecordInternal.cs
- ImportedNamespaceContextItem.cs
- ConfigurationStrings.cs
- FlowNode.cs
- GridItemPattern.cs
- WebEncodingValidator.cs
- XmlSchemas.cs
- ImageDrawing.cs
- namescope.cs
- WinCategoryAttribute.cs
- arabicshape.cs
- ProgressBar.cs
- WebPartConnectionCollection.cs
- GroupByQueryOperator.cs
- InputScopeConverter.cs
- FontSourceCollection.cs
- ObjectStateFormatter.cs
- CaseInsensitiveOrdinalStringComparer.cs
- ModifierKeysValueSerializer.cs
- SimpleTypeResolver.cs
- SafeCryptoHandles.cs
- DbgUtil.cs
- Wizard.cs
- PropertyAccessVisitor.cs
- tabpagecollectioneditor.cs
- ListViewItem.cs
- StronglyTypedResourceBuilder.cs
- WebEvents.cs
- SymLanguageType.cs
- ClientCultureInfo.cs
- CodeMemberMethod.cs