Добрый день
Два вопроса по cprocsp.
1. Можно ли как-нибудь перенаправить вывод фреймворка, чтобы можно было отобразить в собственном протоколе? Сейчас по факту, в релизном варианте то, что пишет фреймворк, нигде не остается, в том числе - в консоли устройства.
2. Просьба помочь.
Существует ли способ программной переинициализации фреймворка, типа "сброса к состоянию на момент старта приложения"?
Периодически фреймворк перестает работать. С чем связано - непонятно. Грешили на проблемы в своих приложениях, но получилось добиться этого и на входящем в комплект фреймворка приложении CreateFile.
Фреймворк просто перестает работать - его функции возвращают ошибки. При этом, если войти в "панель настроек - взаимодействие с уц - по сертификату", то установленные сертификаты не отображаются. Также, например, проверка целостности возвращает ошибку "при выполнении функции CryptAcquireContext".
Работоспособность восстанавливается после перезагрузки приложения.
Как точно воспроизвести - не понятно.
Как вариант - запустить приложение CreateFile в отладчике, установить точку остановки, например, на строчке 239 файла SignFile.cpp:
Цитата: //--------------------------------------------------------------------
// Update the message with the data.
---> if(CryptMsgUpdate(
Нажать кнопку "Create file" и оставить приложение висящим на этой точке останова на какое-то время - несколько минут.
Потом продолжить. Может быть не с первого раза, но точно получится, что результат будет "sign failed" с надписью "ключ отсутствует" в консоли отладки:
Цитата:cpcsp: 0x3a276e40: :281 QueryTester FAIL: Flags 0x7ffffff
cpcsp: 0x3a276e40: :5373 CPCSignHash (hProv=-1596358534, hHash=0xe1be00de, dwKeySpec=1, dwFlags=0x0). Result=0, Err=0x80090020.
capi20: 0x3a276e40: :542 CryptMsgGetParam () Exception :'\316\370\350\341\352\340 0x8009000d: \312\353\376\367 \355\345 \361\363\371\345\361\362\342\363\345\362.' at file:'/dailybuildsbranches/CSP_3_9/CSPbuild/CSP/capilite/CMSSignedMessage.cpp' line:2311
MsgGetParam failedcpcsp: 0x3a276e40: :632 CPCReleaseContext (hProv=-1596358534, dwFlags=0x0). Result=1, Err=0x80090020
Дальнейшие попытки нажимать кнопки "Create file" и "Read file" приводят к ошибке.
Не отображаются сертификаты, проверка целостности возвращает ошибку "при выполнении функции CryptAcquireContext" и т.п.
Понятно, что это режим отладки и все такое, но то же самое может происходить и при работе релизного варианта приложения. При этом, приложение ничего особенного не делает - подписание-проверка подписи-подписание-проверка подписи...
Были замечены также вот такие интересные сообщения в консоль:
Цитата:cpcsp: 0x3957cfc0: :281 QueryTester FAIL: Flags 0x7ffffff
<название приложения>(3407,0x3957cfc0) malloc: *** mach_vm_map(size=962039808) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
cpcsp: 0x3957cfc0: :281 QueryTester FAIL: Flags 0x7ffffff
<название приложения>(3407,0x3957cfc0) malloc: *** mach_vm_map(size=962039808) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
cpcsp: 0x3957cfc0: :281 QueryTester FAIL: Flags 0x7ffffff
CreateFile проверялся на csp 3.9, но точно это встречалось и в 3.6, и в 4.
Вопрос - с чем может быть связано? Похоже на "что-то с памятью".
Прокомментируйте как-нибудь, пожалуйста...