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
- Track.cs
- DataColumnMapping.cs
- WorkflowTransactionOptions.cs
- HostingEnvironment.cs
- OleAutBinder.cs
- LinkedResourceCollection.cs
- AdRotator.cs
- ValidationResult.cs
- CacheOutputQuery.cs
- XPathSingletonIterator.cs
- TableSectionStyle.cs
- FontStretchConverter.cs
- StringFormat.cs
- LocalIdKeyIdentifierClause.cs
- Translator.cs
- Char.cs
- DataGridViewControlCollection.cs
- BindingWorker.cs
- WebBaseEventKeyComparer.cs
- CoTaskMemSafeHandle.cs
- DataGridViewLayoutData.cs
- HttpListener.cs
- ErrorStyle.cs
- SqlBuilder.cs
- ObjectKeyFrameCollection.cs
- NativeActivityMetadata.cs
- TaskDesigner.cs
- PageThemeParser.cs
- ContainerParagraph.cs
- SByteConverter.cs
- GiveFeedbackEventArgs.cs
- PackageDigitalSignature.cs
- counter.cs
- InteropTrackingRecord.cs
- SessionStateContainer.cs
- JsonFormatGeneratorStatics.cs
- SqlMetaData.cs
- Camera.cs
- HitTestWithGeometryDrawingContextWalker.cs
- ModelVisual3D.cs
- FieldAccessException.cs
- HttpProfileBase.cs
- CodeRegionDirective.cs
- KnownTypes.cs
- X509IssuerSerialKeyIdentifierClause.cs
- PageAdapter.cs
- ScriptDescriptor.cs
- TransformationRules.cs
- DocumentPropertiesDialog.cs
- shaperfactoryquerycacheentry.cs
- RSAPKCS1SignatureFormatter.cs
- ClientSettingsSection.cs
- SafeArrayTypeMismatchException.cs
- Paragraph.cs
- QueryGeneratorBase.cs
- DescendantQuery.cs
- Site.cs
- MailSettingsSection.cs
- RewritingSimplifier.cs
- ApplicationProxyInternal.cs
- WpfKnownTypeInvoker.cs
- _SSPIWrapper.cs
- CancelAsyncOperationRequest.cs
- WorkflowElementDialogWindow.xaml.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- TcpAppDomainProtocolHandler.cs
- odbcmetadatafactory.cs
- BitmapEffectCollection.cs
- UInt64Storage.cs
- ArgIterator.cs
- XmlSchemaAny.cs
- WindowsGraphicsWrapper.cs
- InfoCardUIAgent.cs
- XmlDocumentSchema.cs
- AuthenticationSection.cs
- BitmapCacheBrush.cs
- SQLSingle.cs
- TextTreeRootTextBlock.cs
- EventHandlerService.cs
- SiteMapPath.cs
- CustomAttribute.cs
- WMICapabilities.cs
- Queue.cs
- RsaKeyIdentifierClause.cs
- XamlReaderConstants.cs
- Decimal.cs
- ResourceBinder.cs
- ImpersonateTokenRef.cs
- DetailsViewPagerRow.cs
- DependencyObject.cs
- PropertyFilterAttribute.cs
- ItemsPanelTemplate.cs
- IOException.cs
- WindowsIdentity.cs
- StrokeNodeOperations.cs
- CachedRequestParams.cs
- BaseTemplateBuildProvider.cs
- Transform.cs
- RoutedEvent.cs
- GridViewDeletedEventArgs.cs