Указан неверный адрес RtlFreeHeap при использовании смарт-карты для подписи (C ++) - PullRequest
1 голос
/ 26 августа 2011
  • Я использую 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. ОК завершается нормально.
Я пытаюсь подписаться с помощью смарт-карты, появляется окно с запросом 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?

Как мне починить?

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

Какое внимание нужно уделить знаку со смарт-карты?

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

1 Ответ

1 голос
/ 26 августа 2011

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

...