<Return[G]><Top>

GetCurrentThread

Declare Function Api_GetCurrentThread& Lib "kernel32" Alias "GetCurrentThread" ()

Declare Function GetCurrentThread Lib "kernel32" () As Long

現在のスレッドの擬似ハンドルを取得する。

パラメータ
    パラメータはなし。

戻り値
    現在のスレッドの疑似ハンドルが返る。

解説
    疑似ハンドルとは、現在のスレッドのハンドルと解釈される特別な定数のことである。

    呼び出し側スレッドがスレッドハンドルを必要とする関数を呼び出す場合、この疑似ハンドルを使って自分自身を指定できる。

    子プロセスは、擬似ハンドルを継承しない。
    擬似ハンドルには、スレッドオブジェクトに対するアクセス権として、可能な範囲で最大の権利が割り当てられる。

    セキュリティ記述子をサポートしているシステムでは、呼び出し側のセキュリティ記述子が許可している最大のアクセス権が割り当てられる。

    セキュリティ記述子をサポートしていないシステムでは、THREAD_ALL_ACCESS アクセス権が割り当てられる。
    あるスレッドがこの関数を使って、自分自身を表す擬似ハンドルを作成しても、他のスレッドは最初のスレッドを参照する目的ではその擬似

    ハンドルを利用できない。擬似ハンドルは常に、その擬似ハンドルを使っているスレッド自身と解釈される。

    擬似ハンドルをコピー元として指定して DuplicateHandle 関数を呼び出すと、スレッドは自分自身を表す(擬似ハンドルではない)

    「本物」のハンドルを取得できる。このハンドルは他のスレッドからも利用でき、子プロセスへ継承することもできる。
    擬似ハンドルは、不要になっても閉じる必要がない。擬似ハンドルに対して CloseHandle を呼び出しても何の効果もない。ただし、

    DuplicateHandle 関数を使って擬似ハンドルを複製した場合、CloseHandle 関数を使って、複製先のハンドルを閉じなければならない。