Jacek Caban : ntoskrnl.exe: Set IRP DeviceObject in IoCallDriver.

Alexandre Julliard julliard at winehq.org
Thu May 2 16:45:09 CDT 2019


Module: wine
Branch: master
Commit: 0a8c36b8e3ed66a3cbdbb534a5fc0256b50751fa
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0a8c36b8e3ed66a3cbdbb534a5fc0256b50751fa

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu May  2 13:21:39 2019 +0200

ntoskrnl.exe: Set IRP DeviceObject in IoCallDriver.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntoskrnl.exe/ntoskrnl.c     | 7 +++----
 dlls/ntoskrnl.exe/tests/driver.c | 2 --
 2 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 6ac2a3e..c4c3bab 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -622,7 +622,6 @@ static NTSTATUS dispatch_create( const irp_params_t *params, void *in_buff, ULON
 
     irpsp = IoGetNextIrpStackLocation( irp );
     irpsp->MajorFunction = IRP_MJ_CREATE;
-    irpsp->DeviceObject = device;
     irpsp->FileObject = file;
     irpsp->Parameters.Create.SecurityContext = NULL;  /* FIXME */
     irpsp->Parameters.Create.Options = params->create.options;
@@ -667,7 +666,6 @@ static NTSTATUS dispatch_close( const irp_params_t *params, void *in_buff, ULONG
 
     irpsp = IoGetNextIrpStackLocation( irp );
     irpsp->MajorFunction = IRP_MJ_CLOSE;
-    irpsp->DeviceObject = device;
     irpsp->FileObject = file;
 
     irp->Tail.Overlay.OriginalFileObject = file;
@@ -1332,7 +1330,7 @@ PIRP WINAPI IoBuildDeviceIoControlRequest( ULONG code, PDEVICE_OBJECT device,
     irpsp->Parameters.DeviceIoControl.IoControlCode = code;
     irpsp->Parameters.DeviceIoControl.InputBufferLength = in_len;
     irpsp->Parameters.DeviceIoControl.OutputBufferLength = out_len;
-    irpsp->DeviceObject = device;
+    irpsp->DeviceObject = NULL;
     irpsp->CompletionRoutine = NULL;
 
     switch (code & 3)
@@ -1382,7 +1380,7 @@ PIRP WINAPI IoBuildAsynchronousFsdRequest(ULONG majorfunc, DEVICE_OBJECT *device
 
     irpsp = IoGetNextIrpStackLocation( irp );
     irpsp->MajorFunction = majorfunc;
-    irpsp->DeviceObject = device;
+    irpsp->DeviceObject = NULL;
     irpsp->CompletionRoutine = NULL;
 
     irp->AssociatedIrp.SystemBuffer = buffer;
@@ -1966,6 +1964,7 @@ NTSTATUS WINAPI IoCallDriver( DEVICE_OBJECT *device, IRP *irp )
 
     --irp->CurrentLocation;
     irpsp = --irp->Tail.Overlay.s.u2.CurrentStackLocation;
+    irpsp->DeviceObject = device;
     dispatch = device->DriverObject->MajorFunction[irpsp->MajorFunction];
 
     TRACE_(relay)( "\1Call driver dispatch %p (device=%p,irp=%p)\n", dispatch, device, irp );
diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c
index 6d14a22..9ad2bb9 100644
--- a/dlls/ntoskrnl.exe/tests/driver.c
+++ b/dlls/ntoskrnl.exe/tests/driver.c
@@ -712,7 +712,6 @@ static void test_call_driver(DEVICE_OBJECT *device)
 
     irpsp = IoGetNextIrpStackLocation(irp);
     ok(irpsp->MajorFunction == IRP_MJ_FLUSH_BUFFERS, "MajorFunction = %u\n", irpsp->MajorFunction);
-    todo_wine
     ok(!irpsp->DeviceObject, "DeviceObject = %u\n", irpsp->DeviceObject);
     ok(!irpsp->FileObject, "FileObject = %u\n", irpsp->FileObject);
     ok(!irpsp->CompletionRoutine, "CompletionRouptine = %p\n", irpsp->CompletionRoutine);
@@ -735,7 +734,6 @@ static void test_call_driver(DEVICE_OBJECT *device)
 
     irpsp = IoGetNextIrpStackLocation(irp);
     ok(irpsp->MajorFunction == IRP_MJ_FLUSH_BUFFERS, "MajorFunction = %u\n", irpsp->MajorFunction);
-    todo_wine
     ok(!irpsp->DeviceObject, "DeviceObject = %u\n", irpsp->DeviceObject);
     ok(!irpsp->FileObject, "FileObject = %u\n", irpsp->FileObject);
     ok(!irpsp->CompletionRoutine, "CompletionRouptine = %p\n", irpsp->CompletionRoutine);




More information about the wine-cvs mailing list