love! LOVEHINA - love2hina.net
メニュー



アーカイブ
2007/12/01 真面目にトリビア?

作成者: カテゴリー: 未分類

たまには真面目な話題を書いてみようかと思います。

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