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
- Mapping.cs
- FontUnitConverter.cs
- JsonSerializer.cs
- EntityCommand.cs
- TextViewElement.cs
- ChangeNode.cs
- LinkUtilities.cs
- PropertyGridEditorPart.cs
- ResponseStream.cs
- SevenBitStream.cs
- Literal.cs
- XpsS0ValidatingLoader.cs
- MetadataItemSerializer.cs
- AsyncCompletedEventArgs.cs
- TextOutput.cs
- HttpResponseBase.cs
- DataPagerFieldItem.cs
- FlowDecision.cs
- GPPOINT.cs
- Signature.cs
- ToolStripGrip.cs
- ZoneIdentityPermission.cs
- RelativeSource.cs
- ButtonFieldBase.cs
- DetailsViewActionList.cs
- ResetableIterator.cs
- MLangCodePageEncoding.cs
- FileCodeGroup.cs
- _NetRes.cs
- SafeIUnknown.cs
- Menu.cs
- CodeThrowExceptionStatement.cs
- Stylesheet.cs
- AssemblyBuilder.cs
- SiteMapPath.cs
- LogExtentCollection.cs
- SoapSchemaMember.cs
- ParseHttpDate.cs
- OdbcException.cs
- ExceptionRoutedEventArgs.cs
- WindowsRebar.cs
- ConnectionsZone.cs
- ToggleButtonAutomationPeer.cs
- KnownColorTable.cs
- Point3DAnimation.cs
- MatrixAnimationBase.cs
- AsyncCallback.cs
- WsatConfiguration.cs
- BindingListCollectionView.cs
- documentsequencetextpointer.cs
- FunctionQuery.cs
- unsafenativemethodstextservices.cs
- ProfileGroupSettings.cs
- CompositeTypefaceMetrics.cs
- SessionEndingEventArgs.cs
- BackgroundWorker.cs
- DynamicValidator.cs
- PublisherMembershipCondition.cs
- SynchronousSendBindingElement.cs
- AsymmetricSignatureDeformatter.cs
- SecurityPolicyVersion.cs
- EventListenerClientSide.cs
- ParameterReplacerVisitor.cs
- XmlSerializerFactory.cs
- SQLGuidStorage.cs
- ParseHttpDate.cs
- TypeInitializationException.cs
- WebPartConnectionsCancelVerb.cs
- DataGridViewHeaderCell.cs
- Base64Encoder.cs
- UncommonField.cs
- WinFormsSpinner.cs
- LabelEditEvent.cs
- StrictModeSecurityHeaderElementInferenceEngine.cs
- StateDesignerConnector.cs
- BCLDebug.cs
- AutomationPatternInfo.cs
- XmlFormatExtensionAttribute.cs
- TextOptionsInternal.cs
- IsolatedStorageFilePermission.cs
- PrimaryKeyTypeConverter.cs
- TypeCollectionDesigner.xaml.cs
- CompressedStack.cs
- TypeToArgumentTypeConverter.cs
- CheckBox.cs
- OdbcUtils.cs
- CasesDictionary.cs
- QueryContext.cs
- GcSettings.cs
- ScrollPattern.cs
- Guid.cs
- WebControlParameterProxy.cs
- HMAC.cs
- MessageBox.cs
- RightsManagementEncryptionTransform.cs
- ListViewCommandEventArgs.cs
- ApplicationCommands.cs
- XmlDeclaration.cs
- HitTestParameters.cs
- LabelEditEvent.cs