- Я использую C++ и Visual Studio 2010.
Когда я использую смарт-карту для выполнения подписи появляется: "Когда программа завершена".
Windows has triggered a breakpoint in MyProgram.exe.
This may be due to a corruption of the heap, and indicates a bug in MyProgram.exe or any of the DLLs it has loaded.
The output window may have more diagnostic information
На выходе
HEAP[MyProgram.exe]: Invalid Address specified to RtlFreeHeap( 003C0000, 01BBFEA0 )
Windows has triggered a breakpoint in MyProgram.exe.
This may be due to a corruption of the heap, which indicates a bug in MyProgram.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while MyProgram.exe has focus.
The output window may have more diagnostic information.
Программа MyProgram.exe использует dll "signer.dll".
Я пытаюсь подписать "без смарт-карты". Только с сертификатом Windows. OK завершается нормально.
Я пытаюсь подписать с помощью смарт-карты, появляется окно с запросом PIN-кода. Когда программа заканчивается. ОШИБКА - Неверный адрес указан для RtlFreeHeap.
Я использую смарт-карту, когда она запрашивает PIN-код, я отмечаю "НЕ". Когда программа завершается. ОШИБКА. Для RtlFreeHeap указан неверный адрес.
Я заметил, что ошибка возникает только тогда, когда появляется окно с запросом PIN-кода.
Итак, я попытался использовать WinDbg, следуя этой статье: http://www.codeproject.com/KB/debug/windbg_quick_start.aspx
Ставлю точку останова на "CryptSignMessage", появляется: "При использовании смарт-карты"
(150c.17fc): C++ EH exception - code e06d7363 (first chance)
(150c.17fc): C++ EH exception - code e06d7363 (first chance)
При отсутствии использования смарт-карты этого не происходит.
Я думаю, что он пытается получить контекст для ключа, но не может и "искажает память". После «первого шанса» запросите окно PIN-кода.
Это проблема? Как получить сертификат с ключевым контекстом, прежде чем использовать CryptSignMessage?
Как я могу исправить?
Без смарт-карты я могу нормально подписать. С помощью смарт-карты я могу нормально подписать, но когда программа завершает работу, появляется ошибка.
С какой осторожностью следует относиться к подписи со смарт-карты?
Заранее спасибо