デスクトップへのスレッド接続

プロセスがウィンドウ ステーションに接続すると、システムは接続を行うスレッドにデスクトップを割り当てます。 システムは、次の規則に従って、スレッドに割り当てるデスクトップを決定します。

  1. スレッドが SetThreadDesktop 関数を呼び出した場合は、指定したデスクトップに接続します。
  2. スレッドが SetThreadDesktop を呼び出さなかった場合は、親プロセスから継承されたデスクトップに接続します。
  3. スレッドが SetThreadDesktop を 呼び出しておらず、デスクトップを継承していない場合、システムはMAXIMUM_ALLOWEDアクセスを開き、次のようにデスクトップに接続しようとします。
    • プロセスの作成時に使用された STARTUPINFO 構造体の lpDesktop メンバーにデスクトップ名が指定された場合、スレッドは指定されたデスクトップに接続します。
    • それ以外の場合、スレッドは、プロセスが接続されているウィンドウ ステーションの既定のデスクトップに接続します。

この接続プロセス中に割り当てられたデスクトップは、 CloseDesktop 関数を呼び出して閉じることはできません。

プロセスがデスクトップに接続している場合、システムはプロセスのハンドル テーブルで継承されたハンドルを検索します。 システムは、見つけた最初のデスクトップ ハンドルを使用します。 子プロセスを特定の継承されたデスクトップに接続する場合は、必要なハンドルのみが継承可能としてマークされていることを確認する必要があります。 子プロセスが複数のデスクトップ ハンドルを継承する場合、デスクトップ接続の結果は未定義です。

プロセスをデスクトップに接続するときにシステムが開くデスクトップへのハンドルは継承できません。

ウィンドウ ステーションへの接続を処理する