SafeHandle
通常のIntPtr
ハンドルの代わりにクラスを使用するように Win32 p/invoke コードを変換中です。
メソッド シグネチャではすべてがうまく機能しますDllImport
が、Win32 構造体 (つまり ) をマーシャリングするときにそれらを機能させることはできませんPROCESS_INFORMATION
。
// This works without issue.
[StructLayout(LayoutKind.Sequential)]
internal struct Win32ProcessInformation
{
public IntPtr ProcessHandle { get; set; }
public IntPtr ThreadHandle { get; set; }
public int ProcessId { get; set; }
public int ThreadId { get; set; }
}
// This does not work!
[StructLayout(LayoutKind.Sequential)]
internal struct Win32ProcessInformation
{
public ProcessSafeHandle ProcessHandle { get; set; }
public ThreadSafeHandle ThreadHandle { get; set; }
public int ProcessId { get; set; }
public int ThreadId { get; set; }
}
ProcessSafeHandle
とクラスはまたはのThreadSafeHandle
ようなメソッドで問題なく動作しますが、上記のような Win32 構造体では使用できません。ReadProcessMemory
WriteProcessMemory
ある種の注釈マジックが欠けていますか?