ICertServerPolicy::GetCertificateExtensionFlags 方法 (certif.h)

GetCertificateExtensionFlags 方法检索与最近调用 GetCertificateExtension 获取的扩展关联的标志。

语法

HRESULT GetCertificateExtensionFlags(
  [out] LONG *pExtFlags
);

参数

[out] pExtFlags

指向包含扩展标志的 LONG 变量的指针。

返回值

C++

如果该方法成功,该方法将返回S_OK,并且 pExtFlags 参数包含最近调用 GetCertificateExtension 获取的扩展中的标志。

如果方法失败,它将返回指示错误的 HRESULT 值。 有关常见错误代码的列表,请参阅 常见 HRESULT 值

VB

返回值是最近调用 GetCertificateExtension 获取的扩展中的标志。

注解

SetContextGetCertificateExtension 方法必须在 GetCertificateExtensionFlags 之前调用。 SetContext 方法指定哪个请求用作当前上下文,GetCertificateExtension 方法检索请求的扩展。

扩展可以包含策略和源标志。 策略标志提供有关证书扩展的信息。 策略标志可由策略模块设置。 源标志指示设置证书扩展的模块。 源标志仅由服务器引擎设置。

可以从扩展返回一个或多个策略标志。 下面是预定义的策略标志。

策略标志值 说明
EXTENSION_CRITICAL_FLAG 这是一个关键扩展。
EXTENSION_DISABLE_FLAG 不会使用扩展。
 

还可以返回以下源标志之一。

源标志值 说明
EXTENSION_ORIGIN_REQUEST 扩展是从存储在 szOID_CERT_EXTENSIONS (1.3.6.1.4.1.311.2.14) 或szOID_RSA_certExtensions (1.2.840.113549.1.1.9.14) PKCS #10 请求属性的扩展数组中提取的。
EXTENSION_ORIGIN_POLICY 策略模块设置扩展。
EXTENSION_ORIGIN_ADMIN 管理员设置扩展。 有关详细信息,请参阅 ICertAdmin::SetCertificateExtension
EXTENSION_ORIGIN_SERVER 服务器引擎设置扩展。
EXTENSION_ORIGIN_RENEWALCERT 该扩展是从 PKCS #10 续订请求szOID_RENEWAL_CERTIFICATE (1.3.6.1.4.1.311.13.1) 属性中存储的证书中提取的。
EXTENSION_ORIGIN_IMPORTEDCERT 该扩展是从导入的证书中提取的, (证书已传递到 ICertAdmin::ImportCertificate) 。
EXTENSION_ORIGIN_PKCS7 该扩展是从存储在 szOID_CERT_EXTENSIONS (1.3.6.1.4.1.311.2.14) 或szOID_RSA_certExtensions (1.2.840.113549.1.1.9.14) PKCS #7 请求的属性的扩展数组中提取的。
 

提供了预定义掩码,以便于确定在返回值中设置哪些标志。 提供了以下掩码。

掩码值 说明
EXTENSION_POLICY_MASK 此值 (0x0000FFFF) 用于检查策略标志。
EXTENSION_ORIGIN_MASK 此值 (0x000F0000) 用于检查源标志。
 

对自定义数据使用高 8 位EXTENSION_POLICY_MASK是安全的。 这些位将永久保存在数据库中,但不会写入证书扩展。

示例

HRESULT  hr;
LONG     ExtFlags;
// pCertServerPolicy has been used to call SetContext previously.
hr = pCertServerPolicy->GetCertificateExtensionFlags( &ExtFlags);

// More than one policy flag might be set.
LONG ExtPolicyFlags = ExtFlags & EXTENSION_POLICY_MASK;

if (ExtPolicyFlags & EXTENSION_CRITICAL_FLAG)
{
    // Do something.
}

if (ExtPolicyFlags & EXTENSION_DISABLE_FLAG)
{
    // Do something.
}

// only one origin flag can be set
switch (ExtFlags & EXTENSION_ORIGIN_MASK)
{
    case EXTENSION_ORIGIN_REQUEST:
        // Extension was set in certificate request.
        break;
    case EXTENSION_ORIGIN_POLICY:
        // Extension was set by policy module.
        break;
    case EXTENSION_ORIGIN_ADMIN:
        // Extension was set by administrator.
        break;
    case EXTENSION_ORIGIN_SERVER:
        // Extension was set by server engine.
        break;
    default:
        break;
}

要求

要求
最低受支持的客户端 无受支持的版本
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 certif.h (包括 Certsrv.h)
Library Certidl.lib
DLL Certcli.dll

另请参阅

ICertAdmin::SetCertificateExtension

ICertServerPolicy

ICertServerPolicy::GetCertificateExtension

ICertServerPolicy::SetContext

IEnumCERTVIEWEXTENSION::GetFlags