共用方式為


TreeSetNamedSecurityInfoW 函式 (aclapi.h)

TreeSetNamedSecurityInfo 函式會在指定之物件的 安全性描述元 中設定指定的安全性資訊。 此函式可讓指定 任意存取控制清單 (DACL) 或任何 系統存取控制清單 (SACL) 中的任何元素在整個樹狀結構中傳播。 此函式支援回呼函式來追蹤樹狀結構作業的進度。

語法

DWORD TreeSetNamedSecurityInfoW(
  [in]           LPWSTR               pObjectName,
  [in]           SE_OBJECT_TYPE       ObjectType,
  [in]           SECURITY_INFORMATION SecurityInfo,
  [in, optional] PSID                 pOwner,
  [in, optional] PSID                 pGroup,
  [in, optional] PACL                 pDacl,
  [in, optional] PACL                 pSacl,
  [in]           DWORD                dwAction,
  [in]           FN_PROGRESS          fnProgress,
  [in]           PROG_INVOKE_SETTING  ProgressInvokeSetting,
  [in, optional] PVOID                Args
);

參數

[in] pObjectName

null 的指標終止字串,指定要接收更新安全性資訊之物件的根節點物件名稱。 支援的對象是登錄機碼和檔案物件。 如需不同物件類型之字串格式的描述,請參閱 SE_OBJECT_TYPE

[in] ObjectType

SE_OBJECT_TYPE 列舉值,指出由 pObjectName 參數 所命名的物件類型。 針對登錄機碼和檔案對象,支援的值為SE_REGISTRY_KEY和SE_FILE_OBJECT。

[in] SecurityInfo

一組位旗標,表示要設定的安全性信息類型。 此參數可以是 SECURITY_INFORMATION 位旗標的組合。

[in, optional] pOwner

識別物件擁有者之 SID 結構的指標。 SID 必須是可指派為安全性描述元之擁有者 SID 的 SID。 SecurityInfo 參數必須包含OWNER_SECURITY_INFORMATION旗標。 若要設定擁有者,呼叫端必須具有每個物件的WRITE_OWNER存取權,包括根物件。 如果您未設定擁有者 SID,此參數可以 NULL

[in, optional] pGroup

識別物件主要群組之 SID 結構的指標。 SecurityInfo 參數必須包含GROUP_SECURITY_INFORMATION旗標。 若要設定群組,呼叫端必須具有每個物件的WRITE_OWNER存取權,包括根物件。 如果您未設定主要群組 SID,則可以 NULL

[in, optional] pDacl

訪問控制清單的指標 (ACL) 結構,代表要重設之物件的新 DACL。 SecurityInfo 參數必須包含DACL_SECURITY_INFORMATION旗標。 呼叫端必須具有每個物件的READ_CONTROL和WRITE_DAC存取權,包括根物件。 如果您未設定 DACL,則可以 NULL

[in, optional] pSacl

ACL 結構的指標,表示要重設之物件的新 SACL。 SecurityInfo 參數必須包含下列任何旗標:SACL_SECURITY_INFORMATION、LABEL_SECURITY_INFORMATION、ATTRIBUTE_SECURITY_INFORMATION、SCOPE_SECURITY_INFORMATION或BACKUP_SECURITY_INFORMATION。 如果設定SACL_SECURITY_INFORMATION或SCOPE_SECURITY_INFORMATION,呼叫端必須啟用SE_SECURITY_NAME許可權。 如果您未設定 SACL,此參數可以 NULL

[in] dwAction

指定此函式的行為。 這必須設定為下列其中一個值,定義於 AccCtrl.h 中。

價值 意義
TREE_SEC_INFO_SET
0x00000001
安全性資訊是在 pObjectName 參數所指定的物件上設定,以及該物件的子對象的樹狀結構。 如果在 pDacl pSacl 參數中指定 ACL,則安全性描述元會與 對象相關聯。 安全性描述項會根據其繼承屬性傳播至子物件的樹狀結構。
TREE_SEC_INFO_RESET
0x00000002
安全性資訊會重設 pObjectName 參數所指定的物件,以及該物件的子物件樹狀結構。 任何現有的安全性信息都會從樹狀結構上的所有物件中移除。

如果樹狀結構中的任何物件未將適當的許可權授與呼叫端以修改物件上的安全性描述元,則會略過樹狀結構之特定節點上的安全性資訊傳播,並略過其物件。 作業會繼續在 pObjectName 參數所指定的物件下,其餘樹狀結構繼續執行。

TREE_SEC_INFO_RESET_KEEP_EXPLICIT
0x00000003
安全性資訊會重設 pObjectName 參數所指定的物件,以及該物件的子物件樹狀結構。 任何現有的繼承安全性信息都會從樹狀結構上的所有物件中移除。 在樹狀結構中的對象上明確設定的安全性資訊不會變更。

如果樹狀結構中的任何物件未將適當的許可權授與呼叫端以修改物件上的安全性描述元,則會略過樹狀結構之特定節點上的安全性資訊傳播,並略過其物件。 作業會繼續在 pObjectName 參數所指定的物件下,其餘樹狀結構繼續執行。

[in] fnProgress

函式的指標,用來追蹤 TreeSetNamedSecurityInfo 函式的進度。 進度函式的原型如下:

#include <windows.h>
#include <Aclapi.h>
#pragma comment(lib, "Advapi32.lib")

typedef VOID (*FN_PROGRESS) (
  IN LPWSTR pObjectName,              // Name of object just processed
  IN DWORD Status,                    // Status of operation on object
  IN OUT PPROG_INVOKE_SETTING
                      pInvokeSetting, // When to set
  IN PVOID Args,                      // Caller specific data
  IN BOOL SecuritySet                 // Whether security was set
);

progress 函式會在處理節點時提供呼叫端進度和錯誤資訊。 呼叫者會指定 fnProgress中的進度函式,並在樹狀結構作業期間,TreeSetNamedSecurityInfo 傳遞最後一個處理物件的名稱、該作業的錯誤狀態,以及目前的PROG_INVOKE_SETTING值。 呼叫者可以使用 pInvokeSetting 來變更PROG_INVOKE_SETTING值。

如果未使用任何進度函式,請將此參數設定為 NULL

[in] ProgressInvokeSetting

指定進度函式初始設定之 PROG_INVOKE_SETTING 列舉的值。

[in, optional] Args

呼叫端所指定之 progress 函式自變數的 VOID 指標。

傳回值

如果函式成功,函式會傳回 ERROR_SUCCESS

如果函式失敗,它會傳回 WinError.h 中定義的錯誤碼。

言論

此函式不支援設定 NULL 擁有者、群組、DACL 或 SACL。

如果呼叫端未包含支援所要求擁有者、群組、DACL 和 SACL 更新的適當許可權和許可權,則不會執行任何更新。

dwAction 參數的值設定為 TREE_SEC_INFO_SET時,此函式會提供與 SetNamedSecurityInfo 函式相同的功能 ,則 ProgressInvokeSetting 參數的值會設定為 ProgressInvokePrePostError,而 fnProgress 參數所指向的函式會將其 pInvokeSetting 參數的值設定為 ProgressInvokePrePostError

此函式類似於 TreeResetNamedSecurityInfo 函式:

  • 如果 TreeSetNamedSecurityInfodwAction 參數設定為 TREE_SEC_INFO_RESET_KEEP_EXPLICIT,則函式相當於 TreeResetNamedSecurityInfo,並將 KeepExplicit 參數設定為 TRUE
  • 如果 TreeSetNamedSecurityInfodwAction 參數設定為 TREE_SEC_INFO_RESET,則函式相當於 TreeResetNamedSecurityInfoKeepExplicit 參數設定為 FALSE

注意

aclapi.h 標頭會根據 UNICODE 預處理器常數的定義,將 TreeSetNamedSecurityInfo 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 aclapi.h
連結庫 Advapi32.lib
DLL Advapi32.dll