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
- FunctionMappingTranslator.cs
- MetadataAssemblyHelper.cs
- _PooledStream.cs
- SamlDelegatingWriter.cs
- thaishape.cs
- ConfigXmlElement.cs
- SQLBoolean.cs
- ActivityExecutorSurrogate.cs
- _SafeNetHandles.cs
- ClientFormsAuthenticationMembershipProvider.cs
- MemberAssignmentAnalysis.cs
- IdnMapping.cs
- OdbcInfoMessageEvent.cs
- Perspective.cs
- JournalEntry.cs
- LeafCellTreeNode.cs
- X509ChainElement.cs
- ICspAsymmetricAlgorithm.cs
- VectorAnimationBase.cs
- DockPattern.cs
- StringArrayConverter.cs
- PageSetupDialog.cs
- validationstate.cs
- WriterOutput.cs
- CurrentChangingEventManager.cs
- TableRowGroup.cs
- TimeSpan.cs
- SingleSelectRootGridEntry.cs
- ThicknessConverter.cs
- ArithmeticException.cs
- MDIClient.cs
- DataKey.cs
- MdiWindowListStrip.cs
- XmlCharCheckingReader.cs
- GradientPanel.cs
- ComboBoxRenderer.cs
- BitmapData.cs
- HighContrastHelper.cs
- FormatException.cs
- ArrayElementGridEntry.cs
- LookupBindingPropertiesAttribute.cs
- XmlSchemaDatatype.cs
- ViewManager.cs
- TraceLevelStore.cs
- XmlProcessingInstruction.cs
- GestureRecognitionResult.cs
- ServiceOperationListItem.cs
- Console.cs
- CalloutQueueItem.cs
- TemplateBuilder.cs
- TextAnchor.cs
- MinimizableAttributeTypeConverter.cs
- MSAANativeProvider.cs
- ImageCreator.cs
- ShaderEffect.cs
- DiscreteKeyFrames.cs
- ManagedIStream.cs
- DataPagerCommandEventArgs.cs
- WebServiceData.cs
- VisualStyleTypesAndProperties.cs
- ConstrainedDataObject.cs
- WindowsEditBox.cs
- DataGridViewAdvancedBorderStyle.cs
- PointLightBase.cs
- PropertyPathWorker.cs
- EntityTypeEmitter.cs
- HtmlInputFile.cs
- XPathDocument.cs
- DataGridViewCellConverter.cs
- SystemDiagnosticsSection.cs
- EventMappingSettings.cs
- HttpWebResponse.cs
- InfoCardBinaryReader.cs
- MsmqAppDomainProtocolHandler.cs
- OletxDependentTransaction.cs
- ResourceDisplayNameAttribute.cs
- ButtonField.cs
- AppDomainAttributes.cs
- ZipArchive.cs
- PointAnimationClockResource.cs
- CookielessData.cs
- RecommendedAsConfigurableAttribute.cs
- StylusShape.cs
- List.cs
- PathGradientBrush.cs
- HttpDebugHandler.cs
- BinaryQueryOperator.cs
- ReaderWriterLockWrapper.cs
- CodeAttributeArgument.cs
- LogicalExpr.cs
- GCHandleCookieTable.cs
- Binding.cs
- EnvelopeVersion.cs
- SqlRowUpdatingEvent.cs
- BasicDesignerLoader.cs
- __Filters.cs
- TreeViewItem.cs
- CompiledQueryCacheKey.cs
- PictureBox.cs
- Pkcs7Signer.cs