mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:42:56 +00:00
[VIDEOPRT] Give to each device its own entry in HKLM\SYSTEM\CurrentControlSet\Services
This is required if you have two graphic cards using the same driver.
This commit is contained in:
parent
e8902450bc
commit
2ae6bd7453
3 changed files with 24 additions and 3 deletions
|
@ -531,18 +531,33 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
IntCreateRegistryPath(
|
IntCreateRegistryPath(
|
||||||
IN PCUNICODE_STRING DriverRegistryPath,
|
IN PCUNICODE_STRING DriverRegistryPath,
|
||||||
|
IN ULONG DeviceNumber,
|
||||||
OUT PUNICODE_STRING DeviceRegistryPath)
|
OUT PUNICODE_STRING DeviceRegistryPath)
|
||||||
{
|
{
|
||||||
static WCHAR RegistryMachineSystem[] = L"\\REGISTRY\\MACHINE\\SYSTEM\\";
|
static WCHAR RegistryMachineSystem[] = L"\\REGISTRY\\MACHINE\\SYSTEM\\";
|
||||||
static WCHAR CurrentControlSet[] = L"CURRENTCONTROLSET\\";
|
static WCHAR CurrentControlSet[] = L"CURRENTCONTROLSET\\";
|
||||||
static WCHAR ControlSet[] = L"CONTROLSET";
|
static WCHAR ControlSet[] = L"CONTROLSET";
|
||||||
static WCHAR Insert1[] = L"Hardware Profiles\\Current\\System\\CurrentControlSet\\";
|
static WCHAR Insert1[] = L"Hardware Profiles\\Current\\System\\CurrentControlSet\\";
|
||||||
static WCHAR Insert2[] = L"\\Device0";
|
static WCHAR Insert2[] = L"\\Device";
|
||||||
|
UNICODE_STRING DeviceNumberString;
|
||||||
|
WCHAR DeviceNumberBuffer[20];
|
||||||
BOOLEAN Valid;
|
BOOLEAN Valid;
|
||||||
UNICODE_STRING AfterControlSet;
|
UNICODE_STRING AfterControlSet;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
AfterControlSet = *DriverRegistryPath;
|
AfterControlSet = *DriverRegistryPath;
|
||||||
|
|
||||||
|
/* Convert DeviceNumber to string */
|
||||||
|
DeviceNumberString.Length = 0;
|
||||||
|
DeviceNumberString.MaximumLength = sizeof(DeviceNumberBuffer);
|
||||||
|
DeviceNumberString.Buffer = DeviceNumberBuffer;
|
||||||
|
Status = RtlIntegerToUnicodeString(DeviceNumber, 10, &DeviceNumberString);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
ERR_(VIDEOPRT, "RtlIntegerToUnicodeString(%u) returned 0x%08x\n", DeviceNumber, Status);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if path begins with \\REGISTRY\\MACHINE\\SYSTEM\\ */
|
/* Check if path begins with \\REGISTRY\\MACHINE\\SYSTEM\\ */
|
||||||
Valid = (DriverRegistryPath->Length > sizeof(RegistryMachineSystem) &&
|
Valid = (DriverRegistryPath->Length > sizeof(RegistryMachineSystem) &&
|
||||||
0 == _wcsnicmp(DriverRegistryPath->Buffer, RegistryMachineSystem,
|
0 == _wcsnicmp(DriverRegistryPath->Buffer, RegistryMachineSystem,
|
||||||
|
@ -586,7 +601,8 @@ IntCreateRegistryPath(
|
||||||
|
|
||||||
if (Valid)
|
if (Valid)
|
||||||
{
|
{
|
||||||
DeviceRegistryPath->MaximumLength = DriverRegistryPath->Length + sizeof(Insert1) + sizeof(Insert2);
|
DeviceRegistryPath->MaximumLength = DriverRegistryPath->Length + sizeof(Insert1) + sizeof(Insert2)
|
||||||
|
+ DeviceNumberString.Length;
|
||||||
DeviceRegistryPath->Buffer = ExAllocatePoolWithTag(PagedPool,
|
DeviceRegistryPath->Buffer = ExAllocatePoolWithTag(PagedPool,
|
||||||
DeviceRegistryPath->MaximumLength,
|
DeviceRegistryPath->MaximumLength,
|
||||||
TAG_VIDEO_PORT);
|
TAG_VIDEO_PORT);
|
||||||
|
@ -600,6 +616,7 @@ IntCreateRegistryPath(
|
||||||
RtlAppendUnicodeToString(DeviceRegistryPath, Insert1);
|
RtlAppendUnicodeToString(DeviceRegistryPath, Insert1);
|
||||||
RtlAppendUnicodeStringToString(DeviceRegistryPath, &AfterControlSet);
|
RtlAppendUnicodeStringToString(DeviceRegistryPath, &AfterControlSet);
|
||||||
RtlAppendUnicodeToString(DeviceRegistryPath, Insert2);
|
RtlAppendUnicodeToString(DeviceRegistryPath, Insert2);
|
||||||
|
RtlAppendUnicodeStringToString(DeviceRegistryPath, &DeviceNumberString);
|
||||||
|
|
||||||
/* Check if registry key exists */
|
/* Check if registry key exists */
|
||||||
Valid = NT_SUCCESS(RtlCheckRegistryKey(RTL_REGISTRY_ABSOLUTE, DeviceRegistryPath->Buffer));
|
Valid = NT_SUCCESS(RtlCheckRegistryKey(RTL_REGISTRY_ABSOLUTE, DeviceRegistryPath->Buffer));
|
||||||
|
@ -620,7 +637,7 @@ IntCreateRegistryPath(
|
||||||
/* If path doesn't point to *ControlSet*, use DriverRegistryPath directly */
|
/* If path doesn't point to *ControlSet*, use DriverRegistryPath directly */
|
||||||
if (!Valid)
|
if (!Valid)
|
||||||
{
|
{
|
||||||
DeviceRegistryPath->MaximumLength = DriverRegistryPath->Length + sizeof(Insert2);
|
DeviceRegistryPath->MaximumLength = DriverRegistryPath->Length + sizeof(Insert2) + DeviceNumberString.Length;
|
||||||
DeviceRegistryPath->Buffer = ExAllocatePoolWithTag(NonPagedPool,
|
DeviceRegistryPath->Buffer = ExAllocatePoolWithTag(NonPagedPool,
|
||||||
DeviceRegistryPath->MaximumLength,
|
DeviceRegistryPath->MaximumLength,
|
||||||
TAG_VIDEO_PORT);
|
TAG_VIDEO_PORT);
|
||||||
|
@ -630,6 +647,7 @@ IntCreateRegistryPath(
|
||||||
|
|
||||||
RtlCopyUnicodeString(DeviceRegistryPath, DriverRegistryPath);
|
RtlCopyUnicodeString(DeviceRegistryPath, DriverRegistryPath);
|
||||||
RtlAppendUnicodeToString(DeviceRegistryPath, Insert2);
|
RtlAppendUnicodeToString(DeviceRegistryPath, Insert2);
|
||||||
|
RtlAppendUnicodeStringToString(DeviceRegistryPath, &DeviceNumberString);
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Formatted registry key '%wZ' -> '%wZ'\n",
|
DPRINT("Formatted registry key '%wZ' -> '%wZ'\n",
|
||||||
|
|
|
@ -170,6 +170,7 @@ IntVideoPortCreateAdapterDeviceObject(
|
||||||
|
|
||||||
/* Get the registry path associated with this device. */
|
/* Get the registry path associated with this device. */
|
||||||
Status = IntCreateRegistryPath(&DriverExtension->RegistryPath,
|
Status = IntCreateRegistryPath(&DriverExtension->RegistryPath,
|
||||||
|
DriverExtension->InitializationData.StartingDeviceNumber,
|
||||||
&DeviceExtension->RegistryPath);
|
&DeviceExtension->RegistryPath);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -242,6 +243,7 @@ IntVideoPortCreateAdapterDeviceObject(
|
||||||
|
|
||||||
IntCreateNewRegistryPath(DeviceExtension);
|
IntCreateNewRegistryPath(DeviceExtension);
|
||||||
IntSetupDeviceSettingsKey(DeviceExtension);
|
IntSetupDeviceSettingsKey(DeviceExtension);
|
||||||
|
DriverExtension->InitializationData.StartingDeviceNumber++;
|
||||||
|
|
||||||
/* Remove the initailizing flag */
|
/* Remove the initailizing flag */
|
||||||
(*DeviceObject)->Flags &= ~DO_DEVICE_INITIALIZING;
|
(*DeviceObject)->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||||
|
|
|
@ -342,6 +342,7 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
IntCreateRegistryPath(
|
IntCreateRegistryPath(
|
||||||
IN PCUNICODE_STRING DriverRegistryPath,
|
IN PCUNICODE_STRING DriverRegistryPath,
|
||||||
|
IN ULONG DeviceNumber,
|
||||||
OUT PUNICODE_STRING DeviceRegistryPath);
|
OUT PUNICODE_STRING DeviceRegistryPath);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue