我試圖找出一種方法讓我的VirtualAlloc的pinvoke簽名返回一個PageAlignedBuffer。我遇到的問題是我不能有一個默認構造函數,因爲VirtualFree方法需要知道緩衝區大小,所以我必須在構造函數中提供它。出於這個原因,我採取了下面的方法,並從構造函數中調用VirtualAlloc。如何爲VirtualAlloc製作PInvoke SafeHandle
有沒有人看到一種解決方法,所以我可以從pinvoke調用返回一個PageAlignedBuffer?如果不是這是一個好的解決方案,你是否看到它有任何安全或內存泄漏問題?謝謝。
[SecurityCritical]
public sealed class PageAlignedBuffer : SafeBuffer
{
private readonly UIntPtr _bufferSize = UIntPtr.Zero;
public PageAlignedBuffer(long bufferSize) : base(true)
{
_bufferSize = checked ((UIntPtr) bufferSize);
this.handle = WinAPI.VirtualAlloc(IntPtr.Zero, _bufferSize, AllocationType.RESERVE | AllocationType.COMMIT, MemoryProtection.READWRITE);
}
[SecurityCritical]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
protected override bool ReleaseHandle()
{
return WinAPI.VirtualFree(this.handle, _bufferSize, FreeType.Release);
}
}