проблема с zwreadfile...
От: sergei_132 http://sergbox.blogspot.com
Дата: 15.09.06 18:09
Оценка:
никак не пойму в чем ошибка, при попытке чтения файла на одном работает, на другом — вылетает 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.

Вообще, очень сложно отвечать на такие вопросы, потому что я не знаю, например, как у тебя инициализированы переменные, которые ты используешь в приведённом коде и т.п.

Сразу бросается в глаза глупейшая ошибка:
ты сначала заполняешь выделенную память нулями, и только после этого делаешь проверку на валидность этой память, ну не глупость ли? Посмотри, может в этом ошибка?
Re[2]: проблема с zwreadfile...
От: sergei_132 http://sergbox.blogspot.com
Дата: 16.09.06 16:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Сразу бросается в глаза глупейшая ошибка:

А>ты сначала заполняешь выделенную память нулями, и только после этого делаешь проверку на валидность этой память, ну не глупость ли? Посмотри, может в этом ошибка?

нет, я это так просто дописал RtlZeroMemory... вобще не нужно заполнять нулями...
ошибка возникает именно при выполнении ZwReadFile....
Re[3]: проблема с zwreadfile...
От: Aleksey1980  
Дата: 16.09.06 16:33
Оценка:
Здравствуйте, sergei_132, Вы писали:

_>Здравствуйте, Аноним, Вы писали:


А>>Сразу бросается в глаза глупейшая ошибка:

А>>ты сначала заполняешь выделенную память нулями, и только после этого делаешь проверку на валидность этой память, ну не глупость ли? Посмотри, может в этом ошибка?

_>нет, я это так просто дописал RtlZeroMemory... вобще не нужно заполнять нулями...

_>ошибка возникает именно при выполнении ZwReadFile....

Проблема может возникать из-за размера читаемого файла... Слишком большой и при чтении в выделенный участок, затирается еще какой-нибудь кусок памяти.
Re: проблема с zwreadfile...
От: __INFINITE Россия  
Дата: 16.09.06 17:00
Оценка:
Здравствуйте, 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'ом — может быть ошибка в другом...

Рад, если чем-то помог
Re: проблема с zwreadfile...
От: sergei_132 http://sergbox.blogspot.com
Дата: 17.09.06 17:48
Оценка:
а как может влиять тот факт,
что данный файл (который пытаюсь считать) открыт другим процессом и замаплен в память?
Re: проблема с zwreadfile...
От: basiliscus  
Дата: 18.09.06 05:59
Оценка:
Здравствуйте, sergei_132, Вы писали:
какой уровень IRQL у вас на данный момент?
ZwReadFile должен вызываться на passive level
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: проблема с zwreadfile...
От: sergei_132 http://sergbox.blogspot.com
Дата: 18.09.06 06:13
Оценка:
перед вызовом zwreadfile irql==0
Re: проблема с zwreadfile...
От: sergei_132 http://sergbox.blogspot.com
Дата: 18.09.06 07:12
Оценка:
может это прояснит проблему:

*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

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.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: e1036000, memory referenced
Arg2: 00000000, IRQL
Arg3: 00000001, value 0 = read operation, 1 = write operation
Arg4: 80827508, address which referenced memory

Debugging Details:
------------------


WRITE_ADDRESS:  e1036000 Paged pool

CURRENT_IRQL:  0

FAULTING_IP: 
nt!RtlFillMemoryUlong+10
80827508 f3ab            rep stos dword ptr es:[edi]

DEFAULT_BUCKET_ID:  INTEL_CPU_MICROCODE_ZERO

BUGCHECK_STR:  0xA

PROCESS_NAME:  System

TRAP_FRAME:  f794a714 -- (.trap fffffffff794a714)
ErrCode = 00000002
eax=bb53ccde ebx=e13e8910 ecx=00000400 edx=0000001e esi=84e48cf8 edi=e1036000
eip=80827508 esp=f794a788 ebp=f794a850 iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010206
nt!RtlFillMemoryUlong+0x10:
80827508 f3ab            rep stos dword ptr es:[edi]  es:0023:e1036000=????????
Resetting default scope

LAST_CONTROL_TRANSFER:  from 80874ad9 to 8081d97e

STACK_TEXT:  
f794a310 80874ad9 00000003 e1036000 00000000 nt!RtlpBreakWithStatusInstruction
f794a35c 808758f6 00000003 e1036000 80827508 nt!KiBugCheckDebugBreak+0x19
f794a6f4 80826493 0000000a e1036000 00000000 nt!KeBugCheck2+0x5b2
f794a6f4 80827508 0000000a e1036000 00000000 nt!KiTrap0E+0x2a1
f794a788 808f7742 e1036000 00001000 bb53ccde nt!RtlFillMemoryUlong+0x10
f794a850 80844843 e180aa00 f794a898 8534d040 nt!MmExtendSection+0x6ad
f794a8e0 8082cf4f 8543a488 00000007 e180aa00 nt!MmCreateSection+0x9c7
f794a940 f7265d13 84e3fb38 003f5a80 00000000 nt!CcInitializeCacheMap+0x22d
WARNING: Stack unwind information not available. Following frames may be wrong.
f794aa24 f72658de 84ebcda8 85f7ce70 00000001 Ntfs+0x6d13
f794aac8 809cc57d 85439020 85f7ce70 8543a950 Ntfs+0x68de
f794aaf8 80853648 f731fc53 f794ab2c f731fc53 nt!IovCallDriver+0x112
f794ab04 f731fc53 8543a950 80a6ea90 ffffffff nt!IofCallDriver+0x13
f794ab2c 809cc57d 8543a950 85f7ce70 85f7ce70 fltMgr!FltGetIrpName+0x11ed
f794ab5c 80853648 8090b989 f794ab7c 8090b989 nt!IovCallDriver+0x112
f794ab68 8090b989 85f7cfdc 85f7ce70 84e3fb38 nt!IofCallDriver+0x13
f794ab7c 80924e29 8543a950 85f7ce70 84e3fb38 nt!IopSynchronousServiceTail+0x10b
f794ac14 ba060ef5 80000564 00000000 00000000 nt!NtReadFile+0x5cf
f794acc8 ba065fbb 85a70f90 00280000 00034000 MyDrv!MyFunc+0x185 [e:\_projects\MyDrv\MyDrv.c @ 229]
Re[2]: проблема с zwreadfile...
От: Demiurg  
Дата: 19.09.06 16:55
Оценка:
Здравствуйте, sergei_132, Вы писали:

[skip]

Вам надо посмотреть
1. Имя файла
2. Состояние файлового обьекта.
3. И где вы производите чтение файла.
4. Что у вас за продукт (функционал)
5. Кто присутствует в стеке еще (legacy и minifilter FS).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.