RtlNormalizeSecurityDescriptor 関数 (ntddk.h)

このルーチンでは、2 つの同等のセキュリティ記述子をできるだけ頻繁に$SDSで 1 つインスタンス化できるようにする必要があり、格納されているセキュリティ記述子をできるだけ小さくするという 2 番目の目標を使用して、そのレイアウトを変更する方法についてセキュリティ記述子を調べます。

構文

NTSYSAPI BOOLEAN RtlNormalizeSecurityDescriptor(
  PSECURITY_DESCRIPTOR *SecurityDescriptor,
  ULONG                SecurityDescriptorLength,
  PSECURITY_DESCRIPTOR *NewSecurityDescriptor,
  PULONG               NewSecurityDescriptorLength,
  BOOLEAN              CheckOnly
);

パラメーター

SecurityDescriptor

正規化するSECURITY_DESCRIPTORへのポインターへのポインター。 セキュリティ記述子は自己相対形式である必要があります。 NewSecurityDescriptor が指定されていない場合、変更が行われた場合、この場所はページ プールから新しく割り当てられたセキュリティ記述子で更新される可能性があります (元のセキュリティ記述子を解放します)。

SecurityDescriptorLength

正規化するセキュリティ記述子の長さ (バイト単位)。

NewSecurityDescriptor

が存在し、NULL を指している場合は、 SecurityDescriptor を更新するのではなく、変更が行われた場合に、ページプールから新しく割り当てられたセキュリティ記述子へのポインターを受け取ります。

存在し、NULL 以外を指している場合、変更されたセキュリティ記述子は、代わりに、呼び出し元によって提供されるバッファー内に直接構築されます (少なくとも長さ SecurityDescriptorLength であると見なされます)。

NewSecurityDescriptorLength

必要に応じて、このルーチンが変更を行う場合に、変更されたセキュリティ記述子の長さをバイト単位で受け取ります。

CheckOnly

TRUE の場合は、変更を行うときにルーチンがアクションを実行しない必要があることを指定するブール値。 この場合、変更されたセキュリティ記述子は作成されません。

戻り値

変更が行われた場合、または行われた場合は TRUE、それ以外の場合は FALSE (失敗を含む) を返します。

注釈

このルーチンが何らかの変更を行った場合、呼び出し元が CheckOnly を指定して、変更が行われるかどうかを知りたいだけであることを示さない限り、変更されたセキュリティ記述子を返します。

現在サポートされている変換は次のとおりです。

  • Sacl = Dacl = Owner> =>> Group の順にセクションを配置します。

  • セクション間の不要なパディング (単純な配置を超える) を排除します。

  • セクション間の配置バイトをゼロにします。

  • ACE を含まない Sacl を削除します。

  • Sacl と Dacl で重複する ALLOW ACE を排除します。

要件

要件
サポートされている最小のクライアント Windows 10 バージョン 2004
Header ntddk.h (Ntddk.h を含む)
IRQL APC_LEVEL