Signed-off-by: Chip Davis cdavis@codeweavers.com --- dlls/ntoskrnl.exe/ntoskrnl.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index a810dee573f..3a3c543be83 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -479,9 +479,10 @@ struct dispatch_context void *in_buff; };
-static void dispatch_irp( DEVICE_OBJECT *device, IRP *irp, struct dispatch_context *context ) +static NTSTATUS dispatch_irp( DEVICE_OBJECT *device, IRP *irp, struct dispatch_context *context ) { LARGE_INTEGER count; + NTSTATUS status;
IoSetCompletionRoutine( irp, dispatch_irp_completion, context->handle, TRUE, TRUE, TRUE ); context->handle = 0; @@ -491,9 +492,10 @@ static void dispatch_irp( DEVICE_OBJECT *device, IRP *irp, struct dispatch_conte context->irp = irp; device->CurrentIrp = irp; KeEnterCriticalRegion(); - IoCallDriver( device, irp ); + status = IoCallDriver( device, irp ); KeLeaveCriticalRegion(); device->CurrentIrp = NULL; + return status; }
/* process a create request for a given file */ @@ -536,9 +538,7 @@ static NTSTATUS dispatch_create( struct dispatch_context *context ) irp->UserEvent = NULL;
irp->Flags |= IRP_CREATE_OPERATION; - dispatch_irp( device, irp, context ); - - return STATUS_SUCCESS; + return dispatch_irp( device, irp, context ); }
/* process a close request for a given file */ @@ -574,9 +574,7 @@ static NTSTATUS dispatch_close( struct dispatch_context *context ) irp->UserEvent = NULL;
irp->Flags |= IRP_CLOSE_OPERATION; - dispatch_irp( device, irp, context ); - - return STATUS_SUCCESS; + return dispatch_irp( device, irp, context ); }
/* process a read request for a given device */ @@ -616,9 +614,7 @@ static NTSTATUS dispatch_read( struct dispatch_context *context )
irp->Flags |= IRP_READ_OPERATION; irp->Flags |= IRP_DEALLOCATE_BUFFER; /* deallocate out_buff */ - dispatch_irp( device, irp, context ); - - return STATUS_SUCCESS; + return dispatch_irp( device, irp, context ); }
/* process a write request for a given device */ @@ -652,9 +648,7 @@ static NTSTATUS dispatch_write( struct dispatch_context *context )
irp->Flags |= IRP_WRITE_OPERATION; irp->Flags |= IRP_DEALLOCATE_BUFFER; /* deallocate in_buff */ - dispatch_irp( device, irp, context ); - - return STATUS_SUCCESS; + return dispatch_irp( device, irp, context ); }
/* process a flush request for a given device */ @@ -681,9 +675,7 @@ static NTSTATUS dispatch_flush( struct dispatch_context *context ) irpsp = IoGetNextIrpStackLocation( irp ); irpsp->FileObject = file;
- dispatch_irp( device, irp, context ); - - return STATUS_SUCCESS; + return dispatch_irp( device, irp, context ); }
/* process an ioctl request for a given device */ @@ -696,6 +688,7 @@ static NTSTATUS dispatch_ioctl( struct dispatch_context *context ) DEVICE_OBJECT *device; FILE_OBJECT *file = wine_server_get_ptr( context->params.ioctl.file ); ULONG out_size = context->params.ioctl.out_size; + NTSTATUS status;
if (!file) return STATUS_INVALID_HANDLE;
@@ -744,10 +737,10 @@ static NTSTATUS dispatch_ioctl( struct dispatch_context *context ) context->in_buff = NULL;
irp->Flags |= IRP_DEALLOCATE_BUFFER; /* deallocate in_buff */ - dispatch_irp( device, irp, context ); + status = dispatch_irp( device, irp, context );
HeapFree( GetProcessHeap(), 0, to_free ); - return STATUS_SUCCESS; + return status; }
static NTSTATUS dispatch_free( struct dispatch_context *context )