Module: wine Branch: master Commit: a11cdd2231d8d736f79c806e00fc81d9776db9ff URL: https://source.winehq.org/git/wine.git/?a=commit;h=a11cdd2231d8d736f79c806e0...
Author: Jacek Caban jacek@codeweavers.com Date: Thu May 2 13:20:52 2019 +0200
ntoskrnl.exe: Implement IoBuildAsynchronousFsdRequest.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 35 +++++++++++++++++++++++++++-------- dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- include/ddk/wdm.h | 1 + 3 files changed, 29 insertions(+), 9 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index eff90bb..63f6647 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -1366,18 +1366,17 @@ PIRP WINAPI IoBuildDeviceIoControlRequest( ULONG code, PDEVICE_OBJECT device, return irp; }
- -/********************************************************** - * IoBuildSynchronousFsdRequest (NTOSKRNL.EXE.@) +/*********************************************************************** + * IoBuildAsynchronousFsdRequest (NTOSKRNL.EXE.@) */ -PIRP WINAPI IoBuildSynchronousFsdRequest(ULONG majorfunc, PDEVICE_OBJECT device, - PVOID buffer, ULONG length, PLARGE_INTEGER startoffset, - PKEVENT event, PIO_STATUS_BLOCK iosb) +PIRP WINAPI IoBuildAsynchronousFsdRequest(ULONG majorfunc, DEVICE_OBJECT *device, + void *buffer, ULONG length, LARGE_INTEGER *startoffset, + IO_STATUS_BLOCK *iosb) { PIRP irp; PIO_STACK_LOCATION irpsp;
- TRACE("(%d %p %p %d %p %p %p)\n", majorfunc, device, buffer, length, startoffset, event, iosb); + TRACE( "(%d %p %p %d %p %p)\n", majorfunc, device, buffer, length, startoffset, iosb );
if (!(irp = IoAllocateIrp( device->StackSize, FALSE ))) return NULL;
@@ -1414,11 +1413,31 @@ PIRP WINAPI IoBuildSynchronousFsdRequest(ULONG majorfunc, PDEVICE_OBJECT device, } irp->RequestorMode = KernelMode; irp->UserIosb = iosb; - irp->UserEvent = event; + irp->UserEvent = NULL; irp->UserBuffer = buffer; return irp; }
+ + +/*********************************************************************** + * IoBuildSynchronousFsdRequest (NTOSKRNL.EXE.@) + */ +PIRP WINAPI IoBuildSynchronousFsdRequest(ULONG majorfunc, PDEVICE_OBJECT device, + PVOID buffer, ULONG length, PLARGE_INTEGER startoffset, + PKEVENT event, PIO_STATUS_BLOCK iosb) +{ + IRP *irp; + + TRACE("(%d %p %p %d %p %p)\n", majorfunc, device, buffer, length, startoffset, iosb); + + irp = IoBuildAsynchronousFsdRequest( majorfunc, device, buffer, length, startoffset, iosb ); + if (!irp) return NULL; + + irp->UserEvent = event; + return irp; +} + static void build_driver_keypath( const WCHAR *name, UNICODE_STRING *keypath ) { static const WCHAR driverW[] = {'\','D','r','i','v','e','r','\',0}; diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index a1c84ee..20999d2 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -330,7 +330,7 @@ @ stub IoAttachDeviceByPointer @ stdcall IoAttachDeviceToDeviceStack(ptr ptr) @ stub IoAttachDeviceToDeviceStackSafe -@ stub IoBuildAsynchronousFsdRequest +@ stdcall IoBuildAsynchronousFsdRequest(long ptr ptr long ptr ptr) @ stdcall IoBuildDeviceIoControlRequest(long ptr ptr long ptr long long ptr ptr) @ stub IoBuildPartialMdl @ stdcall IoBuildSynchronousFsdRequest(long ptr ptr long ptr ptr ptr) diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h index 25f2d49..1f6bdfa 100644 --- a/include/ddk/wdm.h +++ b/include/ddk/wdm.h @@ -1559,6 +1559,7 @@ PIRP WINAPI IoAllocateIrp(CCHAR,BOOLEAN); PMDL WINAPI IoAllocateMdl(PVOID,ULONG,BOOLEAN,BOOLEAN,IRP*); PIO_WORKITEM WINAPI IoAllocateWorkItem(PDEVICE_OBJECT); PDEVICE_OBJECT WINAPI IoAttachDeviceToDeviceStack(PDEVICE_OBJECT,PDEVICE_OBJECT); +PIRP WINAPI IoBuildAsynchronousFsdRequest(ULONG,DEVICE_OBJECT*,void*,ULONG,LARGE_INTEGER*,IO_STATUS_BLOCK*); PIRP WINAPI IoBuildDeviceIoControlRequest(ULONG,DEVICE_OBJECT*,PVOID,ULONG,PVOID,ULONG,BOOLEAN,PKEVENT,IO_STATUS_BLOCK*); PIRP WINAPI IoBuildSynchronousFsdRequest(ULONG,DEVICE_OBJECT*,PVOID,ULONG,PLARGE_INTEGER,PKEVENT,IO_STATUS_BLOCK*); NTSTATUS WINAPI IoCallDriver(DEVICE_OBJECT*,IRP*);