Author: janderwald
Date: Sat Mar 7 18:01:03 2015
New Revision: 66600
URL:
http://svn.reactos.org/svn/reactos?rev=66600&view=rev
Log:
[KS]
- fix multiple bugs in software bus pnp enumerator
[INF]
- add wdmaud.sys as a client of the software bus pnp enumerator
Modified:
trunk/reactos/drivers/ksfilter/ks/swenum.c
trunk/reactos/media/inf/wdmaudio.inf
Modified: trunk/reactos/drivers/ksfilter/ks/swenum.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/swenum…
==============================================================================
--- trunk/reactos/drivers/ksfilter/ks/swenum.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/swenum.c [iso-8859-1] Sat Mar 7 18:01:03 2015
@@ -98,7 +98,7 @@
RtlInitUnicodeString(&ReferenceString, DeviceEntry->DeviceName);
/* register device interface */
- Status = IoRegisterDeviceInterface(BusDeviceExtension->PhysicalDeviceObject,
&BusInstanceEntry->InterfaceGuid, &ReferenceString,
&BusInstanceEntry->SymbolicLink);
+ Status = IoRegisterDeviceInterface(BusDeviceExtension->PhysicalDeviceObject,
&DeviceEntry->DeviceGuid, NULL, &BusInstanceEntry->SymbolicLink);
/* check for success */
if (!NT_SUCCESS(Status))
@@ -231,7 +231,7 @@
if (NT_SUCCESS(Status))
{
/* perform callback */
- Status = Callback(hNewKey, BusDeviceExtension, DeviceEntry, ReferenceString,
KeyInfo->Name);
+ Status = Callback(hNewKey, BusDeviceExtension, DeviceEntry, KeyInfo->Name,
ReferenceString);
/* should enumeration stop */
if (!NT_SUCCESS(Status))
@@ -272,6 +272,8 @@
/* check if the device is already present */
Entry = DeviceEntry->DeviceInterfaceList.Flink;
+ DPRINT1("KspCreateDeviceAssociation ReferenceString %S\n", ReferenceString);
+ DPRINT1("KspCreateDeviceAssociation InterfaceString %S\n", InterfaceString);
while(Entry != &DeviceEntry->DeviceInterfaceList)
{
@@ -325,8 +327,8 @@
IN PHANDLE hKey,
IN PBUS_ENUM_DEVICE_EXTENSION BusDeviceExtension,
IN PBUS_DEVICE_ENTRY DummyEntry,
- IN LPWSTR DeviceCategory,
- IN LPWSTR ReferenceString)
+ IN LPWSTR InterfaceId,
+ IN LPWSTR DeviceId)
{
LPWSTR DeviceName;
SIZE_T Length;
@@ -338,7 +340,7 @@
KIRQL OldLevel;
/* first construct device name & reference guid */
- Length = wcslen(DeviceCategory) + wcslen(ReferenceString);
+ Length = wcslen(DeviceId) + wcslen(InterfaceId);
/* append '&' and null byte */
Length += 2;
@@ -353,7 +355,9 @@
}
/* construct device name */
- swprintf(DeviceName, L"%s&%s", DeviceCategory, ReferenceString);
+ wcscpy(DeviceName, DeviceId);
+ wcscat(DeviceName, L"&");
+ wcscat(DeviceName, InterfaceId);
/* scan list and check if it is already present */
Entry = BusDeviceExtension->Common.Entry.Flink;
@@ -391,15 +395,15 @@
InitializeListHead(&DeviceEntry->IrpPendingList);
/* copy device guid */
- RtlInitUnicodeString(&String, DeviceCategory);
+ RtlInitUnicodeString(&String, DeviceId);
RtlGUIDFromString(&String, &DeviceEntry->DeviceGuid);
/* copy device names */
DeviceEntry->DeviceName = DeviceName;
- DeviceEntry->Instance = (DeviceName + wcslen(DeviceCategory) + 1);
+ DeviceEntry->Instance = (DeviceName + wcslen(DeviceId) + 1);
/* copy name */
- DeviceEntry->BusId = AllocateItem(NonPagedPool, (wcslen(DeviceCategory) + 1) *
sizeof(WCHAR));
+ DeviceEntry->BusId = AllocateItem(NonPagedPool, (wcslen(DeviceId) + 1) *
sizeof(WCHAR));
if (!DeviceEntry->BusId)
{
/* no memory */
@@ -407,11 +411,11 @@
FreeItem(DeviceEntry);
return STATUS_INSUFFICIENT_RESOURCES;
}
- wcscpy(DeviceEntry->BusId, DeviceCategory);
- }
-
- /* now enumerate the devices */
- Status = KspEnumerateBusRegistryKeys(hKey, ReferenceString,
KspCreateDeviceAssociation, BusDeviceExtension, DeviceEntry);
+ wcscpy(DeviceEntry->BusId, DeviceId);
+ }
+
+ /* now enumerate the interfaces */
+ Status = KspEnumerateBusRegistryKeys(hKey, InterfaceId, KspCreateDeviceAssociation,
BusDeviceExtension, DeviceEntry);
/* check if list is empty */
if (IsListEmpty(&DeviceEntry->DeviceInterfaceList))
@@ -466,7 +470,7 @@
IN LPWSTR DeviceCategory,
IN LPWSTR ReferenceString)
{
- return KspEnumerateBusRegistryKeys(hKey, ReferenceString, KspCreateDeviceReference,
BusDeviceExtension, DummyEntry);
+ return KspEnumerateBusRegistryKeys(hKey, DeviceCategory, KspCreateDeviceReference,
BusDeviceExtension, DummyEntry);
}
@@ -1015,35 +1019,36 @@
Status = ZwCreateKey(&hDeviceKey, GENERIC_WRITE, &ObjectAttributes,
0, NULL, 0, NULL);
if (NT_SUCCESS(Status))
{
- /* initialize reference string */
- RtlInitUnicodeString(&ReferenceString,
InstallInterface->ReferenceString);
-
- /* initialize object attributes */
- InitializeObjectAttributes(&ObjectAttributes, &ReferenceString,
OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, hDeviceKey, NULL);
-
- /* construct device key */
- Status = ZwCreateKey(&hReferenceKey, GENERIC_WRITE,
&ObjectAttributes, 0, NULL, 0, NULL);
+ /* convert interface guid to string */
+ Status = RtlStringFromGUID(&InstallInterface->InterfaceId,
&InterfaceString);
if (NT_SUCCESS(Status))
{
- /* convert interface guid to string */
- Status = RtlStringFromGUID(&InstallInterface->InterfaceId,
&InterfaceString);
+ /* initialize object attributes */
+ InitializeObjectAttributes(&ObjectAttributes,
&InterfaceString, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, hDeviceKey, NULL);
+
+ /* construct device key */
+ Status = ZwCreateKey(&hInterfaceKey, GENERIC_WRITE,
&ObjectAttributes, 0, NULL, 0, NULL);
if (NT_SUCCESS(Status))
{
+ /* initialize reference string */
+ RtlInitUnicodeString(&ReferenceString,
InstallInterface->ReferenceString);
+
/* initialize object attributes */
- InitializeObjectAttributes(&ObjectAttributes,
&InterfaceString, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, hReferenceKey, NULL);
+ InitializeObjectAttributes(&ObjectAttributes,
&ReferenceString, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, hInterfaceKey, NULL);
/* construct device key */
- Status = ZwCreateKey(&hInterfaceKey, GENERIC_WRITE,
&ObjectAttributes, 0, NULL, 0, NULL);
+ Status = ZwCreateKey(&hReferenceKey, GENERIC_WRITE,
&ObjectAttributes, 0, NULL, 0, NULL);
if (NT_SUCCESS(Status))
{
/* close key */
- ZwClose(hInterfaceKey);
+ ZwClose(hReferenceKey);
}
- /* free interface string */
- RtlFreeUnicodeString(&InterfaceString);
}
+ /* free interface string */
+ RtlFreeUnicodeString(&InterfaceString);
+
/* close reference key */
- ZwClose(hReferenceKey);
+ ZwClose(hInterfaceKey);
}
/* close device key */
ZwClose(hDeviceKey);
@@ -1123,14 +1128,18 @@
{
/* get device entry */
DeviceEntry = (PBUS_DEVICE_ENTRY)CONTAINING_RECORD(Entry, BUS_DEVICE_ENTRY,
Entry);
-
- if (IsEqualGUIDAligned(&DeviceEntry->DeviceGuid,
&InstallInterface->DeviceId) &&
- !wcsicmp(DeviceEntry->Instance, InstallInterface->ReferenceString))
+ if (IsEqualGUIDAligned(&DeviceEntry->DeviceGuid,
&InstallInterface->DeviceId))
{
if (!DeviceEntry->PDO)
{
+ /* release device entry lock */
+ KeReleaseSpinLock(&Context->BusDeviceExtension->Lock,
OldLevel);
+
/* create pdo */
Status = KspCreatePDO(Context->BusDeviceExtension, DeviceEntry,
&DeviceEntry->PDO);
+
+ /* acquire device entry lock */
+ KeAcquireSpinLock(&Context->BusDeviceExtension->Lock,
&OldLevel);
/* done */
break;
Modified: trunk/reactos/media/inf/wdmaudio.inf
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/inf/wdmaudio.inf?rev…
==============================================================================
--- trunk/reactos/media/inf/wdmaudio.inf [iso-8859-1] (original)
+++ trunk/reactos/media/inf/wdmaudio.inf [iso-8859-1] Sat Mar 7 18:01:03 2015
@@ -25,6 +25,7 @@
ExcludeFromSelect = WDMAUDIO_CopyFilesOnlyId
[GenericMfg]
+%WDM_WDMAUD.DeviceDesc% = WDM_WDMAUD, SW\{CD171DE3-69E5-11D2-B56D-0000F8754380}
%WDM_DRMKAUD.DeviceDesc% = WDM_DRMKAUD, SW\{EEC12DB6-AD9C-4168-8658-B03DAEF417FE}
%WDMAUDIO_CopyFilesOnlyId.DeviceDesc% = WDMAUDIO.CopyFilesOnly, WDMAUDIO_CopyFilesOnlyId
@@ -42,10 +43,38 @@
CopyFiles = WDM.CopyFiles
[DeviceRegistration]
-;; DRMKAUD swenum install
+; WDMAud install
+HKLM,%RunOnce%,"WDM_WDMAUD",,"rundll32.exe
streamci.dll,StreamingDeviceSetup
%WDM_WDMAUD.DeviceId%,%KSNAME_Filter%,%KSCATEGORY_WDMAUD%,%17%\WDMAUDIO.inf,WDM_WDMAUD.Interface.Install"
+; DRMKAUD install
HKLM,%RunOnce%,"WDM_DRMKAUD",,"rundll32.exe streamci,StreamingDeviceSetup
%WDM_DRMKAUD.DeviceId%,%KSNAME_DRMKAUD%,%KSCATEGORY_DRM_DESCRAMBLE%,%17%\WDMAUDIO.inf,WDM_DRMKAUD.Interface.Install"
-;; DRMKAUD Install
+;--------------------------------------------------------------------------------
+; WDMAUD Install
+[WDM_WDMAUD.Interface.Install]
+AddReg=WDM_WDMAUD.Interface.AddReg
+
+[WDM_WDMAUD.Interface.AddReg]
+HKR,,CLSID,,%Proxy.CLSID%
+HKR,,FriendlyName,,%WDM_WDMAUD.FriendlyName%
+
+[WDM_WDMAUD]
+CopyFiles = WDM_WDMAUD.CopyFiles
+
+[WDM_WDMAUD.CopyFiles]
+wdmaud.sys
+
+[WDM_WDMAUD.Services]
+AddService = wdmaud,0x00000002, wdmaud_Service_Inst
+
+[wdmaud_Service_Inst]
+DisplayName = %wdmaud.SvcDesc%
+ServiceType = 1 ; SERVICE_KERNEL_DRIVER
+StartType = 3 ; SERVICE_DEMAND_START
+ErrorControl = 1 ; SERVICE_ERROR_NORMAL
+ServiceBinary = %10%\system32\drivers\wdmaud.sys
+
+;--------------------------------------------------------------------------------
+; DRMKAUD Install
[WDM_DRMKAUD.Interface.Install]
AddReg=WDM_DRMKAUD.Interface.AddReg
@@ -80,6 +109,7 @@
WDM.CopyFiles = 10,system32\drivers ; %SystemRoot%\system32\drivers
WDM_DRMKAUD.CopyFiles = 10,system32\drivers
+;---------------------------------------------------------------------------------
[Strings]
;Non-localizable
ReactOS="ReactOS"
@@ -87,18 +117,26 @@
RunOnce = "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
Proxy.CLSID = "{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
+KSNAME_Filter = "{9B365890-165F-11D0-A195-0020AFD156E4}"
KSNAME_DRMKAUD = "{ABD61E00-9350-47e2-A632-4438B90C6641}"
WDM_DRMKAUD.DeviceId = "{EEC12DB6-AD9C-4168-8658-B03DAEF417FE}"
KSCATEGORY_DRM_DESCRAMBLE = "{FFBB6E3F-CCFE-4D84-90D9-421418B03A8E}"
KSCATEGORY_DATATRANSFORM = "{2EB07EA0-7E70-11D0-A5D6-28DB04C10000}"
KSCATEGORY_AUDIO = "{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
PKEY_AudioEngine_OEMFormat = "{E4870E26-3CC5-4CD2-BA46-CA0A9A70ED04},3"
+WDM_WDMAUD.DeviceId = "{CD171DE3-69E5-11D2-B56D-0000F8754380}"
+KSCATEGORY_WDMAUD = "{3E227E76-690D-11D2-8161-0000F8775BF1}"
+
;Localizable
WDM_DRMKAUD.DeviceDesc = "ReactOS Trusted Audio Drivers"
WDM_DRMKAUD.FriendlyName = "ReactOS Trusted Audio Drivers"
drmkaud.SvcDesc = "ReactOS Trusted Audio Drivers"
WDMAUDIO_CopyFilesOnlyId.DeviceDesc = "ReactOS WDM Audio Drivers"
+WDM_WDMAUD.DeviceDesc = "Driver for ReactOS WINMM-WDM-Audio"
+WDM_WDMAUD.FriendlyName = "Driver for ReactOS WINMM-WDM-Audio"
+wdmaud.SvcDesc = "Driver for ReactOS WINMM-WDM-Audio"
+
[Strings.0418]
WDM_DRMKAUD.DeviceDesc = "Module-pilot audio de încredere ale ReactOS"