ISecurityInformation2
COM公式ドキュメント
アクセス制御エディターが、ISecurityInformation インターフェイスでは提供されない情報をクライアントから取得できるようにします。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IsDaclCanonical メソッドは、指定した DACL 構造体に含まれる ACE が、クライアントが実装する DACL の並び順の定義に従って並んでいるかどうかを判定します。
| pDacl | ACL* | in | 任意 (discretionary) の ACL 構造体 ( InitializeAcl によって初期化されたもの) へのポインター。 |
戻り値
指定した DACL 構造体に含まれる ACE が、クライアントが実装する DACL の並び順の定義に従って並んでいる場合は TRUE を返します。
ACE が正しく並んでいない場合は FALSE を返します。
解説(Remarks)
このメソッドの戻り値が FALSE の場合、アクセス制御エディターは、DACL の並び順が正しくない旨を示すメッセージ ボックスを表示します。このメソッドが提供されておらず、かつエディターがこの情報を必要とする場合、エディターは Order of ACEs in a DACL で定義された正規の並び順を確認します。
LookupSids メソッドは、指定した SID のリストの各要素に対応する共通名 (common name) を返します。
| cSids | DWORD | in | rgpSids が指す SID 構造体へのポインターの数。 |
| rgpSids | PSID* | in | SID 構造体へのポインターの配列へのポインター。 |
| ppdo | IDataObject** | out | SID の共通名を格納した、返されるデータ転送オブジェクトへのポインターへのポインター。省略可能ですが、このパラメーターは rgpSids パラメーターに含まれる SID のユーザー プリンシパル名 (UPN) も返します。データ転送オブジェクトは SID_INFO 構造体です。 |
戻り値
成功した場合は S_OK を返します。
エラーが発生した場合は 0 以外のエラー コードを返します。
解説(Remarks)
アクセス制御エディターに、指定した SID に対応する共通名を判定させる場合、LookupSids の実装は E_NOTIMPL を返すことができます。ただし、アクセス制御エディターが S_OK 以外の戻り値を受け取った場合は、エディターがこの情報を判定します。
クライアントは、次の形式を使用してデータ オブジェクトを通じて共通名を返す必要があります。
#include <windows.h>
// HGLOBAL containing SID_INFO_LIST returned by
// ISecurityInformation2::LookupSids
#define CFSTR_ACLUI_SID_INFO_LIST TEXT("CFSTR_ACLUI_SID_INFO_LIST")
// Data structures corresponding to CFSTR_ACLUI_SID_INFO_LIST
typedef struct _SID_INFO
{
PSID pSid;
PWSTR pwzCommonName;
PWSTR pwzClass; // Used for selecting icon, for example,
// "User" or "Group"
PWSTR pwzUPN; // Optional pointer to a user principal
// name
} SID_INFO, *PSID_INFO;
typedef struct _SID_INFO_LIST
{
ULONG cItems;
SID_INFO aSidInfo[ANYSIZE_ARRAY];
} SID_INFO_LIST, *PSID_INFO_LIST;
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISecurityInformation2 "{C3CCFDB4-6F88-11D2-A3CE-00C04FB1782A}" #usecom global ISecurityInformation2 IID_ISecurityInformation2 "{}" #comfunc global ISecurityInformation2_IsDaclCanonical 3 var #comfunc global ISecurityInformation2_LookupSids 4 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISecurityInformation2 "{C3CCFDB4-6F88-11D2-A3CE-00C04FB1782A}" #usecom global ISecurityInformation2 IID_ISecurityInformation2 "{}" #comfunc global ISecurityInformation2_IsDaclCanonical 3 sptr #comfunc global ISecurityInformation2_LookupSids 4 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。