Изучаю написание драйверов по докам от Four-F а точнее http://www.wasm.ru/article.php?article=drvw2k09 Разделяемая память, драйвер переписываю на C, уже вроде все проверил а при отправке управляющего кода драйверу - синий экран с ошибкой BAD_POOL_CALLER судя по описанию попытка освободить пользовательский адрес для ядра. Ткните пальцем а то вообще не могу понять где я ошибся
Тоже сейчас ставлю эксперементы с выделением памяти, дабы на создавать лишнюю тему раскажу о своей проблеме - вылазает синий экран с ошибкой BAD_POOL_HEADER Выделяю память, читаю, освобождаю память Код (Text): p = (PCHAR)ExAllocatePoolWithTag(PagedPool, uSize + 1, 'tag1'); // здесь читаю из файла в p - все нормально читается и выводится ReadDataFromFile(FileName.Buffer, p); DbgPrint("%s", p); ExFreePoolWithTag((PCHAR)p, 'tag1'); // BSOD BAD_POOL_HEADER mindump= Код (Text): Mini082310-08.dmp 23.08.2010 17:34:47 BAD_POOL_HEADER 0x00000019 0x00000020 0xe1f096b0 0xe1f096c0 0x0c020201 poolmanager1.sys poolmanager1.sys+18c6 32-bit C:\WINDOWS\minidump\Mini082310-08.dmp 1 15 2600 Где я не прав?
JCronuz проблема в этой функции ReadDataFromFile(FileName.Buffer, p); так как больше негде запустите verifier.exe, это вас приблизит к нахождению проблемы
у вас либо проблемы с ОЗУ, либо какой то код модифицировал ntoskrnl.exe - для начала замените ntoskrnl.exe из дистрибутива - проверьте ОЗУ - запустите verifier.exe, и если будет падать вылаживайте новый минидамп
JCronuz как вы думаете что произойдет если uSize + 1 будет меньше ufSize? p = (PCHAR)ExAllocatePoolWithTag(PagedPool, uSize + 1, 'tag1'); ufSize = ZwGetFileSize(hFile); ntStatus = ZwReadFile(hFile, NULL, NULL, NULL, &ioSB, p, ufSize, NULL, NULL)
значит запускай verifier.exe для нахождения ошибки, либо отладчик в руки по твоему дампу ничего выявить невозможно