ICertServerPolicy::EnumerateExtensions 方法 (certif.h)
EnumerateExtensions 方法检索当前扩展 (OID) 的对象标识符,并将内部枚举指针移动到下一个扩展。
语法
HRESULT EnumerateExtensions(
[out] BSTR *pstrExtensionName
);
参数
[out] pstrExtensionName
指向包含当前扩展的 OID 的 BSTR 的指针。
返回值
C++
如果方法成功,该方法将返回S_OK, 并且 pstrExtensionName 参数包含当前扩展的 OID。 如果已枚举最后一个扩展,则返回值 S_FALSE。若要使用此方法,请创建 BSTR 类型的变量,将变量设置为 NULL,并将此变量的地址作为 pstrExtensionName 传递。
使用完 BSTR 后,通过调用 SysFreeString 函数来释放它。
如果方法失败,它将返回一个 指示错误的 HRESULT 值。 有关常见错误代码的列表,请参阅 通用 HRESULT 值。
VB
返回包含扩展的 OID 的字符串,如果已枚举最后一个扩展,则返回空字符串。备注
此方法枚举数据库中记录的证书扩展,即使是那些已禁用且未显示在证书中的扩展。 若要确定是否禁用扩展,请使用 GetCertificateExtensionFlags 测试扩展的EXTENSION_DISABLE_FLAG位。
枚举完成后,调用 EnumerateExtensionsClose 方法以释放枚举调用使用的资源。
示例
#include <windows.h>
#include <stdio.h>
#include <Certif.h>
BSTR bstrExt = NULL;
VARIANT varExt;
LONG ExtFlags;
HRESULT hr;
VariantInit(&varExt);
// Enumerate the extensions.
while (S_OK ==
(hr = pCertServerPol->EnumerateExtensions(&bstrExt)))
{
// Retrieve the extension data.
if (FAILED(pCertServerPol->GetCertificateExtension(
bstrExt,
PROPTYPE_BINARY,
&varExt)))
printf("Failed GetCertificateExtension\n");
else
{
// Retrieve the extension flags.
if (FAILED(pCertServerPol->GetCertificateExtensionFlags(
&ExtFlags)))
printf("Failed GetCertificateExtensionFlags\n");
else
// This sample will display the extension OID string,
// the extension flags (in hex) and
// the length of the BSTR binary ASN-encode extension.
printf("Extension: %ws\tFlags:%x\tLength:%u\n",
bstrExt,
ExtFlags,
SysStringByteLen(varExt.bstrVal));
}
}
// Determine if hr was S_FALSE, meaning the enumeration
// was completed, or some other error.
if (S_FALSE != hr)
printf("Failed EnumerateExtensions - %x\n", hr);
// Free BSTR resource.
if (NULL != bstrExt)
SysFreeString(bstrExt);
// Free VARIANT resource.
VariantClear(&varExt);
要求
最低受支持的客户端 | 无受支持的版本 |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | certif.h (包括 Certsrv.h) |
Library | Certidl.lib |
DLL | Certcli.dll |