« Credential Provider Extender を発表しました | JavaScriptとActionScriptのXML処理速度比較 »

CredentialProvider の Unicode 化

Microsoft が提供する Credential Provider のサンプルは、なぜか文字セットが Unicode ではなく ANSI になっています。

ICredentialProviderCredential インターフェースで扱う文字列は Unicode(WCHAR) であるため、プロジェクトの文字コードを Unicode に統一しておいたほうが、文字列を扱いやすくなります。

そこで、今回は SampleCredentialProvider を例に文字セットを変更する方法を説明します。

プロジェクトの設定

  1. メニューから [プロジェクト]->[プロパティ] の順に選択します。[ソリューション エクスプローラ] で右クリックして [プロパティ] を選択しても同じです。
  2. [プロパティ ページダイアログ] の左上 [構成] で Debug と Release のどちらの設定を行うか選びます。両方変更する場合は [すべての構成] を選びます。
  3. 左側のツリーで [構成プロパティ]->[全般] を選択します。
  4. 文字セットとして [Unicode 文字セットを使用する] を選択します。
    プロパティ ページダイアログ

helpers.cpp の修正

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

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)

この修正を行い、正しくログオンできることを確認しました。(※正常に動作することを保証するものではありません)

2007-2009 CO-CONV,Corp

ブログ内に記載されている社名および製品名は各社の商標または登録商標です。