Jacek Caban : ntoskrnl.exe: Implement IoBuildAsynchronousFsdRequest.
Alexandre Julliard
julliard at winehq.org
Thu May 2 16:45:09 CDT 2019
Module: wine
Branch: master
Commit: a11cdd2231d8d736f79c806e00fc81d9776db9ff
URL: https://source.winehq.org/git/wine.git/?a=commit;h=a11cdd2231d8d736f79c806e00fc81d9776db9ff
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu May 2 13:20:52 2019 +0200
ntoskrnl.exe: Implement IoBuildAsynchronousFsdRequest.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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*);
More information about the wine-cvs
mailing list