6

一方のプロセスが32ビットで、もう一方のプロセスが64ビットの場合、子プロセスが親プロセスからハンドルを継承することは可能ですか?

HANDLEはWin64では64ビットタイプ、Win32では32ビットタイプです。これは、すべての場合に可能であると想定されていたとしても、失敗する場合があることを示唆しています。64ビットの親プロセス、32ビットの親プロセス。ビット子プロセス、および32ビットで表現できないハンドル。

または、オブジェクトに名前を付けることが、32ビットプロセスと64ビットプロセスが同じオブジェクトのハンドルを取得する唯一の方法ですか?

4

2 に答える 2

7

それがファイルハンドルまたは他のカーネルハンドルである場合は、はい。

HANDLEは64ビットタイプですが、いつでも32ビットに変換して、有効なハンドル値に戻すことができます。

GDIハンドルは継承できません。

于 2010-04-23T15:24:25.087 に答える
1

はい。ただし、32ビットハンドルから64ビットハンドルに変換する場合は、必ず値を符号拡張してください。つまり、ビット32〜63をビット31の値に設定します。したがって、は、ではなく、に0x80000000なります。また、32ビットハンドルと64ビットハンドルの間のこの互換性は、ユーザーモードハンドルでのみ保証されることに注意してください(ドライバーなど、カーネルモードで実行されるものを作成している場合を除き、これを処理する必要があります)。0xFFFFFFFF800000000x0000000080000000

参照:このSOの質問とその回答(64ビットアプリケーションのWindows HANDLE範囲とは何ですか?)

于 2013-08-22T21:03:09.170 に答える