Alexandre Julliard : ntoskrnl: Forward IRP_MJ_CREATE and IRP_MJ_CLOSE requests to the loaded driver.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jul 9 09:44:36 CDT 2015


Module: wine
Branch: master
Commit: b45395f589277c2d2d6874a3409f4d32bf19d33e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b45395f589277c2d2d6874a3409f4d32bf19d33e

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jul  8 18:56:42 2015 +0900

ntoskrnl: Forward IRP_MJ_CREATE and IRP_MJ_CLOSE requests to the loaded driver.

---

 dlls/ntoskrnl.exe/ntoskrnl.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index bff3ca1..c2ffdf3 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -183,6 +183,8 @@ static NTSTATUS dispatch_create( const irp_params_t *params, void *in_buff, ULON
     irp->UserIosb = irp_handle; /* note: we abuse UserIosb to store the server irp handle */
     irp->UserEvent = NULL;
 
+    if (device->DriverObject->MajorFunction[IRP_MJ_CREATE]) return dispatch_irp( device, irp );
+
     irp->IoStatus.u.Status = STATUS_SUCCESS;
     IoCompleteRequest( irp, IO_NO_INCREMENT );
     return STATUS_SUCCESS;
@@ -226,8 +228,12 @@ static NTSTATUS dispatch_close( const irp_params_t *params, void *in_buff, ULONG
     irp->UserIosb = irp_handle; /* note: we abuse UserIosb to store the server irp handle */
     irp->UserEvent = NULL;
 
-    irp->IoStatus.u.Status = STATUS_SUCCESS;
-    IoCompleteRequest( irp, IO_NO_INCREMENT );
+    if (!device->DriverObject->MajorFunction[IRP_MJ_CLOSE])
+    {
+        irp->IoStatus.u.Status = STATUS_SUCCESS;
+        IoCompleteRequest( irp, IO_NO_INCREMENT );
+    }
+    else dispatch_irp( device, irp );
 
     HeapFree( GetProcessHeap(), 0, file );  /* FIXME: async close processing not supported */
     return STATUS_SUCCESS;




More information about the wine-cvs mailing list