1

更新しました

COM+ コンポーネントの ConstructorString に、後で初期化するための値をプログラムで設定しようとしています。

問題のコードは、WinXP、Win2k3、Vista、および Win2k8 で正常に動作します。

Win7 - Home Premium バージョンで失敗します。

試行錯誤の結果、コンストラクター文字列にはサイズ制限があるようだと判断しました。文字列が 512 文字 (wchar) 以下の場合、保存されます。時間がかかると、CatalogCollection オブジェクトの SaveChanges 呼び出しが 0x80110437 - COMADMIN_E_PROPERTYSAVEFAILED エラーで失敗します。

結局のところ、すべてのシステムに 512 文字という制限があります。

CryptProtectData を使用して、パスワードを文字列に入れる前に暗号化します。

win7 (x64) では、文字列の出力が XP (x32) および W2k3 (x64) よりも長くなります。

それで - CryptProtectData が変更されました - 出力が長くなるのはなぜですか?

    if (!CryptProtectData(&dataIn,L" ",&optionalEntropy,NULL,NULL,
    CRYPTPROTECT_LOCAL_MACHINE | CRYPTPROTECT_UI_FORBIDDEN, &dataOut))
4

1 に答える 1

1

dataOutそれをひもに変えるためにあなたは何をしますか?今は正確な詳細を思い出せませんが、コンストラクター文字列は。だと思いBSTRます。dataOutはバイトバッファであるため、文字列に変換するときは十分に注意する必要があります。これにより、埋め込まれたNUL文字などにつまずかないようになります。

の出力バッファから文字列への変換を含めるように質問を更新できますCryptProtectDataか?

于 2009-11-15T16:30:15.963 に答える