CriticalHandleZeroOrMinusOneIsInvalid Class
Assembly: mscorlib (in mscorlib.dll)
'Declaration Public MustInherit Class CriticalHandleZeroOrMinusOneIsInvalid Inherits CriticalHandle 'Usage Dim instance As CriticalHandleZeroOrMinusOneIsInvalid
public abstract class CriticalHandleZeroOrMinusOneIsInvalid extends CriticalHandle
public abstract class CriticalHandleZeroOrMinusOneIsInvalid extends CriticalHandle
This class derives from the System.Runtime.InteropServices.CriticalHandle class. It describes the format of an invalid handle. For example, some handles use -1 as an invalid handle value, while others use 0. Further derivations of this class (for example, file or registry handles) can specialize this further.
Use the CriticalHandleZeroOrMinusOneIsInvalid class when you need to wrap an unmanaged resource that does not have an existing managed wrapper.
Note |
|---|
| See the CriticalHandle class for important information on critical handle security and thread safety. |
The following code example demonstrates how to create a class that derives from the CriticalHandleZeroOrMinusOneIsInvalid class. This example creates a class that wraps a pointer to unmanaged memory.
Imports System Imports System.Security.Permissions Imports System.Runtime.InteropServices Imports Microsoft.Win32.SafeHandles Class Example Public Shared Sub Main() Dim ptr As IntPtr = Marshal.AllocHGlobal(10) Console.WriteLine("Ten bytes of unmanaged memory allocated.") Dim memHabdle As New CriticalUnmanagedMemoryHandle(ptr) If memHabdle.IsInvalid Then Console.WriteLine("CriticalUnmanagedMemoryHandle is invalid!.") Else Console.WriteLine("CriticalUnmanagedMemoryHandle class initialized to unmanaged memory.") End If Console.ReadLine() End Sub End Class ' Demand unmanaged code permission to use this class. <SecurityPermission(SecurityAction.Demand, UnmanagedCode:=True)> _ NotInheritable Class CriticalUnmanagedMemoryHandle Inherits CriticalHandleZeroOrMinusOneIsInvalid ' Set the handle. Friend Sub New(ByVal preexistingHandle As IntPtr) SetHandle(preexistingHandle) End Sub ' Perform any specific actions to release the ' handle in the ReleaseHandle method. ' Often, you need to use Pinvoke to make ' a call into the Win32 API to release the ' handle. In this case, however, we can use ' the Marshal class to release the unmanaged ' memory. Protected Overrides Function ReleaseHandle() As Boolean ' "handle" is the internal ' value for the IntPtr handle. ' If the handle was set, ' free it. Return success. If handle <> IntPtr.Zero Then ' Free the handle. Marshal.FreeHGlobal(handle) ' Set the handle to zero. handle = IntPtr.Zero ' Return success. Return True End If ' Return false. Return False End Function End Class
System.Runtime.ConstrainedExecution.CriticalFinalizerObject
System.Runtime.InteropServices.CriticalHandle
Microsoft.Win32.SafeHandles.CriticalHandleZeroOrMinusOneIsInvalid
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.
Note