[PATCH 02/03 v4 ] ntoskrnl.exe: Track drivers created with IoCreateDriver
Thomas Faber
thomas.faber at reactos.org
Sun Jul 24 13:05:33 CDT 2016
> 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
More information about the wine-devel
mailing list