Initial commit
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
namespace WhiteMagic.Native;
|
||||
|
||||
/// <summary>
|
||||
/// A Win32 handle (process, thread, or snapshot) with a managed lifetime.
|
||||
/// The handle closes with <c>CloseHandle</c>, even after an exception or a thread abort.
|
||||
/// </summary>
|
||||
/// <remarks>The pattern comes from MemorySharp's SafeMemoryHandle.</remarks>
|
||||
public sealed class SafeMemoryHandle : SafeHandleZeroOrMinusOneIsInvalid
|
||||
{
|
||||
/// <summary>
|
||||
/// Makes an empty handle. The interop marshaller uses this constructor for a
|
||||
/// handle that a system call returns (for example, <see cref="NativeMethods.OpenProcess"/>).
|
||||
/// </summary>
|
||||
public SafeMemoryHandle() : base(true)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Wraps a raw handle and takes ownership of the handle.
|
||||
/// </summary>
|
||||
/// <param name="handle">The handle to own.</param>
|
||||
public SafeMemoryHandle(IntPtr handle) : base(true)
|
||||
{
|
||||
SetHandle(handle);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override bool ReleaseHandle()
|
||||
{
|
||||
return NativeMethods.CloseHandle(handle);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user