NTSTATUS WINAPI IoCreateDriver( UNICODE_STRING *name, PDRIVER_INITIALIZE init ) {
- DRIVER_OBJECT *driver;
- DRIVER_EXTENSION *extension;
struct wine_driver *driver; NTSTATUS status;
TRACE("(%s, %p)\n", debugstr_us(name), init);
if (!(driver = RtlAllocateHeap( GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(*driver) + sizeof(*extension) )))
sizeof(*driver) ))) return STATUS_NO_MEMORY;
- if ((status = RtlDuplicateUnicodeString( 1, name, &driver->DriverName )))
- if ((status = RtlDuplicateUnicodeString( 1, name, &driver->driver_obj.DriverName)))
Missing space before the closing parenthesis here. ;p
{ RtlFreeHeap( GetProcessHeap(), 0, driver ); return status; }
@@ -892,13 +959,18 @@ NTSTATUS WINAPI IoCreateDriver( UNICODE_STRING *name, PDRIVER_INITIALIZE init ) /***********************************************************************
IoDeleteDriver (NTOSKRNL.EXE.@)
*/ -void WINAPI IoDeleteDriver( DRIVER_OBJECT *driver ) +void WINAPI IoDeleteDriver( DRIVER_OBJECT *driver_object ) {
- TRACE("(%p)\n", driver);
- TRACE("(%p)\n", driver_object);
- EnterCriticalSection( &drivers_cs );
- if (wine_drivers)
wine_rb_remove( wine_drivers, &driver_object->DriverName );
- LeaveCriticalSection( &drivers_cs );
- RtlFreeUnicodeString( &driver->DriverName );
- RtlFreeUnicodeString( &driver->DriverExtension->ServiceKeyName );
- RtlFreeHeap( GetProcessHeap(), 0, driver );
- RtlFreeUnicodeString( &driver_object->DriverName );
- RtlFreeUnicodeString( &driver_object->DriverExtension->ServiceKeyName );
- RtlFreeHeap( GetProcessHeap(), 0, driver_object );
}
You need to free the wine_driver now rather than the DRIVER_OBJECT, i.e. use CONTAINING_RECORD.
Thanks, Thomas