Microsoftの資格情報プロバイダーのサンプルを使用して、デフォルトのWindows7ログオン画面のラッパーをまとめました。
新しいCPに関してはすべて正常に実行されているように見えますが、ログオン画面に重複するタイル、つまりデフォルトのWindowsタイルと「ラップされた」タイルが表示されます。
デフォルトのWindowsタイルは変更が組み込まれていないため、どうすれば削除できますか?
Microsoftの資格情報プロバイダーのサンプルを使用して、デフォルトのWindows7ログオン画面のラッパーをまとめました。
新しいCPに関してはすべて正常に実行されているように見えますが、ログオン画面に重複するタイル、つまりデフォルトのWindowsタイルと「ラップされた」タイルが表示されます。
デフォルトのWindowsタイルは変更が組み込まれていないため、どうすれば削除できますか?
考えられる解決策は 2 つあります
。 1.プロバイダーの機能を詳しく調べ ます。既存のプロバイダーをラップする場合、その関数では、基になるプロバイダー (ラップされているもの) から資格情報の数を取得し、それらを自分の資格情報でラップする必要があります。おそらく、何らかの理由で (コードの論理エラーが原因で) 資格情報の複製をいくつか作成することがあります。(私はラッパーを書いたことはありませんが、このアプローチには意味があるかもしれません)。
2.もう 1 つの方法は、インターフェイスを実装して独自に作成することです。! レジストリ キーを見ると、他のサブキーの中に 2 つの興味深いサブキーがあることがわかります:と.
それが私のPCでどのように見えるかです:
下GetCredentialCount
CredentialProviderFilter
ICredentialProviderFilter
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication
Credential Providers
Credential Provider Filters
Credential Providers
ウィンドウのすべての資格情報プロバイダーが一覧表示され、その中に独自の資格情報プロバイダーがあります。のアイデアはCredential Provider Filter
、あなたのものを除いて、他のすべての資格情報プロバイダーを除外することです。によって、資格情報プロバイダーを他の資格情報プロバイダーと区別できますGUID
。
これの実装は非常に簡単ですICredentialProviderFilter
。インターフェイスからメソッドを 1 つだけ実装する必要があります。この方法はICredentialProviderFilter::Filter
.
HRESULT MyProviderFilter::Filter(
CREDENTIAL_PROVIDER_USAGE_SCENARIO cpus,
DWORD dwFlags,
GUID *rgclsidProviders,
BOOL *rgbAllow,
DWORD cProviders)
{
UNREFERENCED_PARAMETER(dwFlags);
for (DWORD dwI = 0; dwI < cProviders; dwI++)
{
if (!IsEqualGUID(rgclsidProviders[dwI], myProviderGUID))
{
rgbAllow[dwI] = FALSE;
} else rgbAllow[dwI] = TRUE;
}
return S_OK;
}
その結果、あなたのプロバイダーを除くすべてのプロバイダーが許可されなくなります。ICredentialProviderFilter
とICredentialProvider
を 1 つのモジュールで実装できます。私が覚えている限りでは、認証情報プロバイダー フィルターのサンプルが にありますMicrosoft Windows SDK
。
幸運を!