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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline SergeyE  
#1 Оставлено : 21 марта 2013 г. 12:05:08(UTC)
SergeyE

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
Система Windows 7 SP1 (6.1.7601 Service Pack 1 Сборка 7601)
Поведение одинаковое с CSP 3.6 R2 (3.6.6497) и R3 (3.6.7475)

Проблема в том, что CPCInitMemoryLF не возвращает ошибки (res = S_OK), но в переменной MemoryArena лежит NULL.
Подскажите, что я делаю не так. Вот код, на котором воспроизводится (код получения адреса CPCInitMemoryLF по-видимому правильный):
Код:

CPC_LFMM_CONFIG LfmmConfig;
RtlFillMemory(&LfmmConfig, sizeof(LfmmConfig), 0);
LONG PoolSizes[16];
RtlFillMemory(&PoolSizes, sizeof(PoolSizes), 0);

const LONG MAX_CONTEXTS = 5;
PoolSizes[MP_PRIME_M] += 2*1024 * (MAX_CONTEXTS) + 1024*1024;
PoolSizes[MP_SEC_M] += 2*1024 * (MAX_CONTEXTS) + 1024*1024;
PoolSizes[MP_BIG] += 2*1024 * (MAX_CONTEXTS) + 1024*1024;
PoolSizes[MP_WORK] += 64*1024 * (MAX_CONTEXTS) + 5*1024*1024;
PoolSizes[MP_WORK_M] += 128*1024;

//   PoolSizes[MP_BIG] = PoolSizes[MP_WORK] = 10000 * (250 + MAX_CONTEXTS);
//   PoolSizes[MP_PRIME_M] = PoolSizes[MP_SEC_M] = 1024 * (400 + MAX_CONTEXTS);
//   PoolSizes[MP_WORK_M] = 2 * PoolSizes [MP_PRIME_M];

LfmmConfig.PoolSizes = PoolSizes;
LfmmConfig.nPools = sizeof(PoolSizes)/sizeof(PoolSizes[0]);
LfmmConfig.nCPUs = 2;
LfmmConfig.fSMP = TRUE;

LfmmConfig.Size = 65536;
for (size_t i = 0; i < LfmmConfig.nPools; ++i)
	LfmmConfig.Size += PoolSizes[i];

arenaBuffer = ExAllocatePoolWithTag(PagedPool, LfmmConfig.Size, POOL_TAG);;
if(!arenaBuffer)
{
	DbgPrint(MODNAME "! Out of memory: size=%d\n", LfmmConfig.Size);
	ntStatus = STATUS_INSUFFICIENT_RESOURCES;
	return;
}
LfmmConfig.Buffer = arenaBuffer;

LPCPC_MEMORY_ARENA MemoryArena = NULL;
ULONG res = InitMemoryLF(&MemoryArena, &LfmmConfig);
if(res || MemoryArena)
{
	DbgPrint(MODNAME "! InitMemoryLF(%d) failed: 0x%.8X\n", LfmmConfig.Size, res);
	ntStatus = STATUS_UNSUCCESSFUL;
	return;
}

Offline Максим Коллегин  
#2 Оставлено : 21 марта 2013 г. 14:32:29(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,399
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Очень странно, сравните свой код с примером в \CSP\KernelMode\
Знания в базе знаний, поддержка в техподдержке
Offline SergeyE  
#3 Оставлено : 21 марта 2013 г. 14:51:41(UTC)
SergeyE

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
Так я и взял за образец код из \CSP\KernelMode\cpdrvlibsample.c
Значения PoolSizes взял сначала из примера, затем - из документации - http://cpdn.cryptopro.ru...m_m___c_o_n_f_i_g__.html

В примере, кстати, даже нет проверки MemoryArena на ноль.
Offline Максим Коллегин  
#4 Оставлено : 21 марта 2013 г. 15:11:41(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,399
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 719 раз в 623 постах
Код:
if(res || MemoryArena)


Это странная проверка)
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
SergeyE оставлено 21.03.2013(UTC)
Offline SergeyE  
#5 Оставлено : 21 марта 2013 г. 15:39:59(UTC)
SergeyE

Статус: Новичок

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

Сказал(а) «Спасибо»: 1 раз
Да, пожалуй :)
c if(res || !MemoryArena) заработало
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.