CryptEnumProvidersA 関数 (wincrypt.h)

大事な この API は非推奨です。 新規および既存のソフトウェアでは 、暗号化次世代 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

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

[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 を定義します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Advapi32.lib
[DLL] Advapi32.dll

こちらもご覧ください

CryptEnumProviderTypes

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