CredentialProvider の Unicode 化
Microsoft が提供する Credential Provider のサンプルは、なぜか文字セットが Unicode ではなく ANSI になっています。
ICredentialProviderCredential インターフェースで扱う文字列は Unicode(WCHAR) であるため、プロジェクトの文字コードを Unicode に統一しておいたほうが、文字列を扱いやすくなります。
そこで、今回は SampleCredentialProvider を例に文字セットを変更する方法を説明します。
プロジェクトの設定
- メニューから [プロジェクト]->[プロパティ] の順に選択します。[ソリューション エクスプローラ] で右クリックして [プロパティ] を選択しても同じです。
- [プロパティ ページダイアログ] の左上 [構成] で Debug と Release のどちらの設定を行うか選びます。両方変更する場合は [すべての構成] を選びます。
- 左側のツリーで [構成プロパティ]->[全般] を選択します。
- 文字セットとして [Unicode 文字セットを使用する] を選択します。

helpers.cpp の修正
このままビルドすると、次のように2つのエラーが発生してしまいます。

エラーは helpers.cpp で発生しています。helpers.cpp には ICredentialProvider::SetSerialization() および ICredentialProviderCredential::GetSerialization() の中から利用される関数があります。
肝心のエラーの原因は LsaInitString 関数の第2引数の文字コード指定が正しくないからのようです。helpers.cpp を次のように修正すればビルドできるようになりました。
- 364行目 変更前:
- HRESULT LsaInitString(PSTRING pszDestinationString, PCSTR pszSourceString)
- 364行目 変更後:
- HRESULT LsaInitString(PSTRING pszDestinationString, PCTSTR pszSourceString)
この修正を行い、正しくログオンできることを確認しました。(※正常に動作することを保証するものではありません)





