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