非常に単純な質問ですが、私がapp1.exeにHANDLE
を作成し、値が0x01
の場合、その値はグローバルに一意ですか?winapiはグローバルに対応していますか?
また、他のプロセスがHANDLE
という値を持っていて、値が0x01
である可能性があります。
ユニークでない場合は、ハンドルと互換性のある一意のIDを取得するために他の構文を使用できます(このIDを持つHANDLE
は他の場所に作成されない可能性が高いかほとんどありません)。
非常に単純な質問ですが、私がapp1.exeにHANDLE
を作成し、値が0x01
の場合、その値はグローバルに一意ですか?winapiはグローバルに対応していますか?
また、他のプロセスがHANDLE
という値を持っていて、値が0x01
である可能性があります。
ユニークでない場合は、ハンドルと互換性のある一意のIDを取得するために他の構文を使用できます(このIDを持つHANDLE
は他の場所に作成されない可能性が高いかほとんどありません)。
重要なことは、ハンドルはオブジェクトではないということです。ハンドルは、オブジェクト・テーブルごとにポインタ(またはインデックス)です。あなたの質問に答えるために、ハンドルは世界的にユニークではありませんが、特定のプロセス内でのみ意味を持つように範囲が定められています。
カーネルオブジェクトが他のプロセスからアクセスできるようにするには、DuplicateHandleが必要です。
プロセス間でオブジェクトを共有する別の方法はCreateProcess真にセット bInheritHandles とを呼び出すことです。
inherithandlesは別のプロセスを作成するために1つのプロセスを必要とします。 – n00b
DuplicateHandleを使用して、プロセス間でハンドルを渡します。
これらは一意ではありません。 HANDLE
の値は現在のプロセスに対してローカルです。同じ値は、無効なハンドルまたは別のプロセス内の別のオブジェクトを参照する可能性があります。このルールの例外は、親プロセスから継承されたハンドルです。
集中レジストリなしで一意のIDを持つ唯一の方法は、GUID
を使用することです。しかし、ハンドルには対応していません。ハンドルは128ビットで、ハンドルは32ビットまたは64ビットです。
http://www.windows-api.com/microsoft/Win32-Kernel/31543684/wrappinghooking-api-how-to-handle-closehandle.aspx関連する読書;) – n00b
あなたは2つの質問を1つにしました。私は「ハンドル」がユニークかどうかについて答えましたが、他のものへの答えはあなたが何のために一意のIDが必要かによって決まります。 – hamstergene
スプーフィング用CreateFileWフックを使って他のプロセス(他のものも)のReadFile。 – n00b