IAzClientContext
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
特定のクライアントを表す状態を保持します。
メソッド 13
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
現在のクライアントコンテキストが、指定された操作の実行を許可されているかどうかを判定します。
| bstrObjectName | LPWSTR | in | アクセス対象のオブジェクトの名前。この文字列は監査で使用されます。 |
| varScopeNames | VARIANT | in | SAFEARRAY または JScript の Array オブジェクトを格納するバリアント。配列の各要素は、bstrObjectName パラメーターで指定したオブジェクトが一致するスコープの名前を含む VT_BSTR を保持します。配列に格納できる要素は 1 つだけです。既定のアプリケーションレベルのスコープを使用するには、配列の最初のエントリに空文字列 ("") または VT_EMPTY を設定するか、このパラメーターに VT_EMPTY を渡します。 |
| varOperations | VARIANT | in | クライアントコンテキストによるアクセスを確認する対象の操作。SAFEARRAY または JScript の Array オブジェクトを格納するバリアントです。配列の各要素は、IAzApplication ポリシー内の IAzOperation オブジェクトの OperationID プロパティを表す VT_I2 または VT_I4 を保持します。 |
| varParameterNames | VARIANT | in | AzBizRuleContext::GetParameter メソッドを通じてビジネスルール (BizRule) から利用できるパラメーターの名前。SAFEARRAY または JScript の Array オブジェクトを格納するバリアントです。配列の各要素は、パラメーター名を含む VT_BSTR を保持します。この配列は呼び出し元がアルファベット順に並べ替えておく必要があります。並べ替え順序は、大文字と小文字を区別する VarCmp による定義に従います。varParameterValues 配列の順序は、この配列の順序と一致している必要があります。既定値は VT_NULL です。 |
| varParameterValues | VARIANT | in | AzBizRuleContext::GetParameter メソッドを通じてビジネスルール (BizRule) から利用できるパラメーターの値。SAFEARRAY または JScript の Array オブジェクトを格納するバリアントです。配列の各要素は、varParameterNames 配列の要素に対応する値を保持します。既定値は VT_NULL です。配列の各エントリには、VT_UNKNOWN と VT_DISPATCH を除く任意の型を格納できます。 |
| varInterfaceNames | VARIANT | in | BizRule スクリプト内で varInterfaces 配列内のインターフェイスを参照する際に使用される名前。SAFEARRAY または JScript の Array オブジェクトを格納するバリアントです。配列の各要素は、インターフェイス名を含む文字列バリアントを保持します。このメソッドは、配列の各エントリに対して IActiveScript::AddNamedItem メソッドを呼び出します。既定値は VT_NULL です。 |
| varInterfaceFlags | VARIANT | in | IActiveScript::AddNamedItem の呼び出しに渡されるフラグ。SAFEARRAY または JScript の Array オブジェクトを格納するバリアントです。配列の各要素は VT_I4 を保持します。SCRIPTITEM_ISVISIBLE フラグは暗黙的に指定され、SCRIPTITEM_ISPERSISTENT フラグは無視されます。配列の各エントリは、varInterfaceNames 配列の対応する要素と一致している必要があります。既定値は VT_NULL です。 |
| varInterfaces | VARIANT | in | BizRule スクリプトから利用できるようにする IDispatch インターフェイス。SAFEARRAY または JScript の Array オブジェクトを格納するバリアントです。配列の各要素は IDispatch インターフェイスを保持します。配列の各エントリは、varInterfaceNames 配列の対応する要素と一致している必要があります。既定値は VT_NULL です。 |
| pvarResults | VARIANT* | out | アクセスチェックの結果を格納する SAFEARRAY を返すために使用される VARIANT へのポインター。SAFEARRAY の各要素は VT_I4 型の VARIANT です。配列の各エントリは、varOperations 配列の対応する要素に対応します。クライアントコンテキストにその操作へのアクセスが許可されている場合、pvarResults 配列の対応する要素に NO_ERROR が返されます。それ以外の値は、その操作へのアクセスが許可されていないことを示します。失敗を示す代表的な値は ERROR_ACCESS_DENIED です。 JScript では、返された SAFEARRAY を JScript の Array オブジェクトに変換する必要があります。 |
戻り値
メソッドが成功した場合、NO_ERROR を返します。
メソッドが失敗した場合は、アクセスチェックの結果ではなく、メソッドの状態を示す HRESULT 値を返します。想定される値には次の表の値が含まれますが、これらに限定されません。一般的なエラーコードの一覧については、「Common HRESULT Values」を参照してください。
| 戻り値/値 | 説明 |
|---|---|
| このエラーコードは、Active Directory の承認ストアが使用され、かつスコープの管理が委任されている場合に返されることがあります。委任されたスコープ内のタスク定義およびロール定義は BizRule を持つことができません。委任されたスコープ内のタスク定義またはロール定義に BizRule が含まれている場合 (ストアが破損していると発生し得ます)、AccessCheck メソッドは失敗します。 | |
| アクセスの評価に使用された BizRule に構文エラーが含まれています。 |
解説(Remarks)
クライアントコンテキストに RoleForAccessCheck プロパティが定義されている場合、AccessCheck メソッドはそのロールに対してのみ実行されます。
このメソッドが呼び出されると、アプリケーショングループのメンバーシップがクライアントコンテキストに追加されるため、同じクライアントコンテキストに対する以降のアクセスチェックで再計算する必要がなくなります。
このメソッドは BizRule から呼び出すことはできません。
ビジネスルール (BizRule) に対するアプリケーション固有の文字列を返します。
| pbstrBusinessRuleString | LPWSTR* | out | BizRule に関する情報を含む文字列。文字列の形式と内容はアプリケーションによって定義されます。 |
戻り値
戻り値は HRESULT です。S_OK は成功を示します。それ以外の値は操作が失敗したことを示します。
現在のクライアントの名前を識別名 (DN) 形式で取得します。
| pbstrProp | LPWSTR* | out | クライアントの識別名(DN)を格納したBSTRを受け取るポインタである。 |
解説(Remarks)
DN 形式のクライアント名は、クライアントトークンを偽装 (impersonate) し、NameFormat パラメーターに NameFullyQualifiedDN を指定して GetUserNameEx 関数を呼び出すことで取得されます。
DN 形式のクライアント名の例は "CN=Ben Smith, OU=Software, OU=Example, O=FourthCoffee, C=US" です。
現在のクライアントの名前を Windows セキュリティアカウントマネージャー (SAM) 互換形式で取得します。
| pbstrProp | LPWSTR* | out | クライアントのSAM互換アカウント名を格納したBSTRを受け取るポインタである。 |
解説(Remarks)
SAM 互換形式のクライアント名は、クライアントトークンを偽装 (impersonate) し、NameFormat パラメーターに NameSamCompatible を指定して GetUserNameEx 関数を呼び出すことで取得されます。
SAM 互換形式のクライアント名の例は "ExampleDomain\UserName" です。
現在のクライアントの名前をユーザー表示名形式で取得します。
| pbstrProp | LPWSTR* | out | クライアントの表示名を格納したBSTRを受け取るポインタである。 |
解説(Remarks)
ユーザー表示名形式のクライアント名は、クライアントトークンを偽装 (impersonate) し、NameDisplay パラメーターに NameCanonical を指定して GetUserNameEx 関数を呼び出すことで取得されます。
ユーザー表示名形式のクライアント名の例は "Ben Smith" です。
現在のクライアントの名前を GUID 形式で取得します。
| pbstrProp | LPWSTR* | out | クライアントのGUIDを格納したBSTRを受け取るポインタである。 |
解説(Remarks)
GUID 形式のクライアント名は、クライアントトークンを偽装 (impersonate) し、NameFormat パラメーターに NameUniqueId を指定して GetUserNameEx 関数を呼び出すことで取得されます。
GUID 形式のクライアント名の例は "{4fa050f0-f561-11cf-bdd9-00aa003a77b6}Ben Smith" です。
現在のクライアントの名前を正規 (canonical) 形式で取得します。
| pbstrProp | LPWSTR* | out | クライアントの正規名(canonical name)を格納したBSTRを受け取るポインタである。 |
解説(Remarks)
正規形式のクライアント名は、クライアントトークンを偽装 (impersonate) し、NameFormat パラメーターに NameCanonical を指定して GetUserNameEx 関数を呼び出すことで取得されます。
正規形式のクライアント名の例は "example.fourthcoffee.com/software/Ben Smith" です。
現在のクライアントの名前をユーザープリンシパル名 (UPN) 形式で取得します。
| pbstrProp | LPWSTR* | out | クライアントのユーザープリンシパル名(UPN)を格納したBSTRを受け取るポインタである。 |
解説(Remarks)
UPN 形式のクライアント名は、クライアントトークンを偽装 (impersonate) し、NameFormat パラメーターに NameUserPrincipal を指定して GetUserNameEx 関数を呼び出すことで取得されます。
UPN 形式のクライアント名の例は "someone@example.com" です。
現在のクライアントの名前を、Windows セキュリティアカウントマネージャー (SAM) 互換の DNS 形式で取得します。
| pbstrProp | LPWSTR* | out | クライアントのDNS形式のSAM互換アカウント名を格納したBSTRを受け取るポインタである。 |
解説(Remarks)
SAM 互換 DNS 形式のクライアント名は、クライアントトークンを偽装 (impersonate) し、NameFormat パラメーターに NameDnsDomain を指定して GetUserNameEx 関数を呼び出すことで取得されます。
SAM 互換 DNS 形式のクライアント名の例は "example.fourthcoffee.com\Username" です。
指定したプロパティ ID を持つ IAzClientContext オブジェクトのプロパティを返します。
| lPropId | INT | in | 返す IAzClientContext オブジェクトのプロパティのプロパティ ID。指定できる値を次の表に示します。
| ||||||||||||||||||||
| varReserved | VARIANT | in | 将来の使用のために予約されています。 | ||||||||||||||||||||
| pvarProp | VARIANT* | out | 返される IAzClientContext オブジェクトのプロパティへのポインター。 |
戻り値
戻り値は HRESULT です。S_OK は成功を示します。それ以外の値は操作が失敗したことを示します。
クライアントコンテキストのロールを返します。
| bstrScopeName | LPWSTR | in | pvarRoleNames パラメーターで返されるロールが適用される IAzScope オブジェクトの名前。このプロパティが NULL の場合はアプリケーションスコープのロールが返されます。それ以外の場合は、アプリケーションスコープのロールではなく、指定したスコープのロールが返されます。 |
| pvarRoleNames | VARIANT* | out | SAFEARRAY を返すために使用される VARIANT へのポインター。SAFEARRAY の各要素は BSTR 型の VARIANT であり、bstrScopeName パラメーターで指定したスコープにおいてクライアントが所属するロールの名前を含みます。 |
戻り値
戻り値は HRESULT です。S_OK は成功を示します。それ以外の値は操作が失敗したことを示します。
解説(Remarks)
アクセスチェックの実行に使用するロールを設定または取得します。(Get)
| pbstrProp | LPWSTR* | out | アクセスチェックに使用するロール名を格納したBSTRを受け取るポインタである。 |
解説(Remarks)
このプロパティが設定されている場合、アクセスチェックではこのプロパティで指定されたロールのみが使用されます。設定されていない場合は、コンテキストに含まれるすべてのロールが使用されます。
アクセスチェックの実行に使用するロールを設定または取得します。(Put)
| bstrProp | LPWSTR | in | アクセスチェックに使用するロール名をBSTRで指定する。 |
解説(Remarks)
このプロパティが設定されている場合、アクセスチェックではこのプロパティで指定されたロールのみが使用されます。設定されていない場合は、コンテキストに含まれるすべてのロールが使用されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAzClientContext "{EFF1F00B-488A-466D-AFD9-A401C5F9EEF5}" #usecom global IAzClientContext IID_IAzClientContext "{}" #comfunc global IAzClientContext_AccessCheck 7 wstr,int,int,int,int,int,int,int,var #comfunc global IAzClientContext_GetBusinessRuleString 8 var #comfunc global IAzClientContext_get_UserDn 9 var #comfunc global IAzClientContext_get_UserSamCompat 10 var #comfunc global IAzClientContext_get_UserDisplay 11 var #comfunc global IAzClientContext_get_UserGuid 12 var #comfunc global IAzClientContext_get_UserCanonical 13 var #comfunc global IAzClientContext_get_UserUpn 14 var #comfunc global IAzClientContext_get_UserDnsSamCompat 15 var #comfunc global IAzClientContext_GetProperty 16 int,int,var #comfunc global IAzClientContext_GetRoles 17 wstr,var #comfunc global IAzClientContext_get_RoleForAccessCheck 18 var #comfunc global IAzClientContext_put_RoleForAccessCheck 19 wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IAzClientContext "{EFF1F00B-488A-466D-AFD9-A401C5F9EEF5}" #usecom global IAzClientContext IID_IAzClientContext "{}" #comfunc global IAzClientContext_AccessCheck 7 wstr,int,int,int,int,int,int,int,sptr #comfunc global IAzClientContext_GetBusinessRuleString 8 sptr #comfunc global IAzClientContext_get_UserDn 9 sptr #comfunc global IAzClientContext_get_UserSamCompat 10 sptr #comfunc global IAzClientContext_get_UserDisplay 11 sptr #comfunc global IAzClientContext_get_UserGuid 12 sptr #comfunc global IAzClientContext_get_UserCanonical 13 sptr #comfunc global IAzClientContext_get_UserUpn 14 sptr #comfunc global IAzClientContext_get_UserDnsSamCompat 15 sptr #comfunc global IAzClientContext_GetProperty 16 int,int,sptr #comfunc global IAzClientContext_GetRoles 17 wstr,sptr #comfunc global IAzClientContext_get_RoleForAccessCheck 18 sptr #comfunc global IAzClientContext_put_RoleForAccessCheck 19 wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。