Vista/Winows7のログイン画面カスタマイズ

指紋認証バイス搭載のPCなどでは、指紋認証によるログオンを実現するために、よくメーカー独自のログイン画面が用意されている。
WindowsXPまでは、カスタムログイン画面を作成するためにはGINAという技術を使っていた。だが、Vista以降はCredential Provider(資格情報プロバイダ)というCOMコンポーネントを作成することになる。(ICredentialProviderを実装)


CredentialProviderの実装サンプルは、microsoftのサイトからダウンロードできる。
http://www.microsoft.com/downloads/details.aspx?FamilyID=B1B3CBD1-2D3A-4FAC-982F-289F4F4B9300&displaylang=en

また、以下には数少ない日本語の情報がある
Windows Vista 用の資格情報プロバイダを使用したカスタム ログイン機能の作成」
http://msdn.microsoft.com/ja-jp/magazine/cc163489.aspx


作成したコンポーネントを、レジストリに登録することで、カスタムログイン用のパネル(資格情報プロバイダ)が追加表示されるようになる。
ただし通常、セーフモードではデフォルトの資格情報プロバイダしか表示されない。


さて、指紋認証バイスのように、「パスワード」「指紋認証バイス」の「いずれか」で認証する場合は、サンプルにあるSampleCredentialProviderをベースに作成し、追加の資格情報プロバイダをレジストリに追加すればよい。


しかし、セキュリティ向上のために、たとえば「パスワード」「スマートカード」の「両方」が揃わないと認証OKにしないような要件の場合は、既存のパスワード資格情報プロバイダをラップして機能拡張する必要がある。サンプルでは、SampleWrapExistingCredentialProviderというのが、既存のパスワード資格情報プロバイダを拡張するサンプルだ。


また、それだけでは既存のパスワード入力パネルも表示されてしまって意味がないので、既存の資格情報プロバイダを非表示にする必要がある。
そのためにはCredential Providerと同じ要領で、Credential Provider FilterというCOMコンポーネントを別途作成してレジストリに登録する必要がある(ICredentialProviderFilterを実装)。Filterとあるとおり、どの資格情報プロバイダを表示するかを制御できる。


ただし、Filterの実装がうまくできていないと全ての資格情報パネルが表示されなくなってしまってログイン不能になるので注意が必要だ。そのような場合、セーフモードでもログイン不能になってしまうようだ。
#私もFilterのテストを仮想環境で行っていたが、2回くらいログインできなくなってバックアップから書き戻す羽目になった。