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
- basemetadatamappingvisitor.cs
- CheckPair.cs
- GestureRecognitionResult.cs
- Point3DAnimation.cs
- PriorityItem.cs
- GeometryHitTestResult.cs
- SqlDesignerDataSourceView.cs
- ExtensionDataReader.cs
- LazyLoadBehavior.cs
- XmlDictionaryReader.cs
- ThicknessAnimation.cs
- Vector3DAnimationBase.cs
- ConnectionPointCookie.cs
- HtmlElement.cs
- WebScriptEndpointElement.cs
- Context.cs
- EntitySet.cs
- SqlRemoveConstantOrderBy.cs
- ObjectStorage.cs
- BinaryExpressionHelper.cs
- SponsorHelper.cs
- NodeFunctions.cs
- ContourSegment.cs
- SqlDataSourceFilteringEventArgs.cs
- FontFaceLayoutInfo.cs
- XmlEncodedRawTextWriter.cs
- DesignerSerializationManager.cs
- RightsManagementInformation.cs
- DiscriminatorMap.cs
- ThreadStartException.cs
- sqlcontext.cs
- DataMember.cs
- BitmapCodecInfoInternal.cs
- IsolatedStorage.cs
- BoundField.cs
- ElementAtQueryOperator.cs
- X509ServiceCertificateAuthenticationElement.cs
- DBConnection.cs
- ErrorEventArgs.cs
- BidOverLoads.cs
- WeakReferenceEnumerator.cs
- WebBrowserDesigner.cs
- TextRangeProviderWrapper.cs
- KeyInfo.cs
- DispatcherHooks.cs
- SessionParameter.cs
- XmlHelper.cs
- EntityContainerAssociationSet.cs
- LineUtil.cs
- Substitution.cs
- FileLogRecordEnumerator.cs
- DataSourceConverter.cs
- ContentIterators.cs
- XmlSerializableWriter.cs
- StringHandle.cs
- KeyBinding.cs
- DataGridPageChangedEventArgs.cs
- Rotation3DKeyFrameCollection.cs
- CapabilitiesUse.cs
- WhitespaceRuleReader.cs
- CursorConverter.cs
- CodeTypeReference.cs
- XamlBrushSerializer.cs
- DbTransaction.cs
- ChangeInterceptorAttribute.cs
- AnnotationStore.cs
- GroupBox.cs
- XmlSerializationReader.cs
- Array.cs
- AsymmetricSignatureDeformatter.cs
- TreeViewItem.cs
- QilNode.cs
- SerializerProvider.cs
- EventLogPermissionHolder.cs
- VirtualPathUtility.cs
- DataGridTable.cs
- StackSpiller.Temps.cs
- MetadataUtil.cs
- HuffCodec.cs
- _BasicClient.cs
- TitleStyle.cs
- CroppedBitmap.cs
- RadioButtonPopupAdapter.cs
- SafeCancelMibChangeNotify.cs
- Quad.cs
- DesignTimeTemplateParser.cs
- NameSpaceExtractor.cs
- XmlSchemaComplexContent.cs
- SecurityUtils.cs
- Deflater.cs
- BuildProvidersCompiler.cs
- InkCanvasInnerCanvas.cs
- ModelItemImpl.cs
- GroupItemAutomationPeer.cs
- EntitySetRetriever.cs
- ResourcesBuildProvider.cs
- XmlBinaryReaderSession.cs
- PropertyEmitter.cs
- TypeUtil.cs
- MarkupObject.cs