絶対セキュリティ記述子とSelf-Relativeセキュリティ記述子
セキュリティ記述子は、絶対形式または自己相対形式にすることができます。 絶対形式では、セキュリティ記述子には、情報自体ではなく、その情報へのポインターが含まれます。 自己相対形式では、セキュリティ記述子は 、SECURITY_DESCRIPTOR 構造と関連するセキュリティ情報を連続したメモリ ブロックに格納します。 セキュリティ記述子が自己相対か絶対かを判断するには、GetSecurityDescriptorControl 関数を呼び出し、SECURITY_DESCRIPTOR_CONTROL パラメーターのSE_SELF_RELATIVE フラグをチェックします。 MakeSelfRelativeSD 関数と MakeAbsoluteSD 関数を使用して、これら 2 つの形式間で変換できます。
絶対形式は、セキュリティ記述子を構築していて、すべてのコンポーネントへのポインターがある場合に便利です。たとえば、所有者、グループ、随意 ACL の既定の設定が使用可能な場合などです。 この場合は、 InitializeSecurityDescriptor 関数を呼び出して SECURITY_DESCRIPTOR 構造体を初期化し、 SetSecurityDescriptorDacl などの関数を呼び出して、ACL と SID ポインターをセキュリティ記述子に割り当てることができます。
自己相対形式では、セキュリティ記述子は常に SECURITY_DESCRIPTOR 構造で始まりますが、セキュリティ記述子の他のコンポーネントは任意の順序で構造に従うことができます。 セキュリティ記述子のコンポーネントは、メモリ アドレスを使用する代わりに、記述子の先頭からのオフセットによって識別されます。 この形式は、セキュリティ記述子をディスクに格納する必要がある場合、通信プロトコルによって送信される場合、またはメモリにコピーする必要がある場合に便利です。
MakeAbsoluteSD を除き、セキュリティ記述子を返す関数はすべて、自己相対形式を使用して行います。 関数に引数として渡されるセキュリティ記述子には、自己相対形式または絶対形式を指定できます。 詳細については、関数のドキュメントを参照してください。