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
- ImageFormat.cs
- MatchAttribute.cs
- QuaternionValueSerializer.cs
- PersistenceTypeAttribute.cs
- WindowsImpersonationContext.cs
- NavigationService.cs
- DrawingVisualDrawingContext.cs
- CodeDelegateInvokeExpression.cs
- RIPEMD160.cs
- FileInfo.cs
- GeneralTransform2DTo3DTo2D.cs
- dataobject.cs
- PieceDirectory.cs
- SqlDataSourceFilteringEventArgs.cs
- FileUtil.cs
- LogicalExpr.cs
- AssemblyBuilder.cs
- DataServiceConfiguration.cs
- WebPartVerbCollection.cs
- sortedlist.cs
- TextWriter.cs
- ResourcesBuildProvider.cs
- TextReturnReader.cs
- HelpEvent.cs
- AppearanceEditorPart.cs
- PrePostDescendentsWalker.cs
- ImageFormat.cs
- DecoderExceptionFallback.cs
- SinglePageViewer.cs
- SpoolingTaskBase.cs
- HttpClientCertificate.cs
- TimeStampChecker.cs
- XmlDataSourceDesigner.cs
- DbProviderFactoriesConfigurationHandler.cs
- SapiInterop.cs
- UnsafeNativeMethods.cs
- ColorAnimation.cs
- EnumConverter.cs
- PersonalizationProvider.cs
- ExtendedProperty.cs
- DataSourceControl.cs
- ListBase.cs
- TemplatedWizardStep.cs
- AbandonedMutexException.cs
- HtmlInputImage.cs
- PenContext.cs
- AddressingProperty.cs
- PingOptions.cs
- SecurityTokenValidationException.cs
- CommonRemoteMemoryBlock.cs
- ConnectionStringSettingsCollection.cs
- WindowsListViewItemCheckBox.cs
- BaseProcessor.cs
- SrgsElementList.cs
- XhtmlBasicPageAdapter.cs
- BooleanStorage.cs
- OrderedDictionaryStateHelper.cs
- DataSourceXmlSerializer.cs
- DbProviderFactoriesConfigurationHandler.cs
- DataGridRowAutomationPeer.cs
- XmlQuerySequence.cs
- GuidelineSet.cs
- CompressedStack.cs
- TextTreeTextNode.cs
- OutKeywords.cs
- ParseElementCollection.cs
- ParameterBinding.cs
- RegexWriter.cs
- TemplateField.cs
- EntityContainer.cs
- DesignerDataSourceView.cs
- CodeExpressionCollection.cs
- RelationshipManager.cs
- Figure.cs
- QueuePathDialog.cs
- SqlClientWrapperSmiStream.cs
- ISAPIWorkerRequest.cs
- ICollection.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- WindowPatternIdentifiers.cs
- PriorityChain.cs
- Scanner.cs
- ReceiveActivityDesigner.cs
- SpotLight.cs
- WebBrowser.cs
- SqlColumnizer.cs
- SmiEventSink_DeferedProcessing.cs
- ConfigPathUtility.cs
- DiscoveryReferences.cs
- DebugView.cs
- GroupByExpressionRewriter.cs
- CryptoStream.cs
- DocumentPageHost.cs
- WebPartEditorApplyVerb.cs
- DataGridViewElement.cs
- MatrixAnimationUsingPath.cs
- StringAttributeCollection.cs
- HtmlProps.cs
- CommandPlan.cs
- MLangCodePageEncoding.cs