mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 05:37:44 +00:00
- Set DRVO_INITAILIZED flag for intiailized driver objects.
- Loop the list of devices created by the driver's DriverEntry and remove the DO_DEVICE_INITIALIZING flag. svn path=/trunk/; revision=23324
This commit is contained in:
parent
6e6d9ed927
commit
bef11ebb29
|
@ -571,6 +571,8 @@ IopInitializeDriverModule(
|
|||
const WCHAR ServicesKeyName[] = L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\";
|
||||
UNICODE_STRING RegistryKey;
|
||||
PDRIVER_INITIALIZE DriverEntry;
|
||||
PDRIVER_OBJECT Driver;
|
||||
PDEVICE_OBJECT DeviceObject;
|
||||
NTSTATUS Status;
|
||||
|
||||
DriverEntry = ModuleObject->EntryPoint;
|
||||
|
@ -593,13 +595,13 @@ IopInitializeDriverModule(
|
|||
}
|
||||
|
||||
Status = IopCreateDriverObject(
|
||||
DriverObject,
|
||||
&Driver,
|
||||
ServiceName,
|
||||
0,
|
||||
FileSystemDriver,
|
||||
ModuleObject->DllBase,
|
||||
ModuleObject->SizeOfImage);
|
||||
|
||||
*DriverObject = Driver;
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("IopCreateDriverObject failed (Status %x)\n", Status);
|
||||
|
@ -609,19 +611,29 @@ IopInitializeDriverModule(
|
|||
DPRINT("RegistryKey: %wZ\n", &RegistryKey);
|
||||
DPRINT("Calling driver entrypoint at %08lx\n", DriverEntry);
|
||||
|
||||
Status = DriverEntry(*DriverObject, &RegistryKey);
|
||||
Status = DriverEntry(Driver, &RegistryKey);
|
||||
|
||||
RtlFreeUnicodeString(&RegistryKey);
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ObMakeTemporaryObject(*DriverObject);
|
||||
ObDereferenceObject(*DriverObject);
|
||||
ObMakeTemporaryObject(Driver);
|
||||
ObDereferenceObject(Driver);
|
||||
return Status;
|
||||
}
|
||||
|
||||
IopReinitializeDrivers();
|
||||
|
||||
/* Set the driver as initialized */
|
||||
Driver->Flags |= DRVO_INITIALIZED;
|
||||
DeviceObject = Driver->DeviceObject;
|
||||
while (DeviceObject)
|
||||
{
|
||||
/* Set every device as initialized too */
|
||||
DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||
DeviceObject = DeviceObject->NextDevice;
|
||||
}
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue