次の方法で共有


ウィンドウ ステーションへのプロセス接続

プロセスは、最初に USER32 または GDI32 関数 (ウィンドウ ステーションとデスクトップ関数以外) を呼び出すときに、ウィンドウ ステーションとデスクトップへの接続を自動的に確立します。 システムは、プロセスが接続するウィンドウ・ステーションを、以下の規則に従って決定します。

  1. プロセスが SetProcessWindowStation 関数を呼び出した場合、その呼び出しで指定されたウィンドウ ステーションに接続します。
  2. プロセスが SetProcessWindowStation呼び出さなかった場合は、親プロセスから継承されたウィンドウ ステーションに接続します。
  3. プロセスが SetProcessWindowStation呼び出せず、ウィンドウ ステーションを継承しなかった場合、システムはMAXIMUM_ALLOWEDアクセスのために開き、次のようにウィンドウ ステーションに接続しようとします。
    • プロセスの作成時に使用された STARTUPINFO 構造体の lpDesktop メンバーにウィンドウ ステーション名が指定されている場合、プロセスは指定されたウィンドウ ステーションに接続します。
    • それ以外の場合、プロセスが対話型ユーザーのログオン セッションで実行されている場合、プロセスは対話型ウィンドウ ステーションに接続します。
    • プロセスが非対話式ログオン・セッションで実行されている場合、ウィンドウ・ステーション名はログオン・セッション ID に基づいて形成され、そのウィンドウ・ステーションを開こうとします。 このウィンドウ ステーションが存在しないために開いている操作が失敗した場合、システムはウィンドウ ステーションと既定のデスクトップを作成しようとします。

この接続プロセス中に割り当てられたウィンドウ ステーションは、CloseWindowStation 関数を呼び出して閉じることはできません。

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

プロセスをウィンドウ ステーションに接続しているときにシステムが開くウィンドウ ステーションへのハンドルは継承できません。

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