インスタンスを表わすためのハンドル。Windowsのプログラミングなどで使われる。
Windowsでは、インスタンスハンドルはHINSTANCE型で表わされる。インスタンスごとに異なる値を持っているが、プログラマは、その内容が何であるかを意識する必要はない。
しかし、その特徴を理解しておくと、OSの動きについての理解を深めることになる。実際には、インスタンスハンドルとは、モジュールのベースアドレスを指すポインタそのものである。
ポインタと言っても、それはOS内部の情報であるため、プログラマが参照することは許されていない。このため古いWindowsのコンパイラでは、これがvoid *で定義されていた。現在のコンパイラでは工夫が凝らされていて、未使用の数値を内容に持つ構造体へのポインタであり、異なるハンドル同士の代入で警告が出せるようになっている。
Windows 3.1までの16ビット環境(Win16)では、全てのプロセスが同じメモリ空間で動作した。
このため、各プロセスは互いに重なり合わないように別のアドレスにロードされ、そしてプロセスごとにインスタンスハンドルは異なっている。
Windows NTおよびWindows 95以降の32ビット環境(Win32)では、各プロセスごとに独自のメモリ空間を使用する。従って、プロセスごとにリロケート(再配置)する必要がないため、通常は実行可能ファイルに記載されたベースアドレス通りにメモリに読み込まれる。
Win32では、インスタンスハンドルはプロセス内でのモジュールを識別するためのものである。異なるプロセス間でのやり取りに使われる物ではないため、同じプロセス内で一意であれば問題ない。従って、OS全体として見れば、インスタンスハンドルの値は重複している可能性がある。
Win32で、同じ実行ファイルの別インスタンスを識別するには、プロセスハンドルを使う。但しプロセスハンドルまで必要になるのは稀であり、一般的にはウィンドウハンドルでも充分と考えられる。