queryServiceObjectSecurity 函式 (winsvc.h)
QueryServiceObjectSecurity 函式會擷取與服務對象相關聯的安全性描述元複本。 您也可以使用 GetNamedSecurityInfo 函式來擷取安全性描述元。
語法
BOOL QueryServiceObjectSecurity(
[in] SC_HANDLE hService,
[in] SECURITY_INFORMATION dwSecurityInformation,
[out, optional] PSECURITY_DESCRIPTOR lpSecurityDescriptor,
[in] DWORD cbBufSize,
[out] LPDWORD pcbBytesNeeded
);
參數
[in] hService
服務控制管理員或服務的句柄。 對服務控制管理員的句柄是由 OpenSCManager 函式傳回,而對服務的句柄則由 OpenService 或 CreateService 函式傳回。 句柄必須具有READ_CONTROL訪問許可權。
[in] dwSecurityInformation
一組位旗標,指出要擷取的安全性信息類型。 此參數可以是 SECURITY_INFORMATION 位旗標的組合,但此函式不支援 LABEL_SECURITY_INFORMATION 值。
[out, optional] lpSecurityDescriptor
緩衝區的指標,接收指定之服務物件之安全性描述元的複本。 呼叫進程必須具有適當的存取權,才能檢視 物件之安全性描述元的指定層面。 SECURITY_DESCRIPTOR 結構會以自我相對格式傳回。
[in] cbBufSize
lpSecurityDescriptor 參數所指向的緩衝區大小,以位元組為單位。 允許的大小上限為 8 KB。
[out] pcbBytesNeeded
當函式失敗時,接收傳回要求之安全性描述元資訊所需位元組數目的變數指標。
傳回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
服務控制管理員可能會設定下列錯誤碼。 服務控制管理員所呼叫的登錄函式可能會設定其他錯誤碼。
傳回碼 | Description |
---|---|
|
指定的句柄未以READ_CONTROL存取方式開啟,或呼叫進程不是對象的擁有者。 |
|
指定的句柄無效。 |
|
安全性描述項資訊對於 lpSecurityDescriptor 緩衝區而言太大。 取得所有資訊所需的位元組數目會傳回 於BytesNeeded 參數 中。 不會寫入 lpSecurityDescriptor 緩衝區。 |
|
指定的安全性信息無效。 |
備註
建立服務時,服務控制管理員會將預設的安全性描述元指派給服務物件。 若要擷取服務對象的安全性描述元複本,請呼叫 QueryServiceObjectSecurity 函式。 若要變更安全性描述元,請呼叫 SetServiceObjectSecurity 函式。 如需服務對象預設安全性描述項的描述,請參閱 服務安全性和訪問許可權。
若要從服務對象的安全性描述元讀取擁有者、群組或 DACL,呼叫程式必須在開啟句柄時授與READ_CONTROL存取權。 若要取得READ_CONTROL存取權,呼叫端必須是對象的擁有者,或物件的 DACL 必須授與存取權。
若要從安全性描述元讀取 SACL,呼叫進程必須在開啟句柄時授與ACCESS_SYSTEM_SECURITY存取權。 取得此存取權的正確方法是啟用呼叫端目前令牌中的SE_SECURITY_NAME許可權、開啟ACCESS_SYSTEM_SECURITY存取的句柄,然後停用許可權。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winsvc.h (包括 Windows.h) |
程式庫 | Advapi32.lib |
Dll | Advapi32.dll |