CryptEnumProvidersA 関数 (wincrypt.h)
考えられる 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 によって生成されます。 考えられるエラー コードの一部を次に示します。
リターン コード | 説明 |
---|---|
|
pszProvName バッファーがプロバイダー名を保持するのに十分な大きさではなかった。 |
|
列挙する項目はこれ以上ありません。 |
|
オペレーティング システムのメモリ不足。 |
|
dwFlags パラメーターの値が認識されません。 |
|
型の登録に問題が発生しました。 |
注釈
この関数は、コンピューターで使用できるプロバイダーを列挙します。 プロバイダーの種類は、 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 |