icEnroll::get_PVKFileName 方法 (xenroll.h)

[此属性在 Windows Server 2008 和 Windows Vista 中不再可用。]

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

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

此属性是可读写的。

语法

HRESULT get_PVKFileName(
  BSTR *pbstr
);

参数

pbstr

返回值

备注

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 属性所做的任何更改之间执行按位 OR 运算,以确保不会擦除该位。在更新 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