none
Windows Server2016上でCryptAcquireContextが127のエラー

    質問

  • Visual C++ .NET 2003 で作成したアプリを、リモートデスクトップサービスを
    有効にしたWindows Server2016上で動作させるとCryptAcquireContextが127の
    エラーで失敗します。
    アプリをVisual C++ 2012で作成すると発生しません。Visual C++ .NET 2003の
    ままでエラーを解決する方法がありましたら教えてください。


    1.プログラムの内容について
     プログラムは、本件が発生する最小のものを探ってみたところでは、Visual Studioから
     「Win32プロジェクト」 を新規に作成し、WinMainの冒頭に 以下の2行を追加しただけの
     もので発生します。
      -----------------------
      HCRYPTPROV hCryptProv = NULL;
      CryptAcquireContext(&hCryptProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_VERIFYCONTEXT);
      -----------------------
     上記のCryptAcquireContextに与えた各パラメータは発生条件にあたるのかどうかは試して
     いないので不明です。


    2.プログラムの実行方法について
     ビルトインadministratorで、エクスプローラから「管理者として実行」にて
     起動しています。


    3.Windows Server2016の設定変更内容
     Windows Server2016の新規インストールの状態からの設定変更内容は
     以下のとおりです。 設定変更前は正常に動作することを確認しています。

     「サーバマネージャ」
       →「役割と機能の追加ウィザード」
        →「役割ベースまたは機能ベースのインストール」
         →「リモートデスクトップサービス」をチェックする
          →「役割サービスの選択」で「リモートデスクトップセッションホスト」を選択

      change user /query を実行すると以下の1行のみ表示される状況です。
      ---------------
      アプリケーション実行モードは有効です。
      ---------------


    回答のために足りない情報がありましたら追加しますので、その旨のコメントを
    いただけたらと思います。
    以上、よろしくお願いいたします。

    2018年2月27日 8:16

すべての返信

  • CryptAcquireContextの第3引数pszProviderは読み込みたいプロバイダー名です。ここで指定しているMS_ENH_RSA_AES_PROVマクロはドキュメントで説明されていますが

    • Windows XPまでは"Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"
    • それ以降は"Microsoft Enhanced RSA and AES Cryptographic Provider"

    となっています。つまり、VC++2003でコンパイルすると前者XP向けの文字列が展開されます。VC++2005以降であれば後者が展開されるはずです。その上でコンパイル時に指定されたプロバイダー名で実行時に検索されるため、プロバイダーが見つかる / 見つからないの差異が生じます。なおVC++2005以降ではXP向けプロバイダー名文字列としてMS_ENH_RSA_AES_PROV_XPが定義されています。

    さて第4引数dwProvTypeでは読み込みたいプロバイダーのタイプを指定します。PROV_RSA_AESタイプで提供されるアルゴリズムが使用できればよく、読み込みたいプロバイダーにこだわりがないのであれば、第3引数は NULL を指定することでデフォルトのプロバイダーが読み込まれます。これが一番簡単な対策かと思います。

    2018年2月27日 8:43
  • 返信をいただきありがとうございます。

    CryptAcquireContextの第3引数を NULL にして試してみましたが、結果は変わらずで、127のエラーになりました。

    他に何か懸念される部分がありましたらご教示をお願いいたします。

    2018年2月27日 9:37