ICEnroll::enumProviders 方法 (xenroll.h)
[此方法在 Windows Server 2008 和 Windows Vista 中不再可用。]
enumProviders 方法检索由 ProviderType 属性指定的 (CSP) 可用的加密服务提供程序的名称。 此方法首先在 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
返回值是包含 CSP 名称的 String 变量。 如果遇到错误或没有更多项,则会引发异常。注解
如果尚未设置 ProviderType 属性值,则使用默认值 (通常PROV_RSA_FULL) 注册表中设置的 ProviderType 。
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 |
Library | Uuid.lib |
DLL | Xenroll.dll |