2

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 構造体では使用できません。ReadProcessMemoryWriteProcessMemory

ある種の注釈マジックが欠けていますか?

4

1 に答える 1