}
wcscpy(pBuffer, L"inf\\machine.inf");
- InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM");
+ InstallSoftwareBusPnpEnumerator(szBuffer, L"ROOT\\SWENUM\0");
}
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
RtlInitUnicodeString(&ReferenceString, DeviceEntry->DeviceName);
/* register device interface */
- Status = IoRegisterDeviceInterface(BusDeviceExtension->PhysicalDeviceObject, &DeviceEntry->DeviceGuid, NULL, &BusInstanceEntry->SymbolicLink);
+ Status = IoRegisterDeviceInterface(BusDeviceExtension->PhysicalDeviceObject, &BusInstanceEntry->InterfaceGuid, &ReferenceString, &BusInstanceEntry->SymbolicLink);
/* check for success */
if (!NT_SUCCESS(Status))
IN PHANDLE hKey,
IN PBUS_ENUM_DEVICE_EXTENSION BusDeviceExtension,
IN PBUS_DEVICE_ENTRY DeviceEntry,
- IN LPWSTR ReferenceString,
- IN LPWSTR InterfaceString)
+ IN LPWSTR InterfaceString,
+ IN LPWSTR ReferenceString)
{
GUID InterfaceGUID;
NTSTATUS Status;
/* construct buffer */
swprintf(Buffer, L"%s\\%s", DeviceEntry->PDODeviceName, DeviceEntry->Instance);
-
- ExFreePool(IoStack->FileObject->FileName.Buffer);
+ // HACK
+ //ExFreePool(IoStack->FileObject->FileName.Buffer);
/* store new file name */
RtlInitUnicodeString(&IoStack->FileObject->FileName, Buffer);
ASSERT(DeviceEntry->Instance);
/* calculate length */
- Length = wcslen(DeviceEntry->Instance) + 1;
+ Length = wcslen(DeviceEntry->Instance) + 2;
/* allocate buffer */
Name = AllocateItem(PagedPool, Length * sizeof(WCHAR));
Length = wcslen(BusDeviceExtension->BusIdentifier);
Length += wcslen(DeviceEntry->BusId);
- /* extra length for '\\' and zero byte */
- Length += 2;
+ /* extra length for '\\' and 2 zero bytes */
+ Length += 4;
/* allocate buffer */
- Name = ExAllocatePool(PagedPool, Length * sizeof(WCHAR));
+ Name = AllocateItem(PagedPool, Length * sizeof(WCHAR));
if (!Name)
{
/* failed to allocate buffer */
}
/* construct id */
- swprintf(Name, L"%s\\%s", BusDeviceExtension->BusIdentifier, DeviceEntry->BusId);
+ wcscpy(Name, BusDeviceExtension->BusIdentifier);
+ wcscat(Name, L"\\");
+ wcscat(Name, DeviceEntry->BusId);
+ //swprintf(Name, L"%s\\%s", BusDeviceExtension->BusIdentifier, DeviceEntry->BusId);
/* store result */
Irp->IoStatus.Information = (ULONG_PTR)Name;
if (Diff.QuadPart > Int32x32To64(15000, 10000))
{
- DPRINT1("DeviceID %S Instance %S TimeCreated %I64u Now %I64u Diff %I64u hung\n", DeviceEntry->DeviceName, DeviceEntry->Instance, DeviceEntry->TimeCreated.QuadPart, Time.QuadPart, Diff.QuadPart);
+ //DPRINT1("DeviceID %S Instance %S TimeCreated %I64u Now %I64u Diff %I64u hung\n", DeviceEntry->DeviceName, DeviceEntry->Instance, DeviceEntry->TimeCreated.QuadPart, Time.QuadPart, Diff.QuadPart);
/* release spin lock */
KeReleaseSpinLock(&BusDeviceExtension->Lock, OldLevel);
UNICODE_STRING ServiceKeyPath = RTL_CONSTANT_STRING(L"\\REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Services\\");
PBUS_ENUM_DEVICE_EXTENSION BusDeviceExtension;
PDEV_EXTENSION DeviceExtension;
+ PBUS_DEVICE_ENTRY DeviceEntry;
+ PLIST_ENTRY Entry;
+ KIRQL OldLevel;
DPRINT1("KsCreateBusEnumObject %S BusDeviceObject %p\n", ServiceRelativePath, BusDeviceObject);
FreeItem(BusDeviceExtension);
}
+ /* acquire device entry lock */
+ KeAcquireSpinLock(&BusDeviceExtension->Lock, &OldLevel);
+
+ /* now iterate all device entries */
+ Entry = BusDeviceExtension->Common.Entry.Flink;
+ while(Entry != &BusDeviceExtension->Common.Entry)
+ {
+ /* get device entry */
+ DeviceEntry = (PBUS_DEVICE_ENTRY)CONTAINING_RECORD(Entry, BUS_DEVICE_ENTRY, Entry);
+ if (!DeviceEntry->PDO)
+ {
+ /* release device entry lock */
+ KeReleaseSpinLock(&BusDeviceExtension->Lock, OldLevel);
+
+ /* create pdo */
+ Status = KspCreatePDO(BusDeviceExtension, DeviceEntry, &DeviceEntry->PDO);
+
+ /* acquire device entry lock */
+ KeAcquireSpinLock(&BusDeviceExtension->Lock, &OldLevel);
+
+ /* done */
+ break;
+ }
+ /* move to next entry */
+ Entry = Entry->Flink;
+ }
+
+ /* release device entry lock */
+ KeReleaseSpinLock(&BusDeviceExtension->Lock, OldLevel);
+
+
+ /* invalidate device relations */
+ IoInvalidateDeviceRelations(BusDeviceExtension->PhysicalDeviceObject, BusRelations);
DPRINT("KsCreateBusEnumObject Status %x\n", Status);
/* done */
return Status;
Status = KspDoReparseForIrp(Irp, DeviceEntry);
DPRINT("REPARSE Irp %p '%wZ'\n", Irp, &IoStack->FileObject->FileName);
- Irp->IoStatus.Status = Status;
+ Irp->IoStatus.Status = Status;
+ Irp->IoStatus.Information = IO_REPARSE;
return Status;
}
/* set state no notstarted */
DeviceEntry->DeviceState = NotStarted;
- /* time to create PDO */
- KspCreatePDO(BusDeviceExtension, DeviceEntry, &DeviceEntry->PDO);
-
- /* invalidate device relations */
- IoInvalidateDeviceRelations(BusDeviceExtension->PhysicalDeviceObject, BusRelations);
+ /* complete pending irps */
+ KspCompletePendingIrps(DeviceEntry, STATUS_DEVICE_REMOVED);
/* done */
Status = STATUS_SUCCESS;
Status = KsServiceBusEnumPnpRequest(DeviceObject, Irp);
/* check if the request was for a pdo */
- if (!ChildDevice)
+ if (ChildDevice)
{
if (Status != STATUS_NOT_SUPPORTED)
{
if (!NT_SUCCESS(Status))
{
/* failed to get pnp object */
- Irp->IoStatus.Status = Status;
+ Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return Status;
+ return STATUS_NOT_SUPPORTED;
}
/* sanity check */
/* sanity checks */
ASSERT(PinsCount != 0);
- ASSERT(PinsCount == 1);
+ if (PinsCount != 1)
+ {
+ DPRINT1("MMixerHandlePhysicalConnection Expected 1 pin but got %lu\n", PinsCount);
+ }
/* create destination line */
Status = MMixerBuildMixerDestinationLine(MixerContext, MixerInfo, MixerData->hDevice, Pins[0], bInput);
ExcludeFromSelect = WDMAUDIO_CopyFilesOnlyId\r
\r
[GenericMfg]\r
+;%WDM_KMIXER.DeviceDesc% = WDM_KMIXER, SW\{B7EAFDC0-A680-11D0-96D8-00AA0051E51D}\r
+;%WDM_SYSAUDIO.DeviceDesc% = WDM_SYSAUDIO, SW\{A7C7A5B0-5AF3-11D1-9CED-00A024BF0407}\r
%WDM_WDMAUD.DeviceDesc% = WDM_WDMAUD, SW\{CD171DE3-69E5-11D2-B56D-0000F8754380}\r
-%WDM_DRMKAUD.DeviceDesc% = WDM_DRMKAUD, SW\{EEC12DB6-AD9C-4168-8658-B03DAEF417FE}\r
+;%WDM_DRMKAUD.DeviceDesc% = WDM_DRMKAUD, SW\{EEC12DB6-AD9C-4168-8658-B03DAEF417FE}\r
+\r
%WDMAUDIO_CopyFilesOnlyId.DeviceDesc% = WDMAUDIO.CopyFilesOnly, WDMAUDIO_CopyFilesOnlyId\r
\r
[WDMAUDIO.CopyFilesOnly]\r
CopyFiles = WDM.CopyFiles\r
\r
[DeviceRegistration]\r
+; Kmixer swenum install\r
+;HKLM,%RunOnce%,"WDM_KMIXER0",,"rundll32.exe streamci.dll,StreamingDeviceSetup %WDM_KMIXER.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_MIXER%,%17%\WDMAUDIO.inf,WDM_KMIXER.Interface.Install"\r
+;HKLM,%RunOnce%,"WDM_KMIXER1",,"rundll32.exe streamci.dll,StreamingDeviceSetup %WDM_KMIXER.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_AUDIO%,%17%\WDMAUDIO.inf,WDM_KMIXER.Interface.Install"\r
+\r
+; Sysaudio swenum install\r
+;HKLM,%RunOnce%,"WDM_SYSAUDIO",,"rundll32.exe streamci.dll,StreamingDeviceSetup %WDM_SYSAUDIO.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_SYSAUDIO%,%17%\WDMAUDIO.inf,WDM_SYSAUDIO.Interface.Install"\r
+\r
; WDMAud install\r
HKLM,%RunOnce%,"WDM_WDMAUD",,"rundll32.exe streamci.dll,StreamingDeviceSetup %WDM_WDMAUD.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_WDMAUD%,%17%\WDMAUDIO.inf,WDM_WDMAUD.Interface.Install"\r
+\r
; DRMKAUD install\r
-HKLM,%RunOnce%,"WDM_DRMKAUD",,"rundll32.exe streamci,StreamingDeviceSetup %WDM_DRMKAUD.DeviceId%,%KSNAME_DRMKAUD%,%KSCATEGORY_DRM_DESCRAMBLE%,%17%\WDMAUDIO.inf,WDM_DRMKAUD.Interface.Install"\r
+;HKLM,%RunOnce%,"WDM_DRMKAUD",,"rundll32.exe streamci,StreamingDeviceSetup %WDM_DRMKAUD.DeviceId%,%KSNAME_DRMKAUD%,%KSCATEGORY_DRM_DESCRAMBLE%,%17%\WDMAUDIO.inf,WDM_DRMKAUD.Interface.Install"\r
+\r
+;--------------------------------------------------------------------------------\r
+; SysAudio Install\r
+[WDM_SYSAUDIO.Interface.Install]\r
+AddReg=WDM_SYSAUDIO.Interface.AddReg\r
+\r
+[WDM_SYSAUDIO.Interface.AddReg]\r
+HKR,,CLSID,,%Proxy.CLSID%\r
+HKR,,FriendlyName,,%WDM_SYSAUDIO.FriendlyName%\r
+\r
+[WDM_SYSAUDIO]\r
+CopyFiles = WDM_SYSAUDIO.CopyFiles\r
+\r
+\r
+[WDM_SYSAUDIO.CopyFiles]\r
+sysaudio.sys\r
+\r
+[WDM_SYSAUDIO.Services]\r
+AddService = sysaudio,0x00000002, sysaudio_Service_Inst\r
+\r
+[sysaudio_Service_Inst]\r
+DisplayName = %sysaudio.SvcDesc%\r
+ServiceType = 1 ; SERVICE_KERNEL_DRIVER\r
+StartType = 3 ; SERVICE_DEMAND_START\r
+ErrorControl = 1 ; SERVICE_ERROR_NORMAL\r
+ServiceBinary = %10%\system32\drivers\sysaudio.sys\r
+\r
+;--------------------------------------------------------------------------------\r
+; KMixer Install\r
+[WDM_KMIXER.Interface.Install]\r
+AddReg=WDM_KMIXER.Interface.AddReg\r
+\r
+[WDM_KMIXER.Interface.AddReg]\r
+HKR,,CLSID,,%Proxy.CLSID%\r
+HKR,,FriendlyName,,%WDM_KMIXER.FriendlyName%\r
\r
+[WDM_KMIXER]\r
+CopyFiles = WDM_KMIXER.CopyFiles\r
+\r
+[WDM_KMIXER.CopyFiles]\r
+kmixer.sys\r
+\r
+[WDM_KMIXER.Services]\r
+AddService = kmixer, 0x00000002, kmixer_Service_Inst\r
+\r
+[kmixer_Service_Inst]\r
+DisplayName = %kmixer.SvcDesc%\r
+ServiceType = 1 ; SERVICE_KERNEL_DRIVER\r
+StartType = 3 ; SERVICE_DEMAND_START\r
+ErrorControl = 1 ; SERVICE_ERROR_NORMAL\r
+ServiceBinary = %10%\system32\drivers\kmixer.sys\r
;--------------------------------------------------------------------------------\r
; WDMAUD Install\r
[WDM_WDMAUD.Interface.Install]\r
Proxy.CLSID = "{17CCA71B-ECD7-11D0-B908-00A0C9223196}"\r
KSNAME_Filter = "{9B365890-165F-11D0-A195-0020AFD156E4}"\r
KSNAME_DRMKAUD = "{ABD61E00-9350-47e2-A632-4438B90C6641}"\r
+WDM_SYSAUDIO.DeviceId = "{A7C7A5B0-5AF3-11D1-9CED-00A024BF0407}"\r
+KSCATEGORY_SYSAUDIO = "{A7C7A5B1-5AF3-11D1-9CED-00A024BF0407}"\r
WDM_DRMKAUD.DeviceId = "{EEC12DB6-AD9C-4168-8658-B03DAEF417FE}"\r
KSCATEGORY_DRM_DESCRAMBLE = "{FFBB6E3F-CCFE-4D84-90D9-421418B03A8E}"\r
KSCATEGORY_DATATRANSFORM = "{2EB07EA0-7E70-11D0-A5D6-28DB04C10000}"\r
\r
\r
;Localizable\r
+WDM_KMIXER.DeviceDesc = "ReactOS Wave Audio Mixer"\r
+WDM_KMIXER.FriendlyName = "ReactOS Wave Audio Mixer"\r
+kmixer.SvcDesc = "ReactOS Wave Audio Mixer"\r
+WDM_SYSAUDIO.DeviceDesc = "ReactOS System audio device"\r
+WDM_SYSAUDIO.FriendlyName = "ReactOS System audio device"\r
+sysaudio.SvcDesc = "ReactOS System audio device"\r
WDM_DRMKAUD.DeviceDesc = "ReactOS Trusted Audio Drivers"\r
WDM_DRMKAUD.FriendlyName = "ReactOS Trusted Audio Drivers"\r
drmkaud.SvcDesc = "ReactOS Trusted Audio Drivers"\r
&ObjectAttributes,
0,
NULL,
- REG_OPTION_NON_VOLATILE,
+ REG_OPTION_VOLATILE,
NULL);
ZwClose(ClassesKey);
if (!NT_SUCCESS(Status))
&ObjectAttributes,
0,
NULL,
- REG_OPTION_NON_VOLATILE,
+ REG_OPTION_VOLATILE,
NULL);
if (!NT_SUCCESS(Status))
{
- DPRINT1("Failed to open %wZ%wZ\\%wZ\n", &BaseKeyU, &GuidString, &SubKeyName);
+ DPRINT1("Failed to open %wZ%wZ\\%wZ Status %x\n", &BaseKeyU, &GuidString, &SubKeyName, Status);
goto cleanup;
}
&ObjectAttributes,
0,
NULL,
- REG_OPTION_NON_VOLATILE,
+ REG_OPTION_VOLATILE,
NULL);
if (!NT_SUCCESS(Status))
{
MaximumLength = LengthUsed + sizeof(WCHAR);
NewTargetPath = ExAllocatePoolWithTag(NonPagedPool,
MaximumLength,
- TAG_SYMLINK_TTARGET);
+ OB_NAME_TAG);
if (!NewTargetPath) return STATUS_INSUFFICIENT_RESOURCES;
}
else