ユーザー オブジェクト
ユーザー インターフェイス オブジェクトは、オブジェクトごとに 1 つのハンドルのみをサポートします。 プロセスは、ユーザー オブジェクトにハンドルを継承または複製できません。 あるセッションのプロセスは、別のセッションのユーザー ハンドルを参照できません。
セッションあたり 65,536 個のユーザー ハンドルの理論上の制限があります。 ただし、使用可能なメモリの影響を受けるので、セッションごとに開くことができるユーザー ハンドルの最大数は通常は少なくなっています。 また、ユーザー ハンドルの既定のプロセスごとの制限もあります。 この制限を変更するには、次のレジストリ値を設定します。
Hkey_local_machine\ソフトウェア\マイクロソフト\\ Windows NT CurrentVersion\Windows\USERProcessHandleQuota
この値は、200 から 18,000 までの数値に設定できます。
ユーザー オブジェクトへのハンドル
ユーザー オブジェクトへのハンドルは、すべてのプロセスに公開されます。 つまり、プロセスがオブジェクトに対するセキュリティ アクセス権を持っている場合、どのプロセスでもユーザー オブジェクト ハンドルを使用できます。
次の図では、アプリケーションによってウィンドウ オブジェクトが作成されます。 CreateWindow 関数は、ウィンドウ オブジェクトを作成し、オブジェクト ハンドルを返します。
ウィンドウ オブジェクトが作成されると、アプリケーションはウィンドウ ハンドルを使用してウィンドウを表示または変更できます。 ハンドルは、ウィンドウ オブジェクトが破棄されるまで有効なままです。
次の図では、アプリケーションによってウィンドウ オブジェクトが破棄されます。 DestroyWindow 関数は、ウィンドウ オブジェクトをメモリから削除し、ウィンドウ ハンドルを無効にします。
ユーザー オブジェクトの管理
次の表に、ユーザー オブジェクトと、各オブジェクトの作成者関数と破壊機能を示します。 Creator 関数は、オブジェクトとオブジェクト ハンドルを作成するか、単に既存のオブジェクト ハンドルを返します。 デストロイヤー関数はオブジェクトをメモリから削除し、オブジェクト ハンドルを無効にします。
ユーザー オブジェクト | Creator 関数 | デストロイヤー関数 |
---|---|---|
アクセラレータ テーブル | CreateAcceleratorTable | DestroyAcceleratorTable |
キャレット | CreateCaret | DestroyCaret |
カーソル | CreateCursor、 LoadCursor、 LoadImage | DestroyCursor |
DDE 会話 | DdeConnect、 DdeConnectList | DdeDisconnect、 DdeDisconnectList |
フック | SetWindowsHookEx | UnhookWindowsHookEx |
アイコン | CreateIconIndirect、 LoadIcon、 LoadImage | DestroyIcon |
メニュー | CreateMenu、 CreatePopupMenu、 LoadMenu、 LoadMenuIndirect | DestroyMenu |
ウィンドウ | CreateWindow、 CreateWindowEx、 CreateDialogParam、 CreateDialogIndirectParam、 CreateMDIWindow | DestroyWindow |
ウィンドウの位置 | BeginDeferWindowPos | EndDeferWindowPos |