ISecurityInformation
COM公式ドキュメント
アクセス制御エディターが CreateSecurityPage 関数および EditSecurity 関数の呼び出し元と通信できるようにします。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetObjectInformation メソッドは、アクセス制御エディターがそのページを初期化し、ユーザーが利用できる編集オプションを決定するために使用する情報を要求します。
| pObjectInfo | SI_OBJECT_INFO* | inout | SI_OBJECT_INFO 構造体へのポインター。実装では、この構造体を設定して情報をアクセス制御エディターに返す必要があります。 |
戻り値
成功した場合は S_OK を返します。
エラーが発生した場合は 0 以外のエラーコードを返します。
解説(Remarks)
システムは、 SI_OBJECT_INFO 構造体で返した文字列ポインターを解放しません。
GetSecurity メソッドは、セキュリティ記述子が編集されているセキュリティ保護可能なオブジェクトのセキュリティ記述子を要求します。アクセス制御エディターは、オブジェクトの現在のセキュリティ記述子または既定のセキュリティ記述子を取得するためにこのメソッドを呼び出します。
| RequestedInformation | OBJECT_SECURITY_INFORMATION | in | 要求されるセキュリティ記述子の部分を示す SECURITY_INFORMATION ビットフラグのセット。 このパラメーターには、次の値の組み合わせを指定できます。
| ||||||||||
| ppSecurityDescriptor | PSECURITY_DESCRIPTOR* | inout | 実装でオブジェクトのセキュリティ記述子へのポインターを設定する必要がある変数へのポインター。 セキュリティ記述子には、RequestedInformation パラメーターで要求されたコンポーネントを含める必要があります。 システムは、 LocalFree 関数を呼び出して、返されたポインターを解放します。 | ||||||||||
| fDefault | BOOL | in | このパラメーターが TRUE の場合、ppSecurityDescriptor はオブジェクトに対するアプリケーション定義の既定のセキュリティ記述子を返す必要があります。 アクセス制御エディターは、この既定のセキュリティ記述子を使用してプロパティページを再初期化します。 アクセス制御エディターは、ユーザーが Default ボタンをクリックした場合にのみ、このパラメーターを TRUE に設定します。 Default ボタンは、 ISecurityInformation::GetObjectInformation メソッドで SI_RESET フラグを設定した場合にのみ表示されます。 既定のセキュリティ記述子が利用できない場合は、SI_RESET フラグを設定しないでください。 このフラグが FALSE の場合、ppSecurityDescriptor はオブジェクトの現在のセキュリティ記述子を返す必要があります。 |
戻り値
成功した場合は S_OK を返します。
エラーが発生した場合は 0 以外のエラーコードを返します。要求されたセキュリティ情報を読み取るアクセス許可がユーザーにない場合は E_ACCESSDENIED を返します。
SetSecurity メソッドは、ユーザーがセキュリティ保護可能なオブジェクトに適用しようとしているセキュリティ情報を含むセキュリティ記述子を提供します。アクセス制御エディターは、ユーザーが [OK] または [適用] をクリックしたときにこのメソッドを呼び出します。
| SecurityInformation | OBJECT_SECURITY_INFORMATION | in | 設定するセキュリティ記述子の部分を示す SECURITY_INFORMATION ビットフラグのセット。 このパラメーターには、次の値の組み合わせを指定できます。
| ||||||||||
| pSecurityDescriptor | PSECURITY_DESCRIPTOR | in | 新しいセキュリティ情報を含むセキュリティ記述子へのポインター。セキュリティ記述子が 自己相対形式であると想定しないでください。 絶対形式または自己相対形式のいずれかになります。 |
戻り値
成功した場合は S_OK を返します。
エラーが発生した場合は 0 以外のエラーコードを返します。
解説(Remarks)
オブジェクトの完全なセキュリティ記述子を構築するために、アプリケーションは、SecurityInformation パラメーターで定義された新しいセキュリティ記述子の部分を、オブジェクトの既存のセキュリティ記述子にマージする必要があります。
GetAccessRights メソッドは、セキュリティ保護可能なオブジェクトに対して制御できるアクセス権に関する情報を要求します。
| pguidObjectType | GUID* | in | アクセス権が要求されるオブジェクトの種類を識別する GUID 構造体へのポインター。このパラメーターが NULL または GUID_NULL へのポインターの場合は、編集中のオブジェクトのアクセス権を返します。それ以外の場合、GUID は ISecurityInformation::GetInheritTypes メソッドによって返される子オブジェクトの種類を識別します。この GUID は、オブジェクト固有の ACE の InheritedObjectType メンバーに対応します。 | ||||||||
| dwFlags | SECURITY_INFO_PAGE_FLAGS | in | 初期化されるプロパティページを示すビットフラグのセット。基本的なセキュリティページが初期化される場合、この値は 0 です。それ以外の場合は、次の値の組み合わせになります。
| ||||||||
| ppAccess | SI_ACCESS** | inout | SI_ACCESS 構造体の配列へのポインター。この配列には、各アクセス権につき 1 つのエントリを含める必要があります。オブジェクト自体に適用されるアクセス権のほか、オブジェクトのプロパティセットまたはプロパティのみに適用されるオブジェクト固有のアクセス権も指定できます。 | ||||||||
| pcAccesses | DWORD* | inout | ppAccess 配列内のエントリ数を示す ULONG へのポインター。 | ||||||||
| piDefaultAccess | DWORD* | inout | 既定のアクセス権を含む配列エントリの 0 から始まるインデックスを示す ULONG へのポインター。アクセス制御エディターは、このエントリを新しい ACE の初期アクセス権として使用します。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
GetAccessRights メソッドは、プロパティページが初期化されるたびに呼び出されます。
アクセス制御エディターは、ppAccess で返されたポインターを解放しません。
MapGeneric メソッドは、アクセスマスク内の汎用アクセス権を、対応する標準アクセス権および固有アクセス権にマップするよう要求します。
| pguidObjectType | GUID* | in | アクセスマスクが適用されるオブジェクトの種類を識別する GUID 構造体へのポインター。このメンバーが NULL または GUID_NULL へのポインターの場合、アクセスマスクはオブジェクト自体に適用されます。 |
| pAceFlags | BYTE* | inout | アクセスマスクがマップされる ACE の ACE_HEADER 構造体の AceFlags メンバーへのポインター。 |
| pMask | DWORD* | inout | マップする汎用アクセス権を含むアクセスマスクへのポインター。実装では、汎用アクセス権を、指定されたオブジェクトの種類に対応する標準アクセス権および固有アクセス権にマップする必要があります。 |
戻り値
関数が成功した場合は S_OK を返します。
関数が失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
MapGeneric の実装では、 MapGenericMask 関数を呼び出して、アクセスマスク内の汎用アクセス権をマップできます。
GetInheritTypes メソッドは、ACE が子オブジェクトによってどのように継承されるかに関する情報を要求します。詳細については、「ACE Inheritance」を参照してください。
| ppInheritTypes | SI_INHERIT_TYPE** | inout | SI_INHERIT_TYPE 構造体の配列へのポインターを設定する必要がある変数へのポインター。この配列には、サポートする継承フラグと子オブジェクトの種類の組み合わせごとに 1 つのエントリを含める必要があります。 |
| pcInheritTypes | DWORD* | inout | ppInheritTypes 配列内のエントリ数を示すために設定する必要がある変数へのポインター。 |
戻り値
成功した場合は S_OK を返します。
エラーが発生した場合は 0 以外のエラーコードを返します。
解説(Remarks)
アクセス制御エディターは、ppInheritTypes で返されたポインターを解放しません。
PropertySheetPageCallback メソッドは、アクセス制御エディターのプロパティページが作成または破棄されることを EditSecurity または CreateSecurityPage の呼び出し元に通知します。
| hwnd | HWND | in | uMsg が PSPCB_SI_INITDIALOG の場合、hwnd はプロパティページのダイアログボックスへのハンドルです。それ以外の場合、hwnd は NULL です。 | ||||||||
| uMsg | PSPCB_MESSAGE | in | 受信するメッセージを識別します。このパラメーターは、次の値のいずれかです。
| ||||||||
| uPage | SI_PAGE_TYPE | in | 作成または破棄されるアクセス制御エディターのプロパティページの種類を示す SI_PAGE_TYPE 列挙型の値。 |
戻り値
成功した場合は S_OK を返します。
エラーが発生した場合は 0 以外のエラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISecurityInformation "{965FC360-16FF-11D0-91CB-00AA00BBB723}" #usecom global ISecurityInformation IID_ISecurityInformation "{}" #comfunc global ISecurityInformation_GetObjectInformation 3 var #comfunc global ISecurityInformation_GetSecurity 4 int,sptr,int #comfunc global ISecurityInformation_SetSecurity 5 int,sptr #comfunc global ISecurityInformation_GetAccessRights 6 var,int,var,var,var #comfunc global ISecurityInformation_MapGeneric 7 var,var,var #comfunc global ISecurityInformation_GetInheritTypes 8 var,var #comfunc global ISecurityInformation_PropertySheetPageCallback 9 sptr,int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISecurityInformation "{965FC360-16FF-11D0-91CB-00AA00BBB723}" #usecom global ISecurityInformation IID_ISecurityInformation "{}" #comfunc global ISecurityInformation_GetObjectInformation 3 sptr #comfunc global ISecurityInformation_GetSecurity 4 int,sptr,int #comfunc global ISecurityInformation_SetSecurity 5 int,sptr #comfunc global ISecurityInformation_GetAccessRights 6 sptr,int,sptr,sptr,sptr #comfunc global ISecurityInformation_MapGeneric 7 sptr,sptr,sptr #comfunc global ISecurityInformation_GetInheritTypes 8 sptr,sptr #comfunc global ISecurityInformation_PropertySheetPageCallback 9 sptr,int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。