Неверный адрес указан для RtlFreeHeap при использовании смарт-карты для подписи (C++)

  • Я использую 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?

Как я могу исправить?

Без смарт-карты я могу нормально подписать. С помощью смарт-карты я могу нормально подписать, но когда программа завершает работу, появляется ошибка.

С какой осторожностью следует относиться к подписи со смарт-карты?

Заранее спасибо


person Cobaia    schedule 26.08.2011    source источник


Ответы (1)


Как говорится в сообщении, это похоже на повреждение кучи. Их не так-то просто отследить. Лучше всего использовать инструмент профилирования памяти, чтобы найти причину.

person David Heffernan    schedule 26.08.2011
comment
Спасибо за ответ. Сменил софт читалки на более старый и все работает. Я ненавижу ошибки. - person Cobaia; 29.08.2011
comment
Извините, мой ответ не был полезен. - person David Heffernan; 29.08.2011