mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 13:45:58 +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\\";
|
const WCHAR ServicesKeyName[] = L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\";
|
||||||
UNICODE_STRING RegistryKey;
|
UNICODE_STRING RegistryKey;
|
||||||
PDRIVER_INITIALIZE DriverEntry;
|
PDRIVER_INITIALIZE DriverEntry;
|
||||||
|
PDRIVER_OBJECT Driver;
|
||||||
|
PDEVICE_OBJECT DeviceObject;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DriverEntry = ModuleObject->EntryPoint;
|
DriverEntry = ModuleObject->EntryPoint;
|
||||||
|
@ -593,13 +595,13 @@ IopInitializeDriverModule(
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = IopCreateDriverObject(
|
Status = IopCreateDriverObject(
|
||||||
DriverObject,
|
&Driver,
|
||||||
ServiceName,
|
ServiceName,
|
||||||
0,
|
0,
|
||||||
FileSystemDriver,
|
FileSystemDriver,
|
||||||
ModuleObject->DllBase,
|
ModuleObject->DllBase,
|
||||||
ModuleObject->SizeOfImage);
|
ModuleObject->SizeOfImage);
|
||||||
|
*DriverObject = Driver;
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IopCreateDriverObject failed (Status %x)\n", Status);
|
DPRINT("IopCreateDriverObject failed (Status %x)\n", Status);
|
||||||
|
@ -609,19 +611,29 @@ IopInitializeDriverModule(
|
||||||
DPRINT("RegistryKey: %wZ\n", &RegistryKey);
|
DPRINT("RegistryKey: %wZ\n", &RegistryKey);
|
||||||
DPRINT("Calling driver entrypoint at %08lx\n", DriverEntry);
|
DPRINT("Calling driver entrypoint at %08lx\n", DriverEntry);
|
||||||
|
|
||||||
Status = DriverEntry(*DriverObject, &RegistryKey);
|
Status = DriverEntry(Driver, &RegistryKey);
|
||||||
|
|
||||||
RtlFreeUnicodeString(&RegistryKey);
|
RtlFreeUnicodeString(&RegistryKey);
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
ObMakeTemporaryObject(*DriverObject);
|
ObMakeTemporaryObject(Driver);
|
||||||
ObDereferenceObject(*DriverObject);
|
ObDereferenceObject(Driver);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
IopReinitializeDrivers();
|
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;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue