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
将来使用するために予約されており、ゼロにする必要があります。
[out] pdwProvType
列挙プロバイダーの型を指定する DWORD 値のアドレス。
[out] szProvName
列挙プロバイダーからデータを受け取るバッファーへのポインター。 これは、終端の null 文字を含む文字列です。
このパラメーターを NULL
[in, out] pcbProvName
pszProvName パラメーターによって指されるバッファーのサイズ (バイト単位) を指定する DWORD 値へのポインター。 関数から制御が戻るときに、DWORD 値にはバッファーに格納されているバイト数が含まれます。
戻り値
関数が成功した場合、戻り値は 0 以外 (true
関数が失敗した場合、戻り値は 0 (FALSE
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 を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows Server 2003 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | wincrypt.h |
ライブラリ | Advapi32.lib |
DLL | Advapi32.dll |