文章編號: 169321 - 上次校閱: 2005年7月11日 - 版次: 2.5 資訊: COM 伺服器啟動和 Windows NT 電台
在此頁中結論當用戶端要求的已註冊類別的類別物件時,COM 傳回現有的類別物件,或啟動登錄為包含要求的類別物件的處理序。取得類別物件參考提出要求的用戶端 (會導致處理序建立或 「 啟動 」) 的處理程序就稱為 [啟動]。 在某些情況下 COM 可能啟動新的伺服器處理序,即使當現有的類別物件正在執行,而且已經登錄為多個使用。 此外,COM 建立新的處理程序時該處理程序可能會啟動在新的安全性環境著名的視窗工作站而不是共用如互動式視窗工作站的現有視窗工作站。(如需有關視窗工作站的詳細資訊,搜尋 Win32 SDK 文件,該的片語)。 瞭解 COM 的演算法,於啟動要求期間建立新的處理序和視窗工作站是重要幾個原因。 首先,COM 可能會因為的安全性問題建立多個使用類別物件的一個以上的處理程序執行個體。第二個,"單使用 「 伺服器將永遠啟動個別處理序中但它們可能或可能不在個別的視窗工作站中啟動。這項差異可能資訊清單本身中某些罕見的情況下例如兩個 COM 伺服器嘗試透過視窗訊息] 或 [安全通訊機能,例如 COM 或 RPC 通訊的應用程式程式碼。第三,因為同時可在 Windows NT 中建立的視窗工作站的數目是有限的務必知道當您的 COM 伺服器取得新的視窗工作站。 本文將探討不同啟動案例,並說明建立新的處理序和視窗工作站的時。 其他相關資訊當 COM 會建立新的伺服器處理序,或將新的視窗工作站指派給新的伺服器處理序取決於幾個因素:
多重使用類別使用多個類別是使用指定 REGCLS_MULTIPLEUSE 旗標 (透過 CoRegisterClassObject() API) COM 註冊的類別。這種類別的 COM 通常為所有的用戶端啟動要求使用相同的伺服器處理序執行個體。不過,設定成在安全性執行啟動的使用者,並在 [其他少數的情況下執行的類別為 COM 啟動伺服器處理序服務的啟動要求的新執行個體。當因此啟動伺服器處理序的新執行個體時有可能伺服器處理序會取得新視窗工作站也。我們將探討各種的案例下面的,但首先我們會討論簡要為什麼 COM 啟動類別物件的執行個體已經註冊為 「 多重使用 「 類別時,包含要求的類別物件的新處理程序。第一個 COM 類別時 (更準確時的 AppID 聯 COM 類別) 係以 「 啟動使用者 」 身分執行系統,系統管理員已設定至該類別特定安全性原則。原則是一個啟動項應該會收到相同的安全性內容,以啟動的程式碼正在執行的處理序內的類別物件。 此安全性原則可以進入伺服器定義的表現方式,讓所有啟動要求 (如 REGCLS_MULTIPLEUSE 所指示) 的只有一個類別工廠物件的衝突。COM 透過應用程式行為優先順序的安全性原則。如此一來註冊為 「 啟動使用者 」 身分執行的多個使用伺服器不將根據多重使用的一般規則來行為。針對每個啟動的安全性主體,就會啟動新的處理程序。 第二個,如果不由不同於給定的 CLSID 所指定的安全性內容中執行的 COM 啟動處理程序會登錄該 CLSID,該登錄將會 fail(CoRegisterClassObject will return an error code CO_E_WRONG_SERVER_IDENTITY in this case)。如果啟動要求稍後到達新的處理程序將會由啟動 COM 與所指定的 CLSID/AppID 的安全性內容。COM 不能信任程式碼呼叫 CoRegisterClassObject() (不安全作業),它只可以信任 (登錄是安全的資料庫) 的登錄設定來決定哪一個類別物件使用以及如何執行它。這種行為可以避免非法全機器詐騙的未經授權的使用者類別物件。 知道這一點之後,我們現在回到問題的當新的處理序和視窗工作站時,會建立多重使用伺服器啟動的 COM。 請注意用戶端 LUID 不以任何方式在多重使用類別的情況下重要。
使用類別注意: 使用單一類別應該避免使用盡可能。單一使用註冊是舊版的設定,並旨在支援較舊的 COM 應用程式,並簡化移植舊版非 COM 應用程式至 COM。 強烈建議新的類別設計來支援多重使用類別的物件登錄。本使用者 」 身分的伺服器的情況下特別是使用單一類別造成完全相反的效果 multi-use 類別。它們建立新的伺服器處理程序和每次啟動新的視窗工作站,而且當我們討論以下,這可能導致 Windows NT] 下的資源問題。使用單一類別是使用指定 REGCLS_SINGLEUSE 旗標 (透過 CoRegisterClassObject() API) COM 註冊。這種類別的 COM 會永遠啟動新的例項類別的伺服器處理程序為每個啟動要求的來自任何用戶端 (本機或遠端)。為了本文的其餘的問題是: 伺服器何時會得到新視窗工作站也?
分析藍本進行摘要的資料表---------------------------------------------------------------------------
| Multiple-Use Server
| (class factory has requested reuse)
| Activation Modes
|-------------------------------------------------------------------
| Interactive | As "This |As "Launching | Win32
Client | User | User" | user" | service
Local | Process launched | Process | Process | Service
| in the | launched in a | launched client | started on
| interactive window| new window | window station | first
| station on first | station on | on first | activation
| activation | first | request, | request
| request, | activation | subsequent | (new winsta
| subsequent | request, | requests from | or system/
| requests get | subsequent | the same SID/ | interactive
| existing class | requests get | window station | winsta
| object, | existing class | get existing | depending
| activations fail | object | class object, no| on service
| if no user logged | | sharing of class| config),
| on locally | | objects across | subsequent
| | | window stations | requests
| | | even if same SID| get
-------| | |-----------------| existing
Remote | | | Process launched| class
| | | in new winsta on| objects
| | | first activation|
| | | request by a |
| | | SID, subsequent |
| | | remote requests |
| | | by the same SID |
| | | get existing |
| | | class object; |
| | | class launched |
| | | by local user |
| | | reused by remote|
| | | callers with |
| | | same SID |
---------------------------------------------------------------------------
| Single-Use Server
| (new process created for each activation request)
| Activation Modes
|-------------------------------------------------------------------
| Interactive | As "This |As "Launching | Win32
Client | User | User" | user" | service
Local | Process always | Process always | Process always | N/A(only
| launched in the | launched in a | launched in | one
| interactive | new window | the window | activation
| window station, | station | station of | possible)
| if no interactive | | client process |
| window station | | |
| activation fails | | |
-------| | |-----------------|
Remote | | | if both SID and |
| | | LUID of the |
| | | client match |
| | | previous client |
| | | activation, |
| | | process launched|
| | | in existing |
| | | window station, |
| | | otherwise in new|
| | | windowstation |
視窗工作站與 Windows NT 資源本章節中我們將檢視建立新的視窗電台,在 [Windows NT 和如何,應該會影響 COM 伺服器的設定的含意。您會發現沒有可以建立在 Windows NT 的電腦的視窗工作站的數目限制。當超過限制時 Windows NT 將會失敗嘗試由 COM 啟動伺服器處理序的新執行個體。通常,會出現一則錯誤訊息如下所示:動態連結程式庫的初始化 d:\winnt\system32\kernel32.dll 失敗。處理程序 異常終止。 警告: 不當使用 「 登錄編輯器 」 可能會導致嚴重的全系統的問題,可能必須重新安裝 Windows NT 以更正。 Microsoft 無法保證任何因使用登錄編輯程式所造成的問題可以獲得解決。使用此工具,請自行負擔相關的風險。 您需要編輯的具名的值將會顯示下列機碼下: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems 注意: A 視窗工作站可以包含內的多個桌面。在上述,地方提到視窗工作站本機用戶端程序的啟動使用者 」 伺服器的討論,它應該被視為為較短的表單 」 視窗工作站與桌面 」。"啟動使用者 」 設定真正適用於舊版非-DCOM 注意伺服器,應該很少使用。 這種傳統伺服器預期在他們自己的桌上型電腦中執行。因此,針對 MULTIPLEUSE 啟動使用者 」 伺服器,不同的桌面內相同的視窗工作站中的每個用戶端處理程序會造成新的伺服器處理序,以啟動該視窗站/桌面中的處理序。SINGLEUSE 啟動使用者 」 的伺服器,再次,伺服器繼承視窗站/的桌面用戶端處理序。 在 Windows NT 4.0 服務套件 4.0 COM 會嘗試重複使用視窗電台。之前要這,如果伺服器設定為 RunAs,特定的使用者,而且會啟動伺服器處理序的多個執行個體,每個處理程序會取得自己的視窗工作站。這會導致限制描述上面的視窗工作站。在 SP4,COM 會嘗試建立設定為下,相同的使用者識別身份 (或語彙基元) 執行相同的視窗工作站中的所有 RunAs (也就是不"啟動為啟動項 」 或 「 啟動的使用者 」) 伺服器。 這不需要調整桌面堆集大小在這些情況下,多個伺服器處理程序執行有相同的語彙基元的位置。然後如果您的設定中的所有伺服器都設定為 RunAs,同一個使用者或多個同一個執行的 RunAs 伺服器處理序的執行個體,您應該不減少服務台頂端 heapsize 依建議 」 文件中。建議您保持它在預設值 (3 M) 在這種情況下。這是因為,如果您降低桌面堆積,然後系統可以建立多個視窗電台/桌上型電腦 ; 不過,可以在視窗工作站/桌面中執行的處理序數目會變得漸進的較小。 另一方面,在您的組態中如果您有多個伺服器執行不同的語彙基元然後您將面對視窗工作站限制。在這種情況下您應該遵循建議降低桌面堆集大小的文件中。 ?考
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:169321?
(http://support.microsoft.com/kb/169321/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群文章翻譯 |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方