ユーザー オブジェクト
ユーザー インターフェイス オブジェクトは、オブジェクトごとに 1 つのハンドルのみをサポートします。 プロセスは、ユーザー オブジェクトにハンドルを継承または複製できません。 あるセッションのプロセスは、別のセッションのユーザー ハンドルを参照できません。
セッションあたり 65,536 個のユーザー ハンドルの理論上の制限があります。 ただし、使用可能なメモリの影響を受けるので、セッションごとに開くことができるユーザー ハンドルの最大数は通常は少なくなります。 また、ユーザー ハンドルの既定のプロセスごとの制限もあります。 この制限を変更するには、次のレジストリ値を設定します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\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の |