たまには真面目な話題を書いてみようかと思います。
WindowsのAPIにGetCurrentProcessという関数があります。
日本語のMSDNはこちら。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdllpro/html/_win32_getcurrentprocess.asp
さて、英語版の方を覗いてみると、一歩踏み込んで面白いことが書いてあります。
http://msdn2.microsoft.com/en-us/library/ms683179.aspx
解説(Remarks)冒頭部分を意訳するとこんな感じでしょうか。
解説:
擬似ハンドルは現在のプロセスを示す特別な定数値です。
現在では-1が常に返されますが、将来のWindowsの為に(仕様変更する可能性もあるため)
-1をそのままコードに書き込むべきではなく、この GetCurrentProcess 関数を呼び出すのが最善の方法です。
あれ? -1の値のハンドルって…
#define INVALID_HANDLE_VALUE (HANDLE)-1
…不正なハンドルを示す値と同じなのですね…
なので、念には念をと思っても、こんなことはしちゃいけない訳ですねw
HANDLE hndCurProcess = ::GetCurrentProcess();
if (hndCurProcess == INVALID_HANDLE_VALUE) {
// エラー処理;
}
あと、ハンドルを閉じようとしても駄目ですw
HANDLE hndCurProcess = ::GetCurrentProcess();
BOOL result = ::CloseHandle(hndCurProcess);
普通にエラーが返ってきちゃいますw
大概日本語版のMSDNは古いことが多いので、本家の英語版も確認しましょうというお話なのでした。
トリビアでも何でもねぇな、コレw