Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- DataGridHelper.cs
- BaseParaClient.cs
- x509utils.cs
- Viewport2DVisual3D.cs
- MediaContext.cs
- SelectedCellsCollection.cs
- TimeoutTimer.cs
- TextTreeRootTextBlock.cs
- InlinedAggregationOperatorEnumerator.cs
- PeerHelpers.cs
- XmlSchemaAll.cs
- CheckStoreFileValidityRequest.cs
- Crc32.cs
- GridViewColumnHeader.cs
- RegionData.cs
- Help.cs
- DateTimeUtil.cs
- CheckBoxField.cs
- InterleavedZipPartStream.cs
- ProgressBarAutomationPeer.cs
- WebPartZoneBase.cs
- EndpointAddressElementBase.cs
- SplitContainer.cs
- ReadOnlyDataSourceView.cs
- HashHelper.cs
- DES.cs
- SamlAuthenticationClaimResource.cs
- HMACRIPEMD160.cs
- CornerRadiusConverter.cs
- ListSortDescription.cs
- RemotingAttributes.cs
- RenderContext.cs
- WebBrowserProgressChangedEventHandler.cs
- ExpandSegment.cs
- CheckedPointers.cs
- CFStream.cs
- MulticastNotSupportedException.cs
- MembershipSection.cs
- QilReference.cs
- ToolStripDropDownClosingEventArgs.cs
- TimelineGroup.cs
- LinkUtilities.cs
- WebPartTransformerCollection.cs
- WebPartVerbsEventArgs.cs
- DataServiceHostFactory.cs
- PageCatalogPart.cs
- TemplatedAdorner.cs
- DataDocumentXPathNavigator.cs
- PathNode.cs
- TextTreeObjectNode.cs
- diagnosticsswitches.cs
- BitmapEffectInput.cs
- Literal.cs
- ApplicationManager.cs
- MenuScrollingVisibilityConverter.cs
- TabletCollection.cs
- DrawingGroup.cs
- Polyline.cs
- CodePrimitiveExpression.cs
- NavigationPropertyAccessor.cs
- UrlRoutingHandler.cs
- NullRuntimeConfig.cs
- TextBoxBase.cs
- XamlStyleSerializer.cs
- SerializationHelper.cs
- PermissionRequestEvidence.cs
- PrincipalPermission.cs
- RuntimeConfigLKG.cs
- smtppermission.cs
- HitTestParameters.cs
- BindingExpressionBase.cs
- DataGridViewCellPaintingEventArgs.cs
- AsymmetricSecurityBindingElement.cs
- WSTransactionSection.cs
- TargetParameterCountException.cs
- ErrorLog.cs
- Paragraph.cs
- ToolStripOverflowButton.cs
- IssuanceLicense.cs
- DbExpressionVisitor_TResultType.cs
- EventRoute.cs
- ComponentConverter.cs
- MethodBuilderInstantiation.cs
- SuppressMergeCheckAttribute.cs
- MutexSecurity.cs
- FrameworkPropertyMetadata.cs
- Sql8ExpressionRewriter.cs
- __Filters.cs
- WebPartVerb.cs
- PowerEase.cs
- LineGeometry.cs
- IndexedWhereQueryOperator.cs
- KeyMatchBuilder.cs
- StringUtil.cs
- FileUtil.cs
- HybridCollection.cs
- ObjectListFieldsPage.cs
- HttpProfileBase.cs
- ErrorFormatterPage.cs
- DataTableNewRowEvent.cs