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
- DataViewSettingCollection.cs
- RequestBringIntoViewEventArgs.cs
- HandlerBase.cs
- RemotingConfiguration.cs
- SendMailErrorEventArgs.cs
- EventLogTraceListener.cs
- TransportSecurityBindingElement.cs
- TabItemWrapperAutomationPeer.cs
- Condition.cs
- ComplusEndpointConfigContainer.cs
- EllipseGeometry.cs
- ActivityMarkupSerializationProvider.cs
- NotifyIcon.cs
- BitmapSourceSafeMILHandle.cs
- InstanceData.cs
- ExpressionLink.cs
- DashStyle.cs
- VisualStateChangedEventArgs.cs
- HtmlShim.cs
- XmlSchemaComplexContentExtension.cs
- ResourcePart.cs
- PassportIdentity.cs
- COAUTHINFO.cs
- WebPageTraceListener.cs
- OciHandle.cs
- TextCharacters.cs
- FrameSecurityDescriptor.cs
- MessageQueueEnumerator.cs
- EntityProviderServices.cs
- WorkflowItemsPresenter.cs
- OdbcDataReader.cs
- ImageAnimator.cs
- ControlBindingsCollection.cs
- TypeInfo.cs
- TcpClientCredentialType.cs
- ListViewItem.cs
- RouteParser.cs
- GlobalProxySelection.cs
- UniqueSet.cs
- UnconditionalPolicy.cs
- PathSegmentCollection.cs
- TextDecorations.cs
- xamlnodes.cs
- TextTrailingWordEllipsis.cs
- RSAPKCS1SignatureDeformatter.cs
- HttpStreamXmlDictionaryReader.cs
- RecipientIdentity.cs
- DataGridViewRowContextMenuStripNeededEventArgs.cs
- InputScope.cs
- ShaderRenderModeValidation.cs
- IsolatedStoragePermission.cs
- ParenthesizePropertyNameAttribute.cs
- CheckBox.cs
- DrawingContextWalker.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- BindableAttribute.cs
- GestureRecognitionResult.cs
- CodePrimitiveExpression.cs
- InputProcessorProfiles.cs
- DataRecordInfo.cs
- ValidationHelper.cs
- StrokeCollectionConverter.cs
- NativeMethods.cs
- HandlerBase.cs
- PrintController.cs
- OdbcReferenceCollection.cs
- ErrorFormatter.cs
- GcSettings.cs
- HttpCachePolicy.cs
- TransformerConfigurationWizardBase.cs
- Vector3DValueSerializer.cs
- ApplicationInterop.cs
- RadialGradientBrush.cs
- WindowsIPAddress.cs
- HtmlElementErrorEventArgs.cs
- WebScriptEnablingBehavior.cs
- ActivationServices.cs
- SettingsPropertyIsReadOnlyException.cs
- MarkerProperties.cs
- StateChangeEvent.cs
- CharKeyFrameCollection.cs
- Configuration.cs
- StreamWithDictionary.cs
- DesigntimeLicenseContext.cs
- ToolStripDropDownItem.cs
- CodeExporter.cs
- StoreItemCollection.Loader.cs
- RoleManagerEventArgs.cs
- StreamUpdate.cs
- RecognizedAudio.cs
- invalidudtexception.cs
- HtmlInputImage.cs
- FormatVersion.cs
- WSFederationHttpBindingElement.cs
- PageRanges.cs
- ComplexObject.cs
- PrintController.cs
- MessageBox.cs
- DataMemberConverter.cs
- FullTextBreakpoint.cs