SignerSignEx2 函数

SignerSignEx2 函数对指定的文件进行签名和时间戳,从而允许多个嵌套签名。

注意

此函数没有关联的头文件或导入库。 若要调用此函数,必须创建用户定义的头文件,并使用 LoadLibraryGetProcAddress 函数动态链接到Mssign32.dll。

 

语法

HRESULT WINAPI SignerSignEx2(
  _In_       DWORD                  dwFlags,
  _In_       SIGNER_SUBJECT_INFO    *pSubjectInfo,
  _In_       SIGNER_CERT            *pSignerCert,
  _In_       SIGNER_SIGNATURE_INFO  *pSignatureInfo,
  _In_opt_   SIGNER_PROVIDER_INFO   *pProviderInfo,
  _In_opt_   DWORD                  dwTimestampFlags,
  _In_opt_   PCSTR                  pszTimestampAlgorithmOid,
  _In_opt_   PCWSTR                 pwszHttpTimeStamp,
  _In_opt_   PCRYPT_ATTRIBUTES      psRequest,
  _In_opt_   PVOID                  pSipData,
  _Out_      SIGNER_CONTEXT         **ppSignerContext,
  _In_opt_   PCERT_STRONG_SIGN_PARA pCryptoPolicy,
  _Reserved_ PVOID                  pReserved
);

parameters

dwFlags [in]

修改此函数的行为。

如果要签名的文件是可移植的可执行文件 (PE) 文件,则可以为零,也可以是以下一个或多个值的组合。

含义
SPC_EXC_PE_PAGE_HASHES_FLAG
0x10
为 PE 文件创建 SIP 间接数据时排除页面哈希。 此标志优先于 SPC_INC_PE_PAGE_HASHES_FLAG 标志。
如果未指定 SPC_EXC_PE_PAGE_HASHES_FLAGSPC_INC_PE_PAGE_HASHES_FLAG 标志,则使用 WintrustSetDefaultIncludePEPageHashes 函数设置的值用于此设置。 此设置的默认设置是在为 PE 文件创建 SIP 间接数据时排除页面哈希。
此值在 Mssip.h 头文件中定义。
Windows Server 2003 和 Windows XP: 不支持此值。
SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG
0x20
不支持此值。
SPC_INC_PE_DEBUG_INFO_FLAG
0x40
不支持此值。
SPC_INC_PE_RESOURCES_FLAG
0x80
不支持此值。
SPC_INC_PE_PAGE_HASHES_FLAG
0x100
为 PE 文件创建 SIP 间接数据时,包括页哈希。
Windows Server 2003 和 Windows XP: 不支持此值。
此值在 Mssip.h 头文件中定义。
SIG_APPEND
0x1000
签名将嵌套。 如果在添加任何签名之前设置此标志,生成的签名将添加为外部签名。 如果未设置此标志,则生成的签名将替换外部签名,删除所有内部签名。

 

pSubjectInfo [in]

指向 SIGNER_SUBJECT_INFO 结构的指针,该结构指定要签名的主题。

pSignerCert [in]

指向 SIGNER_CERT 结构的指针,该结构指定要用于创建数字签名的证书。

pSignatureInfo [in]

指向包含数字签名相关信息 的SIGNER_SIGNATURE_INFO 结构的指针。

pProviderInfo [in, 可选]

指向 SIGNER_PROVIDER_INFO 结构的指针,该结构指定加密 服务提供程序 (CSP) 和用于创建数字签名的私钥信息。

如果此参数的值为 NULL,则 pSignerCert 参数必须指定与 CSP 关联的证书。

dwTimestampFlags [in, optional]

如果 pwszHttpTimeStamp 参数不为 NULL,将传递给 SignerTimeStampEx3 的标志。 这可以是以下值之一。

含义
SIGNER_TIMESTAMP_AUTHENTICODE
默认值。 指定 Authenticode 时间戳。
SIGNER_TIMESTAMP_RFC3161
指定 RFC 3161 时间戳。

 

如果 pwszHttpTimeStamp 参数为 NULL,则忽略此参数。

pszTimestampAlgorithmOid [in, optional]

用于创建 RFC 3161 时间戳的算法的对象标识符。 对于 Authenticode 时间戳,将忽略此参数。

pwszHttpTimeStamp [in, optional]

时间戳服务器的 URL。

psRequest [in, optional]

指向添加到符号请求的 CRYPT_ATTRIBUTE 结构的数组的指针。 如果 pwszHttpTimeStamp 参数不包含有效值或为 NULL,则忽略此参数。

pSipData [in, 可选]

作为附加数据传递到 SIP 函数的 32 位值。 此格式和内容由 SIP 提供程序定义。

ppSignerContext [out]

指向包含已签名 BLOB的SIGNER_CONTEXT结构的指针的地址。 使用完 SIGNER_CONTEXT 结构后,通过调用 SignerFreeSignerContext 函数释放SIGNER_CONTEXT结构。

pCryptoPolicy [in, optional]

如果存在,则为指向CERT_STRONG_SIGN_PARA结构的指针,该结构包含用于检查强签名的参数。 如果证书或其链未通过,则不会以任何方式更改该文件。 如果传入 URL 以指定时间戳机构 (TSA) ,则此策略也会应用于时间戳。

pReserved

保留。 此值必须为 NULL

返回值

如果函数成功,该函数将返回S_OK。

如果函数失败,它将返回一个 指示错误的 HRESULT 值。 此函数返回的可能错误代码包括但不限于以下内容。 有关常见错误代码的列表,请参阅 通用 HRESULT 值

返回代码 说明
E_INVALIDARG
如果将 dwTimestampFlags 参数设置为 SIGNER_TIMESTAMP_AUTHENTICODE,则无法将 dwFlags 参数设置为 SIG_APPEND

 

要求

要求
最低受支持的客户端
Windows 8 [仅限桌面应用]
最低受支持的服务器
Windows Server 2012 [仅限桌面应用]
DLL
Mssign32.dll

另请参阅

SignerSign

SignerSignEx

SignerFreeSignerContext