никак не пойму в чем ошибка, при попытке чтения файла на одном работает, на другом — вылетает fatal error
ULONG u;
ntStatus = ZwOpenFile(
&hFile2,
SYNCHRONIZE | FILE_EXECUTE|FILE_READ_DATA,
&ObjectAttributes,
&IoStatus,
FILE_SHARE_READ ,
FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT);
if (ntStatus)
__asm int 3
ntStatus = ZwQueryInformationFile(hFile2,&IoStatus,&StandardInfo,sizeof(StandardInfo),FileStandardInformation);
if (ntStatus)
__asm int 3
u=StandardInfo.EndOfFile.LowPart;
pool1=ExAllocatePool(NonPagedPool,u+1);
RtlZeroMemory(pool1, u+1);
if (!pool1)
__asm int 3
ntStatus=ZwReadFile(hFile2,NULL,NULL,NULL,&IoStatus,pool1,u,NULL,NULL);//<-- A fatal system error has occurred
IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high. This is usually
caused by drivers using improper addresses.
WRITE_ADDRESS: e1038000 Paged pool //откуда мог взяться paged pool, если я создаю NonPaged?
CURRENT_IRQL: 0
подскажите плиз, в чем баг?
Re: проблема с zwreadfile...
От:
Аноним
Дата:
16.09.06 14:41
Оценка:
Здравствуйте, sergei_132, Вы писали:
_>IRQL_NOT_LESS_OR_EQUAL (a) _>An attempt was made to access a pageable (or completely invalid) address at an _>interrupt request level (IRQL) that is too high. This is usually _>caused by drivers using improper addresses.
_>WRITE_ADDRESS: e1038000 Paged pool //откуда мог взяться paged pool, если я создаю NonPaged?
_>CURRENT_IRQL: 0
_>подскажите плиз, в чем баг?
У системных ошибок есть один недостаток: они могут возникать не напрямую из-за твоего неверного кода, а косвенно! Это значит, например, что твой код заставил систему обратиться к Paged Pool... Я хочу лишь сказать, что ошибку не всегда нужно искать там, где пишет Windows.
Вообще, очень сложно отвечать на такие вопросы, потому что я не знаю, например, как у тебя инициализированы переменные, которые ты используешь в приведённом коде и т.п.
Сразу бросается в глаза глупейшая ошибка:
ты сначала заполняешь выделенную память нулями, и только после этого делаешь проверку на валидность этой память, ну не глупость ли? Посмотри, может в этом ошибка?
Здравствуйте, Аноним, Вы писали:
А>Сразу бросается в глаза глупейшая ошибка: А>ты сначала заполняешь выделенную память нулями, и только после этого делаешь проверку на валидность этой память, ну не глупость ли? Посмотри, может в этом ошибка?
нет, я это так просто дописал RtlZeroMemory... вобще не нужно заполнять нулями...
ошибка возникает именно при выполнении ZwReadFile....
Здравствуйте, sergei_132, Вы писали:
_>Здравствуйте, Аноним, Вы писали:
А>>Сразу бросается в глаза глупейшая ошибка: А>>ты сначала заполняешь выделенную память нулями, и только после этого делаешь проверку на валидность этой память, ну не глупость ли? Посмотри, может в этом ошибка?
_>нет, я это так просто дописал RtlZeroMemory... вобще не нужно заполнять нулями... _>ошибка возникает именно при выполнении ZwReadFile....
Проблема может возникать из-за размера читаемого файла... Слишком большой и при чтении в выделенный участок, затирается еще какой-нибудь кусок памяти.
Здравствуйте, sergei_132, Вы писали: _>IRQL_NOT_LESS_OR_EQUAL (a) _>An attempt was made to access a pageable (or completely invalid) address at an _>interrupt request level (IRQL) that is too high. This is usually _>caused by drivers using improper addresses.
_>WRITE_ADDRESS: e1038000 Paged pool //откуда мог взяться paged pool, если я создаю NonPaged?
_>CURRENT_IRQL: 0
_>подскажите плиз, в чем баг?
Я вот не пойму, как соотносится IRQL_NOT_LESS_OR_EQUAL и CURRENT_IRQL=0, если говорится:
The IRQL_NOT_LESS_OR_EQUAL bug check has a value of 0x0000000A. This indicates that Windows or a kernel-mode driver accessed paged memory at DISPATCH_LEVEL or above.
Но, в любом случае, Сергей, учтите, что:
Callers of ZwReadFile must be running at IRQL = PASSIVE_LEVEL.
И ещё раз проверьте, что там с IRQL. Или посмотрите, как будет работать код с Driver Verifier'ом — может быть ошибка в другом...
Вам надо посмотреть
1. Имя файла
2. Состояние файлового обьекта.
3. И где вы производите чтение файла.
4. Что у вас за продукт (функционал)
5. Кто присутствует в стеке еще (legacy и minifilter FS).