mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
[VIDEOPRT] Create and setup new registry key only for non-legacy drivers
CORE-17734
This commit is contained in:
parent
4d0cc20681
commit
92d0dd3633
1 changed files with 59 additions and 0 deletions
|
@ -302,6 +302,9 @@ IntSetupDeviceSettingsKey(
|
|||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
NTSTATUS Status;
|
||||
|
||||
if (!DeviceExtension->PhysicalDeviceObject)
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
/* Open the software key: HKLM\System\CurrentControlSet\Control\Class\<ClassGUID>\<n> */
|
||||
Status = IoOpenDeviceRegistryKey(DeviceExtension->PhysicalDeviceObject,
|
||||
PLUGPLAY_REGKEY_DRIVER,
|
||||
|
@ -353,6 +356,52 @@ IntSetupDeviceSettingsKey(
|
|||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
IntDuplicateUnicodeString(
|
||||
IN ULONG Flags,
|
||||
IN PCUNICODE_STRING SourceString,
|
||||
OUT PUNICODE_STRING DestinationString)
|
||||
{
|
||||
if (SourceString == NULL ||
|
||||
DestinationString == NULL ||
|
||||
SourceString->Length > SourceString->MaximumLength ||
|
||||
(SourceString->Length == 0 && SourceString->MaximumLength > 0 && SourceString->Buffer == NULL) ||
|
||||
Flags == RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING ||
|
||||
Flags >= 4)
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if ((SourceString->Length == 0) &&
|
||||
(Flags != (RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE |
|
||||
RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING)))
|
||||
{
|
||||
DestinationString->Length = 0;
|
||||
DestinationString->MaximumLength = 0;
|
||||
DestinationString->Buffer = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
USHORT DestMaxLength = SourceString->Length;
|
||||
|
||||
if (Flags & RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE)
|
||||
DestMaxLength += sizeof(UNICODE_NULL);
|
||||
|
||||
DestinationString->Buffer = ExAllocatePoolWithTag(PagedPool, DestMaxLength, TAG_VIDEO_PORT);
|
||||
if (DestinationString->Buffer == NULL)
|
||||
return STATUS_NO_MEMORY;
|
||||
|
||||
RtlCopyMemory(DestinationString->Buffer, SourceString->Buffer, SourceString->Length);
|
||||
DestinationString->Length = SourceString->Length;
|
||||
DestinationString->MaximumLength = DestMaxLength;
|
||||
|
||||
if (Flags & RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE)
|
||||
DestinationString->Buffer[DestinationString->Length / sizeof(WCHAR)] = 0;
|
||||
}
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IntCreateNewRegistryPath(
|
||||
|
@ -372,6 +421,16 @@ IntCreateNewRegistryPath(
|
|||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
PWCHAR InstanceIdBuffer;
|
||||
|
||||
if (!DeviceExtension->PhysicalDeviceObject)
|
||||
{
|
||||
Status = IntDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
|
||||
&DeviceExtension->RegistryPath,
|
||||
&DeviceExtension->NewRegistryPath);
|
||||
if (!NT_SUCCESS(Status))
|
||||
ERR_(VIDEOPRT, "IntDuplicateUnicodeString() failed with status 0x%lx\n", Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/* Open the hardware key: HKLM\System\CurrentControlSet\Enum\... */
|
||||
Status = IoOpenDeviceRegistryKey(DeviceExtension->PhysicalDeviceObject,
|
||||
PLUGPLAY_REGKEY_DEVICE,
|
||||
|
|
Loading…
Reference in a new issue