スレッド ハンドルと識別子

CreateThread 関数または CreateRemoteThread 関数によって新しいスレッドが作成されると、スレッドへのハンドルが返されます。 既定では、このハンドルにはフル アクセス権があり、セキュリティ アクセス チェックの対象として、スレッド ハンドルを受け入れる任意の関数で使用できます。 このハンドルは、作成時に指定された継承フラグに応じて、子プロセスによって継承できます。 ハンドルは DuplicateHandle によって複製できます。これにより、アクセス権のサブセットを持つスレッド ハンドルを作成できます。 ハンドルは、それが表すスレッドが終了した後でも、閉じるまで有効です。

CreateThread 関数と CreateRemoteThread 関数は、システム全体でスレッドを一意に識別する識別子も返します。 スレッドは GetCurrentThreadId 関数を使用して、独自のスレッド識別子を取得できます。 識別子は、スレッドが作成されてからスレッドが終了するまで有効です。 スレッド識別子は 0 になることがないことに注意してください。

スレッド識別子がある場合は、 OpenThread 関数を呼び出すことでスレッド ハンドルを取得できます。 OpenThread を使用すると、ハンドルのアクセス権と、ハンドルを継承できるかどうかを指定できます。

スレッドは GetCurrentThread 関数を使用して、独自のスレッド オブジェクトへの 擬似ハンドル を取得できます。 この擬似ハンドルは、呼び出し元のプロセスに対してのみ有効です。他のプロセスで使用するために継承または複製することはできません。 擬似ハンドルが指定されたスレッドに対する実際のハンドルを取得するには、 DuplicateHandle 関数を使用します。

プロセスのスレッドを列挙するには、 Thread32First 関数と Thread32Next 関数を使用します。