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