Updation of IoStatusBlock.Status in ZwReadFile/ZwWriteFile


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))


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.

Thanx in advance