Share via


核心物件命名空間

Windows 具有下列具名核心物件的多個命名空間:事件、旗號、Mutex、可等候定時器、檔案對應對象、作業物件和符號鏈接物件。 用戶端/伺服器應用程式中的服務主要使用全域命名空間。 此外,每個會話都有這些對象的個別命名空間。

不同的會話命名空間可讓多個用戶端執行相同的應用程式,而不會互相干擾。 針對在用戶端會話下啟動的進程,系統預設會使用用戶端會話命名空間。 不過,這些進程可以使用全域命名空間,方法是在物件名稱前面加上 “Global\” 前置詞。 例如,下列程式代碼會呼叫 CreateEvent ,並在全域命名空間中建立名為 CSAPP 的事件物件:

CreateEventW( NULL, FALSE, FALSE, L"Global\\CSAPP" );

服務應用程式預設會使用全域命名空間。

注意

全域命名空間不適用於 Windows 市集應用程式。

會話零僅用於裝載服務,而且沒有控制台會話,與 Windows Vista 之前的 Windows 版本不同。

全域命名空間可讓多個用戶端會話上的進程與服務應用程式通訊。 例如,用戶端/伺服器應用程式可能會使用 Mutex 物件進行同步處理。 伺服器模組可以在全域命名空間中建立 Mutex 物件。 然後,用戶端會話可以使用 「Global\」 前置詞來開啟 Mutex 物件。

全域命名空間的另一個用法,是針對使用具名對象的應用程式,偵測所有會話中已在系統中執行的應用程式實例。 這個具名對象必須在全域命名空間中建立或開啟,而不是個別會話命名空間。 默認支援每個會話執行應用程式一次的常見案例,因為每個會話命名空間中會建立具名物件。

除了 「Global\」 前置詞之外,客戶端進程還可以使用 「Local\」 前置詞在其會話命名空間中明確建立物件。 這些關鍵詞會區分大小寫。

“Session\” 前置詞保留給系統使用,您不應該在核心對象的名稱中使用。

使用會話實作快速使用者切換。 第一個登入的使用者會使用第一個會話、下一個登入的使用者會使用會話二等等。 核心物件名稱必須遵循遠端桌面服務概述的指導方針,讓應用程式可以支援多個使用者。

從會話零以外的會話建立檔案對應物件或符號連結物件,例如使用 CreateFileMapping,就是特殊許可權作業。 因此,應用程式必須 啟用 SeCreateGlobalPrivilege ,才能在全域命名空間中建立檔案對應物件或符號連結物件。 許可權檢查僅限於建立這些物件,而且不適用於開啟現有的物件。 例如,如果服務或系統在全域命名空間中建立檔案對應物件,則任何會話中執行的任何進程都可以存取該檔案對應物件,前提是進程具有必要的存取權。