セキュリティ記述子の操作
Windows API には、セキュリティ保護可能なオブジェクトに関連付けられている セキュリティ記述子 のコンポーネントを取得および設定するための関数が用意されています。 GetSecurityInfo 関数と GetNamedSecurityInfo 関数を使用して、オブジェクトのセキュリティ記述子へのポインターを取得します。 これらの関数は、セキュリティ記述子の個々のコンポーネント (DACL、SACL、所有者 SID、プライマリ グループ SID) へのポインターを取得することもできます。 オブジェクトのセキュリティ記述子のコンポーネントを設定するには、 SetSecurityInfo 関数と SetNamedSecurityInfo 関数を使用します。
一般に、ハンドルで識別されるオブジェクトには GetSecurityInfo と SetSecurityInfo を使用し、名前で識別されるオブジェクトには SetNamedSecurityInfo と GetNamedSecurityInfo を使用する必要があります。 さまざまな種類のオブジェクトを操作するときに使用する特定の関数の詳細については、「 セキュリティ保護可能なオブジェクト」を参照してください。
Windows API には、セキュリティ記述子のコンポーネントを操作するための追加の関数が用意されています。 アクセス制御リスト (DACL または SACL) の操作については、「 ACL からの情報の取得」および「ACL の 作成または変更」を参照してください。 SID の詳細については、「 セキュリティ識別子 (SID)」を参照してください。
セキュリティ記述子で制御情報を取得するには、 GetSecurityDescriptorControl 関数を呼び出します。 ACE の自動継承に関連する制御ビットを設定するには、 SetSecurityDescriptorControl 関数を呼び出します。 他の制御ビットは、セキュリティ記述子コンポーネントを設定するさまざまな関数によって設定されます。 たとえば、 SetSecurityInfo を使用してオブジェクトの DACL を変更する場合、セキュリティ記述子に DACL があるかどうか、既定の DACL であるかどうかなどを示すために、関数は必要に応じてビットを設定またはクリアします。 もう 1 つの例は、セキュリティ記述子に含まれる リソース マネージャー (RM) 制御ビットです。 これらのビットは、リソース マネージャーの実装に従って使用され、 GetSecurityDescriptorRMControl 関数と SetSecurityDescriptorRMControl 関数を介してアクセスされます。