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

另请参阅

CEnroll

ICEnroll

ICEnroll2

ICEnroll3

ICEnroll4

ProviderType