mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
[NTOS:IO]
- Correctly set DRIVER_EXTENSION::ServiceKeyName CORE-8566 #resolve svn path=/trunk/; revision=64343
This commit is contained in:
parent
f2bc2ef5ed
commit
22a86674c9
2 changed files with 30 additions and 24 deletions
|
@ -1058,6 +1058,7 @@ NTAPI
|
|||
IopCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL,
|
||||
IN PDRIVER_INITIALIZE InitializationFunction,
|
||||
IN PUNICODE_STRING RegistryPath,
|
||||
IN PCUNICODE_STRING ServiceName,
|
||||
PLDR_DATA_TABLE_ENTRY ModuleObject,
|
||||
OUT PDRIVER_OBJECT *pDriverObject);
|
||||
|
||||
|
|
|
@ -90,14 +90,12 @@ IopDeleteDriver(IN PVOID ObjectBody)
|
|||
ExFreePool(DriverObject->DriverName.Buffer);
|
||||
}
|
||||
|
||||
#if 0 /* See a bit of hack in IopCreateDriver */
|
||||
/* Check if it has a service key name */
|
||||
if (DriverObject->DriverExtension->ServiceKeyName.Buffer)
|
||||
{
|
||||
/* Free it */
|
||||
ExFreePool(DriverObject->DriverExtension->ServiceKeyName.Buffer);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
NTSTATUS FASTCALL
|
||||
|
@ -516,6 +514,7 @@ IopInitializeDriverModule(
|
|||
DriverName.Length > 0 ? &DriverName : NULL,
|
||||
DriverEntry,
|
||||
&RegistryKey,
|
||||
ServiceName,
|
||||
ModuleObject,
|
||||
&Driver);
|
||||
RtlFreeUnicodeString(&RegistryKey);
|
||||
|
@ -1479,6 +1478,7 @@ NTAPI
|
|||
IopCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL,
|
||||
IN PDRIVER_INITIALIZE InitializationFunction,
|
||||
IN PUNICODE_STRING RegistryPath,
|
||||
IN PCUNICODE_STRING ServiceName,
|
||||
PLDR_DATA_TABLE_ENTRY ModuleObject,
|
||||
OUT PDRIVER_OBJECT *pDriverObject)
|
||||
{
|
||||
|
@ -1550,9 +1550,9 @@ try_again:
|
|||
}
|
||||
|
||||
/* Set up the service key name buffer */
|
||||
ServiceKeyName.Buffer = ExAllocatePoolWithTag(PagedPool,
|
||||
LocalDriverName.Length +
|
||||
sizeof(WCHAR),
|
||||
ServiceKeyName.MaximumLength = ServiceName->Length + sizeof(UNICODE_NULL);
|
||||
ServiceKeyName.Buffer = ExAllocatePoolWithTag(NonPagedPool,
|
||||
ServiceKeyName.MaximumLength,
|
||||
TAG_IO);
|
||||
if (!ServiceKeyName.Buffer)
|
||||
{
|
||||
|
@ -1562,21 +1562,26 @@ try_again:
|
|||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
/* Fill out the key data and copy the buffer */
|
||||
ServiceKeyName.Length = LocalDriverName.Length;
|
||||
ServiceKeyName.MaximumLength = LocalDriverName.MaximumLength;
|
||||
RtlCopyMemory(ServiceKeyName.Buffer,
|
||||
LocalDriverName.Buffer,
|
||||
LocalDriverName.Length);
|
||||
|
||||
/* Null-terminate it and set it */
|
||||
ServiceKeyName.Buffer[ServiceKeyName.Length / sizeof(WCHAR)] = UNICODE_NULL;
|
||||
/* Copy the name and set it in the driver extension */
|
||||
RtlCopyUnicodeString(&ServiceKeyName,
|
||||
ServiceName);
|
||||
DriverObject->DriverExtension->ServiceKeyName = ServiceKeyName;
|
||||
|
||||
/* Also store it in the Driver Object. This is a bit of a hack. */
|
||||
RtlCopyMemory(&DriverObject->DriverName,
|
||||
&ServiceKeyName,
|
||||
sizeof(UNICODE_STRING));
|
||||
/* Make a copy of the driver name to store in the driver object */
|
||||
DriverObject->DriverName.MaximumLength = LocalDriverName.Length;
|
||||
DriverObject->DriverName.Buffer = ExAllocatePoolWithTag(PagedPool,
|
||||
DriverObject->DriverName.MaximumLength,
|
||||
TAG_IO);
|
||||
if (!DriverObject->DriverName.Buffer)
|
||||
{
|
||||
/* Fail */
|
||||
ObMakeTemporaryObject(DriverObject);
|
||||
ObDereferenceObject(DriverObject);
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
RtlCopyUnicodeString(&DriverObject->DriverName,
|
||||
&LocalDriverName);
|
||||
|
||||
/* Add the Object and get its handle */
|
||||
Status = ObInsertObject(DriverObject,
|
||||
|
@ -1678,7 +1683,7 @@ IoCreateDriver(IN PUNICODE_STRING DriverName OPTIONAL,
|
|||
IN PDRIVER_INITIALIZE InitializationFunction)
|
||||
{
|
||||
PDRIVER_OBJECT DriverObject;
|
||||
return IopCreateDriver(DriverName, InitializationFunction, NULL, NULL, &DriverObject);
|
||||
return IopCreateDriver(DriverName, InitializationFunction, NULL, DriverName, NULL, &DriverObject);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue