| ||||
| ||||
При использовании, CryptVerifyMessageSignature выдаёт ошибку: Access violation at address 77421A53 in module 'crypt32.dll' Read of address 00000000. Использую следующее описание (Delphi): function CryptVerifyMessageSignature(pVerifyPara :PCRYPT_VERIFY_MESSAGE_PARA; dwSignerIndex :DWORD; const pbSignedBlob :PBYTE; cbSignedBlob :DWORD; pbDecoded :PBYTE; pcbDecoded :PDWORD; ppSignerCert :PCCERT_CONTEXT ):BOOL ; stdcall; В чём может быть дело? | ||||
Ответы: | ||||
| ||||
Обнаружил такую вещь: Вызываю CryptVerifyMessageSignatureMy(@param, 0, mem_tbs, // подписанное сообщение mem_len, // длина signed_mem, // если нужно сохранить @signed_len,// длина сохраняемого nil); где: FillChar(param,sizeof(CRYPT_VERIFY_MESSAGE_PARA),0); param.cbSize := sizeof(CRYPT_VERIFY_MESSAGE_PARA); param.dwMsgAndCertEncodingType := X509_ASN_ENCODING or PKCS_7_ASN_ENCODING; param.hCryptProv := 0; param.pfnGetSignerCertificate := @global_sml_my_get_cert; param.pvGetArg := pUserCert; Так вот, значение pUserCert не совпадает, со значением, передаваемым в callback функцию: function global_sml_my_get_cert(pvGetArg: PVOID; dwCertEncodingType : DWORD; pSignerId : PCERT_INFO; hMsgCertStore: HCERTSTORE): PCCERT_CONTEXT; begin Result := PCCERT_CONTEXT(pvGetArg); //pvGetArg <> param.pvGetArg end; | ||||
| ||||
Возможно, у Вас проблема в описании callback функции. Вот у Марии была такая проблема http://www.cryptopro.ru/cryptopro/forum/view.asp?q=2540. | ||||
| ||||
Да, спасибо, помогло! ошибка была в том, что я не использовал stdcall в описании callback функции. | ||||