VirtualAlloc の pinvoke 署名で PageAlignedBuffer を返す方法を見つけようとしています。私が抱えている問題は、VirtualFree メソッドがバッファー サイズを知る必要があるため、コンストラクターで提供する必要があるため、既定のコンストラクターを使用できないことです。このため、以下のアプローチを採用し、コンストラクター内から VirtualAlloc を呼び出すだけです。
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);
}
}