Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline idtks  
#11 Оставлено : 23 апреля 2015 г. 16:02:56(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 108
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 25 раз
Вот лог из DebugView при запуске моего примера:

...
[3984] cades.dll: {5724} /CCadesApp::InitInstance/ CadesApp.cpp(16) : hInstance=000000006E000000
[3984] cades.dll: {5724} /CadesMsgIsTypeEncoded/ CadesMsgIsType.cpp(113) : (dwEncodingType=0x00010001, pbSignerInfo=0x000000000256A7A0, cbSignerInfo=4603, dwCadesType=0x0000005d, pbResult=0x000000000252B230)
[3984] cades.dll: {5724} /CadesMsgIsTypeEncoded/ CadesMsgIsType.cpp(138) : (res=1, GetLastError=0x00000000
...

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

В моем примере есть небольшая недоработка - нет вызова "GC.KeepAlive(pointersToRelease);" перед выходом из функции "Main". Вот так будет правильно:

...
if (Marshal.ReadIntPtr(ptr).ToInt64() != 0)
Console.WriteLine("Функция CadesMsgIsTypeEncoded вернула тип подписи CADES_X_LONG_TYPE_1");
else
Console.WriteLine("Функция CadesMsgIsTypeEncoded вернула тип подписи НЕ CADES_X_LONG_TYPE_1");

GC.KeepAlive(pointersToRelease);
}
catch(Exception ex)
...

--- можете подправить и попробовать еще раз? Что при этом выводится в DebugView у Вас?
Offline deniska68  
#12 Оставлено : 23 апреля 2015 г. 17:22:44(UTC)
deniska68

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 18.02.2015(UTC)
Сообщений: 16
Мужчина
Российская Федерация
Откуда: Москва

Поблагодарили: 1 раз в 1 постах
Удалось повторить на вашем примере, но есть еще кое-что.

По вашей информации из DebugView pbResult=0x000000000252B230 ничего не скажешь. Это указатель, а надо смотреть что там по указателю хранится.

Смотрите, что только что мы сделали. Ваш пример запускался снова, но с пересобранной cades.dll, в которой в конце функции CadesMsgIsTypeEncoded вставлено небольшое логирование. Просто в лог-файл сохраняется значение возвращаемое в последнем параметре. То которое говорит соответствует подпись проверяемому типу или не соответствует. И, как в 32-х, так и 64-х одинаковые результаты - ноль, то есть подпись не X-LONG.

Однако, действительно, ваш пример при этом на консоль в 32-бита выводил "Функция CadesMsgIsTypeEncoded вернула тип подписи НЕ CADES_X_LONG_TYPE_1", а 64-бита "Функция CadesMsgIsTypeEncoded вернула тип подписи CADES_X_LONG_TYPE_1". Таким образом, выходит, что надо вам разобраться как верно значение параметра принимать в .NET, в 32-битной и 64-битной архитектуре.

thanks 1 пользователь поблагодарил deniska68 за этот пост.
idtks оставлено 23.04.2015(UTC)
Offline idtks  
#13 Оставлено : 23 апреля 2015 г. 17:29:49(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 108
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 25 раз
Непонимаю... В следующей строке лога DebugView ваш код на c++ сообщает результат выполнения функции:

[3984] cades.dll: {5724} /CadesMsgIsTypeEncoded/ CadesMsgIsType.cpp(138) : (res=1, GetLastError=0x00000000

--- "res = 1" - разве не это значение записывается по указателю pbResult=0x000000000252B230? Единица это не правильный результат функции - и он получен кодом на c++.
Offline idtks  
#14 Оставлено : 23 апреля 2015 г. 18:02:13(UTC)
idtks

Статус: Активный участник

Группы: Участники
Зарегистрирован: 10.07.2014(UTC)
Сообщений: 108
Российская Федерация
Откуда: Москва

Сказал(а) «Спасибо»: 25 раз
Я, кажется, разобрался. В предыдущем комментарии я был не прав: "res = 1" - это признак того, что функция выполнилась без ошибки. А вот чтобы мой пример заработал под 64бита надо было добавить очистку памяти выделенной под результат "pbResult":

...
Marshal.WriteIntPtr(ptr, IntPtr.Zero);
...

--- странно, но под 32бита функция "CadesMsgIsTypeEncoded" не обращала внимания на мусор по указателю ptr / pbResult. А вот под 64бита уже стала...

Спасибо, за помощь :)
Offline deniska68  
#15 Оставлено : 23 апреля 2015 г. 18:09:54(UTC)
deniska68

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 18.02.2015(UTC)
Сообщений: 16
Мужчина
Российская Федерация
Откуда: Москва

Поблагодарили: 1 раз в 1 постах
Вы верно разобрались.

Пожалуйста :)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.