Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- DefaultValueTypeConverter.cs
- GridPattern.cs
- InlineCollection.cs
- IpcPort.cs
- PlanCompilerUtil.cs
- ResourceSet.cs
- CallId.cs
- WebBrowserContainer.cs
- IDReferencePropertyAttribute.cs
- ManipulationVelocities.cs
- FloatUtil.cs
- XmlNamespaceMapping.cs
- ScriptingRoleServiceSection.cs
- WorkingDirectoryEditor.cs
- Model3D.cs
- AssemblyNameProxy.cs
- WebPartConnectVerb.cs
- CompositeActivityTypeDescriptorProvider.cs
- LinkUtilities.cs
- StrokeNodeData.cs
- ArgumentsParser.cs
- EntityContainerEmitter.cs
- SpecialNameAttribute.cs
- CodeSnippetCompileUnit.cs
- GradientBrush.cs
- coordinator.cs
- CreateUserErrorEventArgs.cs
- CompiledRegexRunner.cs
- ConfigXmlWhitespace.cs
- DynamicHyperLink.cs
- Type.cs
- DataBinder.cs
- DSASignatureFormatter.cs
- GeometryDrawing.cs
- ArgumentNullException.cs
- XmlValidatingReaderImpl.cs
- ProfessionalColors.cs
- ZoneButton.cs
- DataSourceXmlTextReader.cs
- ContextDataSourceContextData.cs
- InheritablePropertyChangeInfo.cs
- ColorMatrix.cs
- TextReader.cs
- DataGridDesigner.cs
- CopyAttributesAction.cs
- CodeSnippetCompileUnit.cs
- objectquery_tresulttype.cs
- SystemResources.cs
- QuotedPrintableStream.cs
- TextElement.cs
- GridView.cs
- HyperLinkDataBindingHandler.cs
- FixedSOMGroup.cs
- ParameterBuilder.cs
- DSASignatureDeformatter.cs
- AutomationPeer.cs
- TreeNode.cs
- WinCategoryAttribute.cs
- ServiceReference.cs
- RequestFactory.cs
- RoutedEventValueSerializer.cs
- CustomExpression.cs
- TdsEnums.cs
- EventLogPermissionAttribute.cs
- FilterException.cs
- TargetParameterCountException.cs
- AttachInfo.cs
- _ScatterGatherBuffers.cs
- ToolStripLocationCancelEventArgs.cs
- BufferedStream.cs
- ValuePattern.cs
- Misc.cs
- DataServiceRequest.cs
- SafeMILHandle.cs
- PartialCachingAttribute.cs
- BevelBitmapEffect.cs
- PointConverter.cs
- ViewGenerator.cs
- BidOverLoads.cs
- SortableBindingList.cs
- XmlStreamNodeWriter.cs
- CornerRadius.cs
- CookielessHelper.cs
- SrgsElementList.cs
- DbConnectionStringCommon.cs
- WebPartTransformer.cs
- DataGridViewCellMouseEventArgs.cs
- Msec.cs
- RegexCapture.cs
- JsonSerializer.cs
- UnsafeNativeMethods.cs
- Brushes.cs
- ListGeneralPage.cs
- DBSchemaTable.cs
- WebControlsSection.cs
- TableStyle.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- DataServiceRequest.cs
- WpfSharedXamlSchemaContext.cs
- ScrollPattern.cs