0

Microsoftの資格情報プロバイダーのサンプルを使用して、デフォルトのWindows7ログオン画面のラッパーをまとめました。

新しいCPに関してはすべて正常に実行されているように見えますが、ログオン画面に重複するタイル、つまりデフォルトのWindowsタイルと「ラップされた」タイルが表示されます。

デフォルトのWindowsタイルは変更が組み込まれていないため、どうすれば削除できますか?

4

1 に答える 1

10

考えられる解決策は 2 つあります

。 1.プロバイダーの機能を詳しく調べ ます。既存のプロバイダーをラップする場合、その関数では、基になるプロバイダー (ラップされているもの) から資格情報の数を取得し、それらを自分の資格情報でラップする必要があります。おそらく、何らかの理由で (コードの論理エラーが原因で) 資格情報の複製をいくつか作成することがあります。(私はラッパーを書いたことはありませんが、このアプローチには意味があるかもしれません)。 2.もう 1 つの方法は、インターフェイスを実装して独自に作成することです。! レジストリ キーを見ると、他のサブキーの中に 2 つの興味深いサブキーがあることがわかります:と. それが私のPCでどのように見えるかです: 下GetCredentialCount


CredentialProviderFilter ICredentialProviderFilter
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AuthenticationCredential ProvidersCredential 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;
}


その結果、あなたのプロバイダーを除くすべてのプロバイダーが許可されなくなります。ICredentialProviderFilterICredentialProviderを 1 つのモジュールで実装できます。私が覚えている限りでは、認証情報プロバイダー フィルターのサンプルが にありますMicrosoft Windows SDK

幸運を!

于 2012-10-19T07:35:53.273 に答える