wdm error 224

Discussion in 'Windows Vista Drivers' started by qwert, Jul 24, 2007.

  1. qwert

    qwert Guest

    An IRP dispatch handler has returned a status that is inconsistent with the
    IRP's IoStatus.Status field. (Dispatch handler routine, IRP, IRP's
    IoStatus.Status, and returned Status specified.)
    what does this bug check mean
    bug check c9(wdm errror 224)
    I get this error.when I mapped my symbol files and source files using windbg
    I see that it points to some return statement.
    can anyone explain the scenarios when this particular bug check appears(wdm
    error 224)
    help me out!!!!
     
    qwert, Jul 24, 2007
    #1
    1. Advertisements

  2. qwert

    Don Burn Guest

    Well for most BSOD's the group cannot help you without having a !analyze -v
    from Windbg. In this case the bug is as the documentation says:

    You set the IRP's IoStatus.Status field to one value, and then from the
    dispatch routine returned a different value. The only time this is legal
    is if you mark the IRP pending and return STATUS_PENDING from the dispatch
    routine. Otherwise, you need to complete the IRP and set the
    IoStatus.Status to same value as what you are returning.


    --
    Don Burn (MVP, Windows DDK)
    Windows 2k/XP/2k3 Filesystem and Driver Consulting
    Website: http://www.windrvr.com
    Blog: http://msmvps.com/blogs/WinDrvr
    Remove StopSpam to reply
     
    Don Burn, Jul 24, 2007
    #2
    1. Advertisements

  3. qwert

    Tim Roberts Guest

    The error message tells you exactly what the issue is. It isn't
    complicated.

    irp->IoStatus.Status = STATUS_BUFFER_OVERFLOW;
    IoCompleteRequest( &irp, IO_NO_INCREMENT );
    ...
    return STATUS_SUCCESS;
     
    Tim Roberts, Jul 26, 2007
    #3
  4. qwert

    qwert Guest

    status = IoCallDriver(pdx->LowerDeviceObject,irp);
    if(status == STATUS_PENDING)
    {
    status = KeWaitForSingleObject(
    &pdx->event,
    Executive,
    KernelMode,
    FALSE,
    NULL
    );
    }
    status = iostatus.Status;
    *length = urb->UrbBulkOrInterruptTransfer.TransferBufferLength;

    I suspect the error in this part of my code.
    Is there any differene if I put the "status = iostatus.status" line (in the
    above code)
    inside the if loop?
    Is there any difference between the two??
    If I put it inside the if loop and if the status returned by IoCalldriver is
    not status)pending,what will happen to my code.Is it likely to have this wdm
    error 224 now.
    Am I making any sense here.

    Thanks in advance
     
    qwert, Jul 26, 2007
    #4
  5. qwert

    Tim Roberts Guest

    Do you mean irp->IoStatus.Status? Otherwise, I doubt that iostatus
    contains anything useful.
    You should be able to put it inside the "if", because if the driver
    followed the rules, the value you get from IoCallDriver will be the same
    value the lower driver put in IoStatus.Status. However, you need to pull
    the status from the IRP, not from some random location.
     
    Tim Roberts, Jul 28, 2007
    #5
  6. qwert

    qwert Guest

    No I am not taking someother value from a random location.Its from
    iostatus.status.This iostatus is the output buffer of
    IoBuildDeviceIoControlRequest command.
    Hope status = irp->IoStatus.Status and status = IoStatus.Status are same.
    It this makes difference my driver should have crashed long back.It is not
    crashing most of the time.Its crashing when running DTM test ,sleepstress Io
    test.I see a blue screen.But its passing the test.How come this happens.Is it
    possible.Is there any unstability with DTM test.But I havent seen any blue
    screen when I tested my driver using HCT.

    Thanks in advance
     
    qwert, Jul 30, 2007
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.