CryptEnumProviderTypesA 函式 (wincrypt.h)
提供者類型包括PROV_RSA_FULL、PROV_RSA_SCHANNEL和PROV_DSS。
語法
BOOL CryptEnumProviderTypesA(
[in] DWORD dwIndex,
[in] DWORD *pdwReserved,
[in] DWORD dwFlags,
[out] DWORD *pdwProvType,
[out] LPSTR szTypeName,
[in, out] DWORD *pcbTypeName
);
參數
[in] dwIndex
要列舉之下一個提供者類型的索引。
[in] pdwReserved
保留供日後使用,且必須為 NULL。
[in] dwFlags
保留供日後使用,且必須為零。
[out] pdwProvType
指定列舉提供者類型的 DWORD 值位址。
[out] szTypeName
從列舉提供者類型接收數據的緩衝區指標。 這是包含終止 NULL 字元的字串。 某些提供者類型沒有顯示名稱,在此情況下不會傳回任何名稱,而 由其指向的傳 回值是零。
此參數可以是 NULL ,可取得記憶體配置用途的名稱大小。 如需詳細資訊,請參閱 擷取未知長度的數據。
[in, out] pcbTypeName
DWORD 值的指標,指定 pszTypeName 參數所指向緩衝區的大小,以位元組為單位。 當函式傳回時, DWORD 值會包含儲存或儲存在緩衝區中的位元元組數目。 某些提供者類型沒有顯示名稱,在此情況下不會傳回任何名稱,而 由其指向的傳 回值是零。
傳回值
如果函式成功,傳回值為非零 (TRUE) 。
如果函式失敗,傳回值為零, (FALSE) 。 如需擴充的錯誤資訊,請呼叫 GetLastError。
NTE 開頭的錯誤碼是由所使用的特定 CSP 所產生。 接下來有一些可能的錯誤碼。
傳回碼 | Description |
---|---|
|
沒有其他要列舉的專案。 |
|
操作系統記憶體不足。 |
|
dwFlags 參數具有無法辨識的值。 |
|
類型註冊發生錯誤。 |
備註
此函式會列舉計算機上可用的提供者類型。 您可以使用 CryptEnumProviders 列舉任何特定提供者類型的提供者。
範例
下列範例顯示迴圈,其中列出所有可用的密碼編譯服務提供者類型。
#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 dwIndex;
DWORD dwType;
DWORD cbName;
LPTSTR pszName;
//--------------------------------------------------------------
// Print header lines for provider types.
printf("Listing Available Provider Types:\n");
printf("Provider type\tProvider Type Name\n");
printf("_____________\t_____________________________________\n");
// Loop through enumerating provider types.
dwIndex = 0;
while(CryptEnumProviderTypes(
dwIndex,
NULL,
0,
&dwType,
NULL,
&cbName
))
{
//-----------------------------------------------------------
// cbName returns the length of the name of the next
// provider type. 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 type name.
if (CryptEnumProviderTypes(
dwIndex++,
NULL,
NULL,
&dwType,
pszName,
&cbName))
{
printf (" %4.0d\t%s\n",dwType, pszName);
}
else
{
printf("ERROR - CryptEnumProviderTypes\n");
exit(1);
}
LocalFree(pszName);
} // End of while loop.
}
如需使用 CryptEnumProviderTypes 函 式的另一個範例,請參閱 範例 C 程式:列舉 CSP 提供者和提供者類型。
注意
wincrypt.h 標頭會根據 UNICODE 預處理器常數的定義,將 CryptEnumProviderTypes 定義為別名,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | wincrypt.h |
程式庫 | Advapi32.lib |
Dll | Advapi32.dll |