C# 如果签名字段是旧的,则FileIsSignedEx无法获取信息

C# 如果签名字段是旧的,则FileIsSignedEx无法获取信息,c#,docusignapi,cosign-api,C#,Docusignapi,Cosign Api,我使用以下API来验证文件是否已签名 CoSign Signature Local>Signature Local COM签名和验证方法>SAPICryptCOM函数>FileIsSignedEx 例如: SAPI.FileIsSignedEx( hSession, SAPI_ENUM_FILE_TYPE.SAPI_ENUM_FILE_OFFICE_XML_PACKAGE, fileName, null,

我使用以下API来验证文件是否已签名
CoSign Signature Local>Signature Local COM签名和验证方法>SAPICryptCOM函数>FileIsSignedEx

例如:

SAPI.FileIsSignedEx(
          hSession,
          SAPI_ENUM_FILE_TYPE.SAPI_ENUM_FILE_OFFICE_XML_PACKAGE,
          fileName,
          null,
          0,
          ref isSigned
      );
`

如果文件具有较新的签名字段,则此操作有效。*.docx文件中字段的名称类似于
{388F8850-55AF-4729-BE27-F1E5FCAC5A8F}

但是,如果.docx文件包含较旧的签名字段,则即使该文件已签名,该函数也始终返回0(false)。旧签名字段的名称为
ArGrDigsig2

相关函数(如
SignatureFeldInfoGet
)也不会为旧字段返回任何内容,即使该字段已在今天签名

知道这里发生了什么吗


名为“ArGrDigsign”的旧签名字段是ARX联合签名旧签名字段。这些签名是办公文件ARX联合签名的专有签名。这些签名由MS宏实现,只能从MS Office应用程序中使用。只有新的标准Office或DocuSign签名行签名也可以通过DSA API(如SAPI Local)使用

谢谢你的澄清。我通过将.docx文件转换为word.doc文件并将类型更改为
SAPILib.SAPI_ENUM_文件\u word
而不是
SAPILib.SAPI_ENUM_文件\u OFFICE\u XML\u包来进行验证。确实检索到了签名信息。我正在探索一个解决方案,在这个解决方案中,我可以动态地将文档转换为旧类型。也许如果我可以通过将签名字段提取到缓冲区来转换签名字段,那么它可能会快一点。