次の方法で共有


CryptEnumProvidersA 関数 (wincrypt.h)

重要 この API は非推奨です。 新規および既存のソフトウェアでは、Cryptography Next Generation API の使用を開始する必要があります。 Microsoft は、今後のリリースでこの API を削除する可能性があります。
 
CryptEnumProviders 関数は、暗号化サービス プロバイダー (CSP) で使用可能な最初または次 を取得します。 ループで使用されるこの関数は、コンピューターで使用可能なすべての CSP を順番に取得できます。

考えられる CSP には、Microsoft Base Cryptographic Provider バージョン 1.0 と Microsoft Enhanced Cryptographic Provider バージョン 1.0 が含まれます。

構文

BOOL CryptEnumProvidersA(
  [in]      DWORD dwIndex,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     DWORD *pdwProvType,
  [out]     LPSTR szProvName,
  [in, out] DWORD *pcbProvName
);

パラメーター

[in] dwIndex

列挙する次のプロバイダーのインデックス。

[in] pdwReserved

将来使用するために予約されており、NULLする必要があります。

[in] dwFlags

将来使用するために予約されており、ゼロにする必要があります。

[out] pdwProvType

列挙プロバイダーの型を指定する DWORD 値のアドレス。

[out] szProvName

列挙プロバイダーからデータを受け取るバッファーへのポインター。 これは、終端の null 文字を含む文字列です。

このパラメーターを NULL して、メモリ割り当てのために名前のサイズを設定できます。 詳細については、「不明な長さのデータの取得」を参照してください。

[in, out] pcbProvName

pszProvName パラメーターによって指されるバッファーのサイズ (バイト単位) を指定する DWORD 値へのポインター。 関数から制御が戻るときに、DWORD 値にはバッファーに格納されているバイト数が含まれます。

メモ バッファーで返されるデータを処理する場合、アプリケーションは返されるデータの実際のサイズを使用する必要があります。 実際のサイズは、入力時に指定されたバッファーのサイズよりも少し小さくすることができます。 (入力では、バッファー サイズは通常、最大の出力データがバッファーに収まるように十分な大きさで指定されます)。出力時に、このパラメーターが指す変数は、バッファーにコピーされたデータの実際のサイズを反映するように更新されます。
 

戻り値

関数が成功した場合、戻り値は 0 以外 (true)。

関数が失敗した場合、戻り値は 0 (FALSE)。 拡張エラー情報については、GetLastError呼び出します。

NTE で開始されるエラー コードは、使用されている特定の CSP によって生成されます。 考えられるエラー コードの一部を次に示します。

リターン コード 形容
ERROR_MORE_DATA
pszProvName バッファーは、プロバイダー名を保持するのに十分な大きさではありません。
ERROR_NO_MORE_ITEMS
列挙する項目はこれ以上ありません。
ERROR_NOT_ENOUGH_MEMORY
オペレーティング システムのメモリ不足。
NTE_BAD_FLAGS
dwFlags パラメーターに認識されない値があります。
NTE_FAIL
型の登録に問題がありました。

備考

この関数は、コンピューターで使用可能なプロバイダーを列挙します。 プロバイダーの型は、CryptEnumProviderTypesを使用して列挙できます。

次の例は、使用可能なすべての暗号化サービス プロバイダーを一覧表示するループを示しています。 CryptEnumProviders 関数を使用する別の例については、「例 C プログラム: CSP プロバイダーとプロバイダーの種類の列挙を参照してください。

#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "advapi32.lib")

void main()
{

    //---------------------------------------------------------------
    // Copyright (C) Microsoft.  All rights reserved.
    // Declare and initialize variables.

    DWORD       cbName;
    DWORD       dwType;
    DWORD       dwIndex;
    CHAR        *pszName = NULL; 

    // Print header lines for providers.
    printf("Listing Available Providers:\n");
    printf("Provider type\tProvider Name\n");
    printf("_____________\t__________________"
        "___________________\n");   

    //--------------------------------------------------------------- 
    // Loop through enumerating providers.
    dwIndex = 0;
    while(CryptEnumProviders(
           dwIndex,
           NULL,
           0,
           &dwType,
           NULL,
           &cbName
           ))
    {

        //-----------------------------------------------------------
        //  cbName returns the length of the name of the next 
        //  provider. Allocate memory in a buffer to retrieve 
        //  that name.

        if (!(pszName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, cbName)))
        {
           printf("ERROR - LocalAlloc failed\n");
           exit(1);
        }
        //-----------------------------------------------------------
        //  Get the provider name.
        if (CryptEnumProviders(
               dwIndex++,
               NULL,
               0,
               &dwType,
               pszName,
               &cbName
               ))
        {
            printf ("     %4.0d\t%s\n",dwType, pszName);
        }
        else
        {
            printf("ERROR - CryptEnumProviders failed.\n");
            exit(1);
        }
        LocalFree(pszName);

    } // End of while loop

    printf("\nProvider types and provider names "
        "have been listed.\n");
}

手記

wincrypt.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして CryptEnumProviders を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wincrypt.h
ライブラリ Advapi32.lib
DLL Advapi32.dll

関連項目

CryptEnumProviderTypes

サービス プロバイダー関数の