Статус: Участник
Группы: Участники
Зарегистрирован: 15.01.2008(UTC) Сообщений: 18 Откуда: Пермь
|
проект представляет собой веб-сервис, собран в vs2008 пересобрать в vs2005 или так пойдет?
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.01.2008(UTC) Сообщений: 18 Откуда: Пермь
|
Отправил, с адреса serebrov[cобака]prognoz.ru Краткое описание в письме, если что спрашивайте плиз Отредактировано пользователем 1 апреля 2008 г. 23:11:19(UTC)
| Причина: Не указана
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
В письме вижу только "Доброго времени суток!" |
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
|
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Надо было мне раньше повнимательнее посмотреть. У Вас в коде на четыре вызова Marshal.AllocHGlobal() есть только два Marshal.FreeHGlobal(). Как же здесь не быть утечке? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.01.2008(UTC) Сообщений: 18 Откуда: Пермь
|
Простой вызов FreeHGlobal для pdecoded и pverinfo приводит к ошибке с сообщением о неверном дескрипторе.
Я понимаю, что это видимо не совсем по адресу, но может подскажете в чем дело?
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
Теперь всё ясно. Вы вообще неправильно пользуетесь этими двумя указателями. Функция CadesVerifyMessage() сама выделяет память для out-параметров ppDecodedBlob и ppVerificationInfo. Вам лучше описать их в прототипе как out, а не ref, и просто передать в качестве этих параметров ничем не заполненные указатели IntPtr. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 15.01.2008(UTC) Сообщений: 18 Откуда: Пермь
|
Переделал по вашему совету, прекрасно все работает. Утечки тоже никуда не делись, процесс продолжает есть память Код ниже: Код:
public byte[] VerifyAux(byte[] pSignature)
{
byte[] message = new byte[0];
IntPtr pdecoded = IntPtr.Zero;
IntPtr pverinfo = IntPtr.Zero;
IntPtr pcrpara = IntPtr.Zero;
IntPtr pdata1 = IntPtr.Zero;
int cbDecoded = pSignature.Length;
try
{
CRYPT_VERIFY_MESSAGE_PARA crpara = new CRYPT_VERIFY_MESSAGE_PARA();
crpara.cbSize = (uint)Marshal.SizeOf(crpara);
crpara.dwMsgAndCertEncodingType = (uint)65537;
crpara.hCryptProv = IntPtr.Zero;
crpara.pfnGetSignerCertificate = IntPtr.Zero;
crpara.pvGetArg = IntPtr.Zero;
CADES_VERIFY_MESSAGE_PARA verpara = new CADES_VERIFY_MESSAGE_PARA();
verpara.dwSize = (uint)Marshal.SizeOf(verpara);
pcrpara = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(CRYPT_VERIFY_MESSAGE_PARA)));
Marshal.StructureToPtr(crpara, pcrpara, false);
verpara.pVerifyMessagePara = pcrpara;
verpara.pCadesVerifyPara = IntPtr.Zero;
CRYPTOAPI_BLOB decoded = new CRYPTOAPI_BLOB();
CADES_VERIFICATION_INFO verinfo = new CADES_VERIFICATION_INFO();
pdecoded = IntPtr.Zero;
pverinfo = IntPtr.Zero;
pdata1 = Marshal.AllocHGlobal(sizeof(byte) * pSignature.Length);
Marshal.Copy(pSignature, 0, pdata1, pSignature.Length);
if (Crypto.CadesVerifyMessage(ref verpara, 0, pdata1, (uint)cbDecoded, out pdecoded, out pverinfo)) ///!!!
{
decoded = (CRYPTOAPI_BLOB)Marshal.PtrToStructure(pdecoded, typeof(CRYPTOAPI_BLOB));
verinfo = (CADES_VERIFICATION_INFO)Marshal.PtrToStructure(pverinfo, typeof(CADES_VERIFICATION_INFO));
message = new byte[decoded.cbData];
Marshal.Copy(decoded.pbData, message, 0, (int)decoded.cbData);
}
else
{
verinfo = (CADES_VERIFICATION_INFO)Marshal.PtrToStructure(pverinfo, typeof(CADES_VERIFICATION_INFO));
Context.Items["LastError"] = (int)verinfo.dwStatus;
throw new Exception("Некорректная подпись!");
}
}
finally
{
Marshal.FreeHGlobal(pdata1);
Marshal.FreeHGlobal(pcrpara);
Crypto.CadesFreeBlob(pdecoded);
Crypto.CadesFreeVerificationInfo(pverinfo);
}
return message;
}
|
|
|
|
Статус: Вам и не снилось
Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC) Сообщений: 831 Откуда: Крипто-Про
Сказал(а) «Спасибо»: 1 раз Поблагодарили: 48 раз в 44 постах
|
У меня в тех же условиях утечка не наблюдается. Уточните используемую версию КриптоПро ЭЦП (версию SDK или CAdESCOM в зависимости от того, что установлено на машине, где производится тестирование). |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close