Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Window Stations 與 Desktop 物件深度解析:Windows NT 會話隔離核心架構

編輯:XP 系統應用技巧

Window Station(視窗站)與 Desktop(桌面)是 Windows NT 服務架構中最獨特且鮮為人知的物件。本文系統說明其層級關係、可見性、安全性、進程關聯與程式設計介面,釐清互動式登入、螢幕保護、Winlogon 切換背後的核心機制。

核心概念

  • Window Station:包含剪貼簿、全域原子表、多個 Desktop。分「可見/互動式」(WinSta0,接收鍵盤滑鼠、連接顯示裝置)與「不可見/非互動式」(服務進程所屬)。
  • Desktop:邏輯顯示表面,包含視窗、選單等。僅屬於可見 Window Station 的 Desktop 才能被看見與接收輸入,稱為「作用中桌面」。

三種互動式桌面切換

  1. Winlogon 桌面:按 Ctrl+Alt+Del 顯示的安全性對話框。
  2. 預設桌面:Explorer 與使用者啟動的所有進程所在,即應用程式桌面。
  3. 螢幕保護桌面:顯示螢幕保護程式畫面。

切換時其他桌面並未銷毀,仍在背景運行(如切換至 Winlogon 取消後回預設桌面,原程序狀態保持)。

進程與 Window Station/Desktop 關聯

  • 使用者首次登入時,互動式 Window Station (WinSta0) 與預設桌面關聯至 Shell 進程,後續由 Shell 啟動的子進程繼承相同關聯。
  • 可透過 STARTUPINFO.lpDesktop 指定進程關聯的「WindowStation\Desktop」(如 WinSta0\Default),傳遞給 CreateProcess/CreateProcessAsUser。
  • 若 lpDesktop = NULL,繼承呼叫進程的關聯;若指定空字串,系統建立新的不可見 Window Station 與 Desktop,授予呼叫者完整存取權。

安全性模型

Window Station 與 Desktop 為可安全保護物件,進程必須具備對應的 DACL 存取權(如 WINSTA_ACCESSCLIPBOARD、DESKTOP_READOBJECTS 等),否則啟動失敗報錯 User32.dll initialization failure 或 Kernel32.dll initialization failure,退出碼 128。

結構定義(節錄)

typedef struct _STARTUPINFO {
  DWORD cb;
  LPTSTR lpReserved;
  LPTSTR lpDesktop;  // 格式:"WinSta0\Default"
  LPTSTR lpTitle;
  // ... 座標、大小、顯示旗標、標準控制代碼等
} STARTUPINFO;

深入理解此架構,有助於開發安全的服務程式、設計會話隔離方案與排查互動式服務失敗問題。

Copyright © Windows教程網 All Rights Reserved