ICEnroll::p ut_PVKFileName 方法 (xenroll.h)

[从 Windows Server 2008 和 Windows Vista 起,此属性不再可供使用。]

PVKFileName 属性设置或检索将包含导出密钥的文件的名称。

此属性首先在 ICEnroll 接口中定义。

此属性是可读写的。

语法

HRESULT put_PVKFileName(
  BSTR bstr
);

参数

bstr

返回值

备注

PVKFileName 属性影响以下方法的行为:

加密服务提供程序 (CSP) 可能不支持导出功能。 从历史上看, Authenticode 已将 私钥 导出到磁盘上的 .pvk 文件,并从注册表中删除了密钥。 默认情况下,不会生成用于导出的私钥,并且许多加密服务提供程序不支持导出密钥。 但是,如果 CSP 支持导出私钥,则为 PVKFileName 属性指定非 NULL 值会使私钥生成为可导出密钥,并将私钥和公钥写入 PVKFileName 属性指定的文件。 私钥将从 CSP 中删除。 属性指定的文件名可以是任何可访问的文件。 默认情况下,不会生成 .pvk 文件,并且不会生成可导出的密钥。

如果 .pvk 文件已存在,则会通知用户,并提示用户具有覆盖该文件的权限。

GenKeyFlags 属性还具有一个标志,用于控制是否可以导出私钥。 同时使用 GenKeyFlags 属性和 PVKFileName 属性时,请小心。 如果首先设置 PVKFileName 属性, 则 GenKeyFlags 属性将自动设置为 CRYPT_EXPORTABLE。 如果使用 put_GenKeyFlags 函数 (设置 GenKeyFlags 属性) 而不包括 CRYPT_EXPORTABLE 标志,则 GenKeyFlags 将不会设置为 CRYPT_EXPORTABLE,并且生成的密钥将不可导出。 以下过程演示了这一点:

  1. 调用 put_PVKFileName 设置将接收导出密钥的文件的文件名。 GenKeyFlags 属性自动设置为 CRYPT_EXPORTABLE。
  2. 调用值未设置为 CRYPT_EXPORTABLE (例如零)的put_GenKeyFlags。
  3. GenKeyFlags 不再设置为CRYPT_EXPORTABLE (步骤 1) 中自动设置的值。

按照上述步骤生成的任何密钥都不可导出。 因此,建议用户一起使用时,在 PVKFileName 属性之前设置 GenKeyFlags 属性。

或者,用户可以确定 GenKeyFlags 属性中CRYPT_EXPORTABLE位的当前值,然后在此值与对 GenKeyFlags 属性所做的任何更改之间执行按位操作,以确保不会擦除该位。用户还可以在更新 GenKeyFlags 属性时专门设置CRYPT_EXPORTABLE位。

示例

BSTR     bstrPVKFile = NULL;
BSTR     bstrNewPVKFile = NULL;
HRESULT  hr;

// pEnroll is previously instantiated ICEnroll interface pointer

// get the PVKFileName
hr = pEnroll->get_PVKFileName( &bstrPVKFile );
if (FAILED( hr ))
    printf("Failed get_PVKFileName - %x\n", hr );
else
    printf( "PVKFileName: %ws\n", bstrPVKFile );
// free BSTR when done
if ( NULL != bstrPVKFile )
    SysFreeString( bstrPVKFile );

// set the PVKFileName, for example, "MyKeys.pvk"
bstrNewPVKFile = SysAllocString(TEXT("FILENAMEHERE"));

hr = pEnroll->put_PVKFileName( bstrNewPVKFile );
if (FAILED( hr ))
    printf("Failed put_PVKFileName - %x\n", hr );
else
    printf( "PVKFileName set to %ws\n", bstrNewPVKFile );
// free BSTR when done
if ( NULL != bstrNewPVKFile )
    SysFreeString( bstrNewPVKFile );

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 xenroll.h
Library Uuid.lib
DLL Xenroll.dll