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
- FixedDocumentPaginator.cs
- UnsafeNativeMethods.cs
- XmlNode.cs
- EventLog.cs
- Math.cs
- GenericTypeParameterBuilder.cs
- QueuePropertyVariants.cs
- DoubleLinkListEnumerator.cs
- Rules.cs
- SQLSingle.cs
- HtmlTable.cs
- PropertyTab.cs
- CodeLabeledStatement.cs
- XmlChildEnumerator.cs
- RoleServiceManager.cs
- TraceHandler.cs
- SqlFlattener.cs
- CompositeScriptReferenceEventArgs.cs
- CultureInfoConverter.cs
- LeaseManager.cs
- Themes.cs
- AssemblyCache.cs
- ApplyTemplatesAction.cs
- BufferedWebEventProvider.cs
- OperationCanceledException.cs
- figurelength.cs
- AsyncDataRequest.cs
- FieldMetadata.cs
- MembershipPasswordException.cs
- AbandonedMutexException.cs
- ListViewItemMouseHoverEvent.cs
- SqlNodeAnnotations.cs
- ISFClipboardData.cs
- Registry.cs
- MsmqChannelFactory.cs
- UnsafeNativeMethods.cs
- returneventsaver.cs
- AuthenticationManager.cs
- XamlReader.cs
- PropertyConverter.cs
- SafeProcessHandle.cs
- LinqDataSourceUpdateEventArgs.cs
- InstancePersistenceContext.cs
- SqlCommandBuilder.cs
- FrameworkContentElement.cs
- SQLSingleStorage.cs
- DtrList.cs
- ToolStripEditorManager.cs
- ComplexBindingPropertiesAttribute.cs
- CustomSignedXml.cs
- PolyLineSegment.cs
- ListDictionaryInternal.cs
- ManualResetEvent.cs
- PointAnimationBase.cs
- HtmlInputHidden.cs
- BindingMAnagerBase.cs
- TransformedBitmap.cs
- SafeMILHandle.cs
- ManagedIStream.cs
- UrlMappingsSection.cs
- DelayLoadType.cs
- NetMsmqSecurityMode.cs
- XmlAttributeCollection.cs
- TableStyle.cs
- Item.cs
- Expressions.cs
- MatrixUtil.cs
- SqlUserDefinedAggregateAttribute.cs
- SystemTcpStatistics.cs
- XmlDomTextWriter.cs
- DependencyPropertyChangedEventArgs.cs
- Int16Storage.cs
- URIFormatException.cs
- PermissionListSet.cs
- XsltContext.cs
- Splitter.cs
- XmlAttributeOverrides.cs
- CollectionViewProxy.cs
- CodeSnippetExpression.cs
- EndEvent.cs
- DbConnectionPoolGroup.cs
- BaseCodePageEncoding.cs
- EmptyStringExpandableObjectConverter.cs
- EditorBrowsableAttribute.cs
- DiscoveryProxy.cs
- ObjectToken.cs
- dataprotectionpermission.cs
- StringComparer.cs
- RemotingSurrogateSelector.cs
- MimeMultiPart.cs
- ProfileSettingsCollection.cs
- Style.cs
- CacheAxisQuery.cs
- VerificationException.cs
- RelationshipSet.cs
- TransformGroup.cs
- LZCodec.cs
- FileLogRecord.cs
- UserPreferenceChangingEventArgs.cs
- SystemEvents.cs