SetNamedSecurityInfoA 関数 (aclapi.h)

SetNamedSecurityInfo 関数は、指定したオブジェクトのセキュリティ記述子に指定されたセキュリティ情報を設定します。 呼び出し元はオブジェクトを名前で識別します。

構文

DWORD SetNamedSecurityInfoA(
  [in]           LPSTR                pObjectName,
  [in]           SE_OBJECT_TYPE       ObjectType,
  [in]           SECURITY_INFORMATION SecurityInfo,
  [in, optional] PSID                 psidOwner,
  [in, optional] PSID                 psidGroup,
  [in, optional] PACL                 pDacl,
  [in, optional] PACL                 pSacl
);

パラメーター

[in] pObjectName

セキュリティ情報を設定するオブジェクトの名前を指定する null で終わる文字列へのポインター。 NTFS ファイル システム、ネットワーク共有、レジストリ キー、セマフォ、イベント、ミューテックス、ファイル マッピング、または待機可能タイマー上のローカルまたはリモート のファイルまたはディレクトリの名前を指定できます。

さまざまなオブジェクトの種類の文字列形式の説明については、「 SE_OBJECT_TYPE」を参照してください。

[in] ObjectType

pObjectName パラメーターによって指定されたオブジェクトの型を示す、SE_OBJECT_TYPE列挙体の値。

[in] SecurityInfo

設定するセキュリティ情報の種類を示すビット フラグのセット。 このパラメーターには、 SECURITY_INFORMATION ビット フラグの組み合わせを指定できます。

[in, optional] psidOwner

オブジェクトの所有者を識別する SID 構造体へのポインター。 呼び出し元に SeRestorePrivilege 定数がない場合 ( 「特権定数」を参照)、この SID は呼び出し元のトークンに含まれている必要があり、 SE_GROUP_OWNER アクセス許可が有効になっている必要があります。 SecurityInfo パラメーターには、OWNER_SECURITY_INFORMATION フラグを含める必要があります。 所有者を設定するには、呼び出し元がオブジェクトへのWRITE_OWNERアクセス権を持っているか、SE_TAKE_OWNERSHIP_NAME特権を有効にする必要があります。 所有者 SID を設定していない場合、このパラメーターは NULL にすることができます。

[in, optional] psidGroup

オブジェクトのプライマリ グループを識別する SID へのポインター。 SecurityInfo パラメーターには、GROUP_SECURITY_INFORMATION フラグを含める必要があります。 プライマリ グループ SID を設定していない場合、このパラメーターは NULL にすることができます。

[in, optional] pDacl

オブジェクトの新しい DACL へのポインター。 SecurityInfo パラメーターには、DACL_SECURITY_INFORMATION フラグを含める必要があります。 呼び出し元は、オブジェクトへのWRITE_DACアクセス権を持っているか、オブジェクトの所有者である必要があります。 DACL を設定していない場合、このパラメーターは NULL にすることができます。

[in, optional] pSacl

オブジェクトの新しい 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 にすることができます。

戻り値

関数が成功した場合、関数はERROR_SUCCESSを返します。

関数が失敗した場合、WinError.h で定義されている 0 以外のエラー コードが返されます。

注釈

オブジェクトの随意アクセス制御リスト (DACL) またはシステム アクセス制御リスト (SACL) 内の要素を設定している場合、継承の規則に従って、継承可能なアクセス制御エントリ (ACE) が既存の子オブジェクトに自動的に伝達されます

SetNamedSecurityInfo 関数は、次の種類のオブジェクトと共に使用できます。

  • NTFS 上のローカル ファイルまたはリモート ファイルまたはディレクトリ
  • ローカル プリンターまたはリモート プリンター
  • ローカルまたはリモートの Windows サービス
  • ネットワーク共有
  • レジストリ キー
  • セマフォ、イベント、ミューテックス、および待機可能タイマー
  • ファイル マッピング オブジェクト
  • ディレクトリ サービス オブジェクト
SetNamedSecurityInfo 関数は、優先順序に基づいて、アクセス許可またはアクセス拒否 ACE の順序を変更しません。 継承可能な ACE を既存の子オブジェクトに伝達する場合、 SetNamedSecurityInfo は継承された ACE を子オブジェクトの DACL 内のすべての非継承 ACE の後に順番に配置します。

この関数は プレーンテキストで情報を転送します。 この関数によって転送される情報は、システムに対して署名がオフになっていない限り署名されますが、暗号化は実行されません。

UNC パスで示されるフォルダーのアクセス権 (\Test\TestFolder など) を更新すると、元の継承された ACE が削除され、ボリュームの完全パスは含まれません。

この関数を使用する例については、「オブジェクトの ACL の変更」または「オブジェクトの所有権の取得」を参照してください。

注意

aclapi.h ヘッダーは、SetNamedSecurityInfo をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー aclapi.h
Library Advapi32.lib
[DLL] Advapi32.dll

こちらもご覧ください

ACL

アクセス制御

基本的なAccess Control関数

GetNamedSecurityInfo

GetSecurityInfo

SECURITY_DESCRIPTOR

SECURITY_INFORMATION

SE_OBJECT_TYPE

SID

SetSecurityInfo