Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / System / Windows / Media / SafeReversePInvokeHandle.cs / 1 / SafeReversePInvokeHandle.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // A safe way to deal with unmanaged MIL interface pointers. //--------------------------------------------------------------------------- using System; using System.IO; using System.Security; using System.Security.Permissions; using System.Collections; using System.Reflection; using MS.Internal; using MS.Win32; using System.Diagnostics; using System.Windows.Media; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using Microsoft.Win32.SafeHandles; using Microsoft.Internal; using UnsafeNativeMethods=MS.Win32.PresentationCore.UnsafeNativeMethods; namespace System.Windows.Media { internal class SafeReversePInvokeWrapper : SafeHandleZeroOrMinusOneIsInvalid { ////// Use this constructor if the handle isn't ready yet and later /// set the handle with SetHandle. SafeMILHandle owns the release /// of the handle. /// ////// Critical: This derives from a class that has a link demand and inheritance demand /// TreatAsSafe: Ok to call constructor /// [SecurityCritical] internal SafeReversePInvokeWrapper() : base(true) { } ////// Use this constructor if the handle exists at construction time. /// SafeMILHandle owns the release of the parameter. /// ////// Calls into native code to wrap a reverse p-invoke delegate into a CReversePInvokeDelegateWrapper. /// [SecurityCritical] internal SafeReversePInvokeWrapper(IntPtr delegatePtr) : base(true) { // Wrap the reverse p-invoke into a reversePInvokeWrapper. IntPtr reversePInvokeWrapper; HRESULT.Check(UnsafeNativeMethods.MilCoreApi.MilCreateReversePInvokeWrapper(delegatePtr, out reversePInvokeWrapper)); SetHandle(reversePInvokeWrapper); } ////// Critical - calls unmanaged code, not treat as safe because you must /// validate that handle is a valid COM object. /// [SecurityCritical] protected override bool ReleaseHandle() { if (handle != IntPtr.Zero) { UnsafeNativeMethods.MilCoreApi.MilReleasePInvokePtrBlocking(handle); } UnsafeNativeMethods.MILUnknown.ReleaseInterface(ref handle); return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // A safe way to deal with unmanaged MIL interface pointers. //--------------------------------------------------------------------------- using System; using System.IO; using System.Security; using System.Security.Permissions; using System.Collections; using System.Reflection; using MS.Internal; using MS.Win32; using System.Diagnostics; using System.Windows.Media; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using Microsoft.Win32.SafeHandles; using Microsoft.Internal; using UnsafeNativeMethods=MS.Win32.PresentationCore.UnsafeNativeMethods; namespace System.Windows.Media { internal class SafeReversePInvokeWrapper : SafeHandleZeroOrMinusOneIsInvalid { ////// Use this constructor if the handle isn't ready yet and later /// set the handle with SetHandle. SafeMILHandle owns the release /// of the handle. /// ////// Critical: This derives from a class that has a link demand and inheritance demand /// TreatAsSafe: Ok to call constructor /// [SecurityCritical] internal SafeReversePInvokeWrapper() : base(true) { } ////// Use this constructor if the handle exists at construction time. /// SafeMILHandle owns the release of the parameter. /// ////// Calls into native code to wrap a reverse p-invoke delegate into a CReversePInvokeDelegateWrapper. /// [SecurityCritical] internal SafeReversePInvokeWrapper(IntPtr delegatePtr) : base(true) { // Wrap the reverse p-invoke into a reversePInvokeWrapper. IntPtr reversePInvokeWrapper; HRESULT.Check(UnsafeNativeMethods.MilCoreApi.MilCreateReversePInvokeWrapper(delegatePtr, out reversePInvokeWrapper)); SetHandle(reversePInvokeWrapper); } ////// Critical - calls unmanaged code, not treat as safe because you must /// validate that handle is a valid COM object. /// [SecurityCritical] protected override bool ReleaseHandle() { if (handle != IntPtr.Zero) { UnsafeNativeMethods.MilCoreApi.MilReleasePInvokePtrBlocking(handle); } UnsafeNativeMethods.MILUnknown.ReleaseInterface(ref handle); return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MenuCommand.cs
- SemanticResolver.cs
- RequestContextBase.cs
- PermissionRequestEvidence.cs
- ApplicationServiceManager.cs
- TypeForwardedFromAttribute.cs
- ClientBuildManagerCallback.cs
- KeyFrames.cs
- BindingCompleteEventArgs.cs
- GridViewCellAutomationPeer.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- ApplicationSecurityInfo.cs
- PropertyInformationCollection.cs
- BounceEase.cs
- FtpWebResponse.cs
- SafeFileMappingHandle.cs
- milrender.cs
- MediaPlayerState.cs
- InkCanvasAutomationPeer.cs
- DesigntimeLicenseContextSerializer.cs
- arclist.cs
- TraceLog.cs
- DeferredElementTreeState.cs
- dataobject.cs
- VisualStates.cs
- DeferrableContentConverter.cs
- DataException.cs
- UriParserTemplates.cs
- Decimal.cs
- FormViewInsertedEventArgs.cs
- RbTree.cs
- OdbcFactory.cs
- ControlSerializer.cs
- HatchBrush.cs
- TemplateControlParser.cs
- HotSpot.cs
- PermissionRequestEvidence.cs
- XmlText.cs
- DragEventArgs.cs
- RayHitTestParameters.cs
- ISessionStateStore.cs
- Roles.cs
- ServiceMetadataBehavior.cs
- EntitySqlQueryBuilder.cs
- SqlDependencyListener.cs
- SqlComparer.cs
- HitTestDrawingContextWalker.cs
- DataGridRow.cs
- WSMessageEncoding.cs
- PageThemeParser.cs
- LayoutEditorPart.cs
- RequestCache.cs
- SqlTopReducer.cs
- Control.cs
- DbMetaDataFactory.cs
- DataException.cs
- InstanceOwnerException.cs
- Vector3D.cs
- ProxyOperationRuntime.cs
- CapabilitiesPattern.cs
- FullTextLine.cs
- precedingsibling.cs
- ScriptReferenceBase.cs
- PeerCollaborationPermission.cs
- ArgumentDesigner.xaml.cs
- COM2FontConverter.cs
- KeyGestureValueSerializer.cs
- WsdlBuildProvider.cs
- DependencyPropertyConverter.cs
- System.Data_BID.cs
- NonVisualControlAttribute.cs
- TrustLevel.cs
- ContractNamespaceAttribute.cs
- UserPreferenceChangedEventArgs.cs
- FixedSOMSemanticBox.cs
- Win32.cs
- MatrixConverter.cs
- AlternationConverter.cs
- QualificationDataItem.cs
- OleDbPermission.cs
- SslStreamSecurityUpgradeProvider.cs
- WaitingCursor.cs
- DBProviderConfigurationHandler.cs
- DataGridBeginningEditEventArgs.cs
- SingleAnimationBase.cs
- Polyline.cs
- AddInPipelineAttributes.cs
- HostedHttpRequestAsyncResult.cs
- KoreanLunisolarCalendar.cs
- ToolboxItemLoader.cs
- MimeFormImporter.cs
- InvalidPropValue.cs
- ObjectListGeneralPage.cs
- AspProxy.cs
- WizardPanelChangingEventArgs.cs
- ScriptMethodAttribute.cs
- DataGridViewDataErrorEventArgs.cs
- DecoderFallbackWithFailureFlag.cs
- RemotingAttributes.cs
- SessionStateContainer.cs