Alexandre Julliard : ntoskrnl.exe: Added implementation for IoCreateDriver and IoDeleteDriver.
Alexandre Julliard
julliard at winehq.org
Tue Dec 18 13:08:15 CST 2007
Module: wine
Branch: master
Commit: 7ac931acf29dbf80ffbb27fed51c46bbd4bf3504
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7ac931acf29dbf80ffbb27fed51c46bbd4bf3504
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Dec 18 19:46:06 2007 +0100
ntoskrnl.exe: Added implementation for IoCreateDriver and IoDeleteDriver.
---
dlls/ntoskrnl.exe/ntoskrnl.c | 47 +++++++++++++++++++++++++++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 4 +-
include/ddk/wdm.h | 2 +
3 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 10ac0a1..0399fb4 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -268,6 +268,53 @@ PIO_WORKITEM WINAPI IoAllocateWorkItem( PDEVICE_OBJECT DeviceObject )
/***********************************************************************
+ * IoCreateDriver (NTOSKRNL.EXE.@)
+ */
+NTSTATUS WINAPI IoCreateDriver( UNICODE_STRING *name, PDRIVER_INITIALIZE init )
+{
+ DRIVER_OBJECT *driver;
+ DRIVER_EXTENSION *extension;
+ NTSTATUS status;
+
+ if (!(driver = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(*driver) + sizeof(*extension) )))
+ return STATUS_NO_MEMORY;
+
+ if ((status = RtlDuplicateUnicodeString( 1, name, &driver->DriverName )))
+ {
+ RtlFreeHeap( GetProcessHeap(), 0, driver );
+ return status;
+ }
+
+ extension = (DRIVER_EXTENSION *)(driver + 1);
+ driver->Size = sizeof(*driver);
+ driver->DriverInit = init;
+ driver->DriverExtension = extension;
+ extension->DriverObject = driver;
+ extension->ServiceKeyName = driver->DriverName;
+
+ status = driver->DriverInit( driver, name );
+
+ if (status)
+ {
+ RtlFreeUnicodeString( &driver->DriverName );
+ RtlFreeHeap( GetProcessHeap(), 0, driver );
+ }
+ return status;
+}
+
+
+/***********************************************************************
+ * IoDeleteDriver (NTOSKRNL.EXE.@)
+ */
+void WINAPI IoDeleteDriver( DRIVER_OBJECT *driver )
+{
+ RtlFreeUnicodeString( &driver->DriverName );
+ RtlFreeHeap( GetProcessHeap(), 0, driver );
+}
+
+
+/***********************************************************************
* IoCreateDevice (NTOSKRNL.EXE.@)
*/
NTSTATUS WINAPI IoCreateDevice( DRIVER_OBJECT *driver, ULONG ext_size,
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 3117509..8749d37 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -338,7 +338,7 @@
@ stub IoCreateController
@ stdcall IoCreateDevice(ptr long ptr long long long ptr)
@ stub IoCreateDisk
-@ stub IoCreateDriver
+@ stdcall IoCreateDriver(ptr ptr)
@ stub IoCreateFile
@ stub IoCreateFileSpecifyDeviceObjectHint
@ stub IoCreateNotificationEvent
@@ -354,7 +354,7 @@
@ stub IoCsqRemoveNextIrp
@ stub IoDeleteController
@ stdcall IoDeleteDevice(ptr)
-@ stub IoDeleteDriver
+@ stdcall IoDeleteDriver(ptr)
@ stub IoDeleteSymbolicLink
@ stub IoDetachDevice
@ stub IoDeviceHandlerObjectSize
diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h
index 0e26ac2..931a130 100644
--- a/include/ddk/wdm.h
+++ b/include/ddk/wdm.h
@@ -878,8 +878,10 @@ void WINAPI ExFreePool(PVOID);
void WINAPI ExFreePoolWithTag(PVOID,ULONG);
NTSTATUS WINAPI IoCreateDevice(DRIVER_OBJECT*,ULONG,UNICODE_STRING*,DEVICE_TYPE,ULONG,BOOLEAN,DEVICE_OBJECT**);
+NTSTATUS WINAPI IoCreateDriver(UNICODE_STRING*,PDRIVER_INITIALIZE);
NTSTATUS WINAPI IoCreateSymbolicLink(UNICODE_STRING*,UNICODE_STRING*);
void WINAPI IoDeleteDevice(DEVICE_OBJECT*);
+void WINAPI IoDeleteDriver(DRIVER_OBJECT*);
NTSTATUS WINAPI IoDeleteSymbolicLink(UNICODE_STRING*);
PEPROCESS WINAPI IoGetCurrentProcess(void);
More information about the wine-cvs
mailing list