ICEnroll::enumProviders 方法 (xenroll.h)
[此方法已不再可供 Windows Server 2008 和 Windows Vista 使用。]
enumProviders 方法會擷取 ProviderType 屬性所指定之可用密碼編譯服務提供者的名稱 (CS) P。 這個方法最初是在 ICEnroll 介面中定義。
語法
HRESULT enumProviders(
[in] LONG dwIndex,
[in] LONG dwFlags,
[out] BSTR *pbstrProvName
);
參數
[in] dwIndex
指定將擷取其名稱的 CSP 序數位置。 為第一個 CSP 指定零。
[in] dwFlags
指定傳遞至 CryptEnumProviders 函式的旗標。 目前未使用此參數;指定零。
[out] pbstrProvName
BSTR 變數的指標,可接收具有指定屬性類型的 CSP 名稱。 當您完成 使用 BSTR 時,請藉由呼叫 SysFreeString 函式 來釋放它。
傳回值
C++
傳回值為 HRESULT。 值S_OK表示成功。 當 ProviderType 屬性所指示的屬性類型沒有更多 CSP 時,就會傳回值ERROR_NO_MORE_ITEMS。VB
傳回值是 String 變數,其中包含 CSP 的名稱。 如果發生錯誤,或沒有其他專案時,就會引發例外狀況。備註
如果未設定 ProviderType 屬性值,則會使用在登錄中設定的 ProviderType 預設值 (通常PROV_RSA_FULL) 。
enumProviders 方法會呼叫 CryptEnumProviders 函式。
範例
BSTR bstrProvName = NULL;
DWORD nProv;
int j;
HRESULT hr;
// array of CSP provider types (see Wincrypt.h)
DWORD nProvType[] = { PROV_RSA_FULL,
PROV_RSA_SIG,
// list shortened for brevity
//...
PROV_STT_ISS };
// Loop, for each Prov Type.
for (j = 0; j < (sizeof(nProvType)/sizeof(DWORD)); j++)
{
nProv = 0;
// pEnroll is previously instantiated ICEnroll interface pointer
hr = pEnroll->put_ProviderType( nProvType[j] );
if ( FAILED(hr))
{
printf("Failed put_ProviderType - %x\n", hr);
goto error;
}
// Enumerate the CSPs of this type.
while ( S_OK == ( hr = pEnroll->enumProviders(nProv,
0,
&bstrProvName)))
{
printf("Provider %ws (type %d )\n", bstrProvName,
nProvType[j] );
nProv++;
if ( bstrProvName )
{
SysFreeString( bstrProvName );
bstrProvName = NULL;
}
}
// Print message if provider type does not have any CSPs.
if ( 0 == nProv )
printf("There were no CSPs of type %d\n", dwType );
}
error:
// Clean up resources, and so on.
if ( bstrProvName )
SysFreeString( bstrProvName );
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | xenroll.h |
程式庫 | Uuid.lib |
Dll | Xenroll.dll |