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
- UserPreferenceChangedEventArgs.cs
- ConfigXmlWhitespace.cs
- DataGridViewCellFormattingEventArgs.cs
- Properties.cs
- XPathParser.cs
- GridErrorDlg.cs
- DiscoveryClientBindingElement.cs
- SystemPens.cs
- CreateUserWizard.cs
- ImageMap.cs
- FixedDocumentPaginator.cs
- IdnMapping.cs
- Latin1Encoding.cs
- ColorDialog.cs
- EntityDataSourceEntitySetNameItem.cs
- HiddenFieldPageStatePersister.cs
- ScrollBar.cs
- SqlRemoveConstantOrderBy.cs
- XsdDuration.cs
- MouseWheelEventArgs.cs
- ControllableStoryboardAction.cs
- XmlILAnnotation.cs
- RpcResponse.cs
- BindingSource.cs
- SvcMapFileLoader.cs
- ViewManager.cs
- ProcessThreadCollection.cs
- ACE.cs
- TrustManagerPromptUI.cs
- GridViewRowEventArgs.cs
- DbTransaction.cs
- AllMembershipCondition.cs
- XmlSerializationReader.cs
- ByeOperationCD1AsyncResult.cs
- ServicePointManagerElement.cs
- DbModificationClause.cs
- MailBnfHelper.cs
- MenuItemBindingCollection.cs
- Accessible.cs
- PersistenceTypeAttribute.cs
- SqlInternalConnectionTds.cs
- Sql8ExpressionRewriter.cs
- CompositeDuplexBindingElementImporter.cs
- Rights.cs
- Panel.cs
- OrderedEnumerableRowCollection.cs
- WmlValidatorAdapter.cs
- Annotation.cs
- IndicCharClassifier.cs
- DesignerAutoFormatCollection.cs
- EntityFunctions.cs
- Regex.cs
- AccessibleObject.cs
- LinqDataSourceStatusEventArgs.cs
- CodeIdentifier.cs
- SpeechEvent.cs
- XmlDataDocument.cs
- IncomingWebRequestContext.cs
- DataAdapter.cs
- DataGridView.cs
- DependencyPropertyKind.cs
- WriteTimeStream.cs
- HandledMouseEvent.cs
- WebPartManagerInternals.cs
- PageHandlerFactory.cs
- RadioButtonRenderer.cs
- HandlerBase.cs
- TextElement.cs
- SendingRequestEventArgs.cs
- SQLGuid.cs
- CacheEntry.cs
- DataControlFieldCell.cs
- VectorCollectionValueSerializer.cs
- DefaultTextStore.cs
- MemberJoinTreeNode.cs
- BrowserTree.cs
- DataGridViewImageColumn.cs
- ButtonPopupAdapter.cs
- LayoutUtils.cs
- InfoCardProofToken.cs
- ComponentCollection.cs
- CodeGenHelper.cs
- SamlDoNotCacheCondition.cs
- SelectionWordBreaker.cs
- GlyphingCache.cs
- AppSecurityManager.cs
- InitializationEventAttribute.cs
- Calendar.cs
- CroppedBitmap.cs
- BackoffTimeoutHelper.cs
- ClientSession.cs
- WindowsGraphics2.cs
- srgsitem.cs
- DataControlFieldCell.cs
- SelectionListComponentEditor.cs
- TemplateColumn.cs
- WebPartMinimizeVerb.cs
- ShaderRenderModeValidation.cs
- StringAnimationBase.cs
- ServiceConfigurationTraceRecord.cs