RE: Updation of IoStatusBlock.Status in ZwReadFile/ZwWrit-eFile

You are supposed to check if the status is STATUS_PENDING and issue a wait
on the object if so (the file object, or the optional event object typically
with ZwWaitForSingleObject).

Regards,

Paul Bunn, UltraBac.Com, 425-644-6000
Microsoft MVP - WindowsNT
http://www.ultrabac.com

-----Original Message-----
From: Eshanye.K.P [mailto:xxxxx@procsys.com]
Sent: Wednesday, March 08, 2000 2:26 AM
To: NT Developers Interest List
Subject: [ntdev] Updation of IoStatusBlock.Status in
ZwReadFile/ZwWriteFile

Hi,

In my driver, I’m making a call to ZwReadFile() to read certain amount
of bytes from some offset. Error handling is done in this way

NtStatus = ZwReadFile( . . . );
if(NT_STATUS(NtStatus) && (IoStatusBlock.Status == STATSUS_SUCCESS))
{

}
else
{

return error;
}

ZwReadFile() is returning a status of STATUS_PENDING (0x00000103) and if
I check the IoStatusBlock.Status will be some junk such as 0xfffffe80
so it will always go to error path. Where as, if I give a little delay
before checking the StatusIoBlock.Status (before the if condition) then
it will be updated with STATUS_SUCCESS and the Information will have the
number bytes read. So as the DDK says I thought of giving the ‘Event’
parameter in ZwReadFile() and check it out as my driver is not an
intermediate driver. Apparently this ended with getting Ntstatus code as
0xc0000024 . But there is now sample code or document which explains me
how to use ‘Event’ parameter . Can anybody explain me what is happening
and what others are doing for such a problem.