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
- TypeDelegator.cs
- CustomErrorCollection.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- AsyncStreamReader.cs
- DataMisalignedException.cs
- ImmutableObjectAttribute.cs
- TextTreeTextNode.cs
- ArgumentOutOfRangeException.cs
- listitem.cs
- OrthographicCamera.cs
- ParameterToken.cs
- CompensableActivity.cs
- InfocardExtendedInformationEntry.cs
- UserMapPath.cs
- Substitution.cs
- TableProvider.cs
- ListViewGroupItemCollection.cs
- KeyPullup.cs
- storepermission.cs
- CursorConverter.cs
- MasterPage.cs
- RIPEMD160.cs
- SortExpressionBuilder.cs
- altserialization.cs
- DecimalAverageAggregationOperator.cs
- ScriptingSectionGroup.cs
- DataGridViewImageColumn.cs
- SelectionGlyphBase.cs
- DocumentPageTextView.cs
- IItemProperties.cs
- CSharpCodeProvider.cs
- HandleRef.cs
- DataColumnCollection.cs
- complextypematerializer.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- AuthenticateEventArgs.cs
- CodeAccessPermission.cs
- GZipStream.cs
- OverflowException.cs
- ParameterBuilder.cs
- XmlElement.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- BufferedReceiveManager.cs
- WaitingCursor.cs
- TaskFormBase.cs
- CharConverter.cs
- PriorityRange.cs
- Attribute.cs
- TextEditorSpelling.cs
- OrderablePartitioner.cs
- BaseCollection.cs
- Workspace.cs
- TabletDevice.cs
- XmlArrayAttribute.cs
- MachineSettingsSection.cs
- ContextMenu.cs
- ThousandthOfEmRealPoints.cs
- StateMachine.cs
- DefaultTypeArgumentAttribute.cs
- IPPacketInformation.cs
- UnionExpr.cs
- LookupBindingPropertiesAttribute.cs
- MessageSecurityOverHttpElement.cs
- RegularExpressionValidator.cs
- UidManager.cs
- WebPartHelpVerb.cs
- CodeDomConfigurationHandler.cs
- EventsTab.cs
- NameValueConfigurationCollection.cs
- UrlMappingCollection.cs
- Int16KeyFrameCollection.cs
- CancelAsyncOperationRequest.cs
- PostBackTrigger.cs
- CompressionTracing.cs
- Viewport2DVisual3D.cs
- FontNamesConverter.cs
- GeneralTransformCollection.cs
- DataSourceConverter.cs
- PolygonHotSpot.cs
- XmlPreloadedResolver.cs
- FormViewInsertEventArgs.cs
- WorkflowDesigner.cs
- NavigatingCancelEventArgs.cs
- XamlVector3DCollectionSerializer.cs
- CryptoHandle.cs
- FontFamily.cs
- ScrollableControlDesigner.cs
- InputMethod.cs
- AllMembershipCondition.cs
- HttpResponseHeader.cs
- DynamicQueryableWrapper.cs
- SocketPermission.cs
- SendReply.cs
- KeyPressEvent.cs
- SignatureToken.cs
- DynamicObjectAccessor.cs
- HostingEnvironmentException.cs
- EpmContentSerializer.cs
- ClientCultureInfo.cs
- TypeSource.cs