ICredentialProviderUserArray
COM公式ドキュメント
ログオン UI または資格情報 UI に表示されるユーザーの集合を表します。この情報により、資格情報プロバイダーはこの集合を列挙して各ユーザーのプロパティ情報を取得し、フィールドを設定したり集合をフィルターしたりできます。
解説(Remarks)
このオブジェクトは、Windows 資格情報プロバイダー フレームワークから ICredentialProviderSetUserArray::SetUserArray メソッドを通じて資格情報プロバイダーに提供されます。このオブジェクトの所有権は資格情報プロバイダー フレームワークが保持します。
実装するタイミング
サードパーティがこのインターフェイスを実装することはありません。実装は Windows に含まれています。使用例
次の例は、このインターフェイスのいくつかのメソッドを使用するシナリオを示しています。pcpua 変数は、あらかじめ宣言された ICredentialProviderUserArray オブジェクトを表します。
DWORD dwCount = 0;
HRESULT hr = pcpua->GetCount(&dwCount);
if (SUCCEEDED(hr))
{
for (DWORD i = 0; i < dwCount; i++)
{
ICredentialProviderUser *pcpu = NULL;
hr = pcpua->GetAt(i, &pcpu);
if (SUCCEEDED(hr))
{
PWSTR pszName = NULL;
hr = pcpu->GetStringValue(PKEY_Identity_UserName, &pszName);
if (SUCCEEDED(hr))
{
// 文字列を使って何らかの処理を行う
CoTaskMemFree(pszName);
}
pcpu->Release();
}
}
}
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
配列内のユーザーの集合を、ローカル アカウントまたは Microsoft アカウントのいずれかに限定します。
| guidProviderToFilterTo | GUID* | in | ローカル アカウント資格情報プロバイダーの場合はこのパラメーターに Identity_LocalUserProvider を設定します。それ以外の場合は、Microsoft アカウント プロバイダーの GUID を設定します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
ICredentialProviderUserArray オブジェクトには、現在のシナリオで利用可能なすべてのユーザーが含まれます。このメソッドを使用すると、資格情報プロバイダーはそれらのユーザーの特定の一部を指定できます。たとえば、資格情報プロバイダーが特定の接続済みプロバイダーの Microsoft アカウント ユーザーのみを扱う場合、Microsoft アカウント プロバイダーの ID を指定してこのメソッドを呼び出し、他のプロバイダーに属するユーザーを除外できます。
このメソッドは、単一のアカウント プロバイダーでフィルターするために一度だけ呼び出せます。メソッドが再度呼び出された場合、呼び出しは E_UNEXPECTED の戻り値で失敗します。
ローカル アカウントまたは Microsoft アカウント用の「その他のユーザー」タイルがログオン UI または資格情報 UI に表示されるかどうかを示す値を取得します。
| credentialProviderAccountOptions | CREDENTIAL_PROVIDER_ACCOUNT_OPTIONS* | out | このメソッドが正常に返された場合に、ログオン UI または資格情報 UI によってどの空のタイルが表示されるかを指定する 1 つ以上のフラグを受け取る値へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
ユーザー配列内の ICredentialProviderUser オブジェクトの数を取得します。
| userCount | DWORD* | out | このメソッドが正常に返された場合に、配列内のユーザー数を受け取る値へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
配列から指定されたユーザーを取得します。
| userIndex | DWORD | in | ユーザーの 0 から始まる配列インデックス。配列のサイズは GetCount メソッドで取得できます。 |
| user | ICredentialProviderUser** | out | このメソッドが正常に返された場合に、指定されたユーザーを表すオブジェクトへのポインターのアドレス。このオブジェクトが不要になったときに Release メソッドを呼び出して解放するのは、呼び出し元の責任です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、次のものを含む HRESULT エラー コードを返します。
| 戻り値 | 説明 |
|---|---|
| userIndex に指定されたインデックスが範囲外です。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICredentialProviderUserArray "{90C119AE-0F18-4520-A1F1-114366A40FE8}" #usecom global ICredentialProviderUserArray IID_ICredentialProviderUserArray "{}" #comfunc global ICredentialProviderUserArray_SetProviderFilter 3 var #comfunc global ICredentialProviderUserArray_GetAccountOptions 4 var #comfunc global ICredentialProviderUserArray_GetCount 5 var #comfunc global ICredentialProviderUserArray_GetAt 6 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ICredentialProviderUserArray "{90C119AE-0F18-4520-A1F1-114366A40FE8}" #usecom global ICredentialProviderUserArray IID_ICredentialProviderUserArray "{}" #comfunc global ICredentialProviderUserArray_SetProviderFilter 3 sptr #comfunc global ICredentialProviderUserArray_GetAccountOptions 4 sptr #comfunc global ICredentialProviderUserArray_GetCount 5 sptr #comfunc global ICredentialProviderUserArray_GetAt 6 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。