ICertServerExit::GetCertificateExtensionFlags 方法 (certif.h)
GetCertificateExtensionFlags 方法从最近调用 ICertServerExit::GetCertificateExtension 获取的扩展获取标志。
语法
HRESULT GetCertificateExtensionFlags(
[out] LONG *pExtFlags
);
参数
[out] pExtFlags
指向将包含扩展标志的 LONG 变量的指针。
返回值
C++
如果方法成功,该方法将返回S_OK,并且 *pExtFlags 设置为包含最近调用 ICertServerExit::GetCertificateExtension 获取的扩展的标志的变量。如果方法失败,它将返回一个 指示错误的 HRESULT 值。 有关常见错误代码的列表,请参阅 通用 HRESULT 值。
VB
返回值是最近调用 ICertServerExit::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.11.9.14 的扩展数组中提取的,) PKCS #10 请求的属性。 |
EXTENSION_ORIGIN_POLICY | 策略模块设置扩展。 |
EXTENSION_ORIGIN_ADMIN | 管理员设置扩展。 有关详细信息,请参阅 ICertAdmin::SetCertificateExtension。 |
EXTENSION_ORIGIN_SERVER | 服务器引擎设置扩展。 |
EXTENSION_ORIGIN_RENEWALCERT | 扩展是从存储在 szOID_RENEWAL_CERTIFICATE (1.3.6.1.4.1.311.13.1 的证书中提取的,) PKCS #10 续订请求的属性。 |
EXTENSION_ORIGIN_IMPORTEDCERT | 该扩展是从导入的证书中提取的, (证书已传递到 ICertAdmin::ImportCertificate) 。 |
EXTENSION_ORIGIN_PKCS7 | 该扩展是从存储在 szOID_CERT_EXTENSIONS (1.3.6.1.4.1.1.311.2.14) 或szOID_RSA_certExtensions (1.2.840.113549.11.9.14 的扩展数组中提取的,) PKCS #7 请求的属性。 |
提供预定义掩码是为了便于确定在返回值中设置哪些标志。 提供了以下掩码。
掩码值 | 说明 |
---|---|
EXTENSION_POLICY_MASK | 此值 (0x0000FFFF) 用于检查策略标志。 |
EXTENSION_ORIGIN_MASK | 此值 (0x000F0000) 用于检查源标志。 |
对自定义数据使用高 8 位EXTENSION_POLICY_MASK是安全的。 这些位将永久保存在数据库中,但不会写入证书扩展。
在使用此方法之前,必须调用 ICertServerExit::SetContext 。
示例
HRESULT hr;
LONG ExtFlags;
// pCertServerExit has been used to call SetContext previously.
hr = pCertServerExit->GetCertificateExtensionFlags(&ExtFlags);
// More than one policy flag may be set.
LONG ExtPolicyFlags = ExtFlags & EXTENSION_POLICY_MASK;
if (ExtPolicyFlags & EXTENSION_CRITICAL_FLAG)
{
// Perform the desired operation.
}
if (ExtPolicyFlags & EXTENSION_DISABLE_FLAG)
{
// Perform the desired operation.
}
// 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;
case EXTENSION_ORIGIN_RENEWALCERT:
// Extension was set by renewal certificate.
break;
case EXTENSION_ORIGIN_IMPORTEDCERT:
// Extension was set by imported certificate.
break;
case EXTENSION_ORIGIN_PKCS7:
// Extension was set by PKCS #7.
break;
default:
break;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 无受支持的版本 |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | certif.h (包括 Certsrv.h) |
Library | Certidl.lib |
DLL | Certcli.dll |
另请参阅
CCertServerExit
ICertAdmin::SetCertificateExtension