次の方法で共有


ユーザー オブジェクト

ユーザー インターフェイス オブジェクトは、オブジェクトごとに 1 つのハンドルのみをサポートします。 プロセスは、ユーザー オブジェクトにハンドルを継承または複製できません。 あるセッションのプロセスは、別のセッションのユーザー ハンドルを参照できません。

セッションあたり 65,536 個のユーザー ハンドルの理論上の制限があります。 ただし、使用可能なメモリの影響を受けるので、セッションごとに開くことができるユーザー ハンドルの最大数は通常は少なくなります。 また、ユーザー ハンドルの既定のプロセスごとの制限もあります。 この制限を変更するには、次のレジストリ値を設定します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota

この値は、200 ~ 18,000 の範囲の数値に設定できます。

ユーザー オブジェクトへのハンドル

ユーザー オブジェクトへのハンドルは、すべてのプロセスに対して公開されます。 つまり、プロセスがオブジェクトに対するセキュリティ アクセス権を持っている場合、どのプロセスでもユーザー オブジェクト ハンドルを使用できます。

次の図では、アプリケーションによってウィンドウ オブジェクトが作成されます。 CreateWindow 関数は、ウィンドウ オブジェクトを作成し、オブジェクト ハンドルを返します。

ウィンドウ オブジェクト

ウィンドウ オブジェクトが作成されると、アプリケーションはウィンドウ ハンドルを使用してウィンドウを表示または変更できます。 ハンドルは、ウィンドウ オブジェクトが破棄されるまで有効なままです。

次の図では、アプリケーションによってウィンドウ オブジェクトが破棄されます。 DestroyWindow 関数は、ウィンドウ オブジェクトをメモリから削除します。これにより、ウィンドウ ハンドルが無効になります。

ウィンドウ オブジェクト

ユーザー オブジェクトの管理

次の表に、ユーザー オブジェクトと、各オブジェクトの作成者関数と駆逐関数の一覧を示します。 Creator 関数は、オブジェクトとオブジェクト ハンドルを作成するか、単に既存のオブジェクト ハンドルを返します。 駆逐関数はメモリからオブジェクトを削除し、オブジェクト ハンドルを無効にします。

ユーザー オブジェクト Creator 関数 デストロイヤー関数
アクセラレータ テーブル CreateAcceleratorTable DestroyAcceleratorTable
キャレット CreateCaret DestroyCaret
カーソル CreateCursorLoadCursorLoadImage DestroyCursor
DDE 会話 ddeConnectDdeConnectList DdeDisconnectDdeDisconnectList
SetWindowsHookEx UnhookWindowsHookEx
アイコン CreateIconIndirectLoadIconLoadImage DestroyIcon
メニュー CreateMenu、CreatePopupMenuLoadMenuLoadMenuIndirect DestroyMenu
CreateWindow、CreateWindowEx、createDialogParamCreateDialogIndirectParamCreateMDIWindow DestroyWindow
ウィンドウの位置 BeginDeferWindowPos EndDeferWindowPos