ISecurityProperty::GetOriginalCallerSID 方法 (comsvcs.h)

擷取起始呼叫序列之基底進程的安全性標識碼,從中呼叫目前方法。

取得原始呼叫端相關信息的慣用方式是使用 ISecurityCallContext 介面。

語法

HRESULT GetOriginalCallerSID(
  [out] PSID *pSID
);

參數

[out] pSID

起始呼叫目前方法之呼叫序列之基底進程之安全性標識符的參考。

傳回值

這個方法可以傳回標準傳回值E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTEDE_FAIL以及下列值。

傳回碼 描述
S_OK
參數 pSid 中會傳回產生呼叫目前物件之基底進程的安全性標識碼。
CONTEXT_E_NOCONTEXT
目前的 對象沒有與其相關聯的內容,因為元件未匯入應用程式,或是未使用其中一個 COM+ CreateInstance 方法建立物件。

備註

您可以使用 GetOriginalCallerSID 方法來判斷起始呼叫序列之原始進程的安全性識別碼,該呼叫順序是從中呼叫目前方法,而不是來源程式 (或建立者) 進程。 雖然物件的指標可以透過一系列伺服器和用戶傳遞, 但 GetOriginalCallerSID 一律會傳回進程的第一部伺服器和使用者,即使該使用者不是物件的原始建立者也一樣。 下列案例說明 GetOriginalCallerSID 方法的功能。

此圖顯示執行兩個基底進程之四部伺服器之間傳遞之對象參考的 GetOriginalCallerSID 方法結果。

  1. 以使用者 A 身分在伺服器 A 上執行的基底進程 1,會在伺服器 B 上建立物件 X,以使用者 B 身分執行。
  2. 基底進程 1 會將其物件 X 上的參考傳遞至基底進程 2,以使用者 D 身分在伺服器 D 上執行。
  3. 基底進程 2 會使用該參考來呼叫物件 X。
  4. 物件 X 會呼叫物件 Y,並在伺服器 C 上執行。如果物件 Y 接著呼叫 GetOriginalCallerSID,則會傳回使用者 D 的安全性識別碼,而不是最初建立對象的使用者 A。
注意 通常,物件的原始呼叫端與原始建立者的程式相同。 原始呼叫者和原始建立者的唯一情況是原始建立者將參考傳遞給另一個進程,而另一個進程會起始呼叫順序 (,如上述範例) 所示。
 
如果鏈結上有任何物件是由 IObjectContext::CreateInstance 或ITransactionContext::CreateInstance 以外的某些方法所建立,則原始呼叫端的路徑會中斷。 例如,如果Base Process 1使用 CoCreateInstance 來建立物件 X,當 Object Y 呼叫 GetOriginalCallerSID 時,它會傳回的安全性標識符是使用者 B 的安全性識別符,而不是使用者 D。這是因為呼叫順序會透過對象的內容追蹤回,而 COM+ 只能針對使用 IObjectContext::CreateInstanceITransactionContext::CreateInstance 所建立的物件建立內容。

當您完成使用時,必須在安全性標識符上呼叫 ReleaseSID

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 comsvcs.h

另請參閱

ISecurityProperty