[ros-diffs] [janderwald] 41738: - Register a device interface for each stream

janderwald at svn.reactos.org janderwald at svn.reactos.org
Thu Jul 2 09:58:07 CEST 2009


Author: janderwald
Date: Thu Jul  2 11:58:06 2009
New Revision: 41738

URL: http://svn.reactos.org/svn/reactos?rev=41738&view=rev
Log:
- Register a device interface for each stream

Modified:
    trunk/reactos/drivers/wdm/audio/legacy/stream/filter.c

Modified: trunk/reactos/drivers/wdm/audio/legacy/stream/filter.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/legacy/stream/filter.c?rev=41738&r1=41737&r2=41738&view=diff
==============================================================================
--- trunk/reactos/drivers/wdm/audio/legacy/stream/filter.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/legacy/stream/filter.c [iso-8859-1] Thu Jul  2 11:58:06 2009
@@ -90,6 +90,45 @@
     NULL,
     NULL
 };
+
+VOID
+RegisterDeviceInterfaces(
+    IN PSTREAM_DEVICE_EXTENSION DeviceExtension)
+{
+    ULONG Index;
+    PHW_STREAM_INFORMATION StreamInformation;
+    UNICODE_STRING SymbolicLink;
+    NTSTATUS Status;
+
+    /* Sanity check */
+    ASSERT(DeviceExtension->StreamDescriptor);
+    ASSERT(DeviceExtension->StreamDescriptorSize);
+
+    /* Loop all stream descriptors and register device interfaces */
+    StreamInformation = (PHW_STREAM_INFORMATION)&DeviceExtension->StreamDescriptor->StreamInfo;
+
+    for(Index = 0; DeviceExtension->StreamDescriptor->StreamHeader.NumberOfStreams; Index++)
+    {
+        if (StreamInformation->Category)
+        {
+            /* Register device interface */
+            Status = IoRegisterDeviceInterface(DeviceExtension->PhysicalDeviceObject,
+                                               StreamInformation->Category,
+                                               NULL, /* see bug 4566 */
+                                               &SymbolicLink);
+
+            if (NT_SUCCESS(Status))
+            {
+                /* Activate device interface */
+                IoSetDeviceInterfaceState(&SymbolicLink, TRUE);
+                /* Release Symbolic Link */
+                RtlFreeUnicodeString(&SymbolicLink);
+            }
+        }
+        StreamInformation = (PHW_STREAM_INFORMATION) (ULONG_PTR)StreamInformation + DeviceExtension->StreamDescriptor->StreamHeader.SizeOfHwStreamInformation;
+    }
+
+}
 
 NTSTATUS
 InitializeFilterWithKs(
@@ -189,6 +228,10 @@
 
     /* Increment total instance count */
     InterlockedIncrement(&DeviceExtension->InstanceCount);
+
+    /* Register device stream interfaces */
+    RegisterDeviceInterfaces(DeviceExtension);
+
     /* Return result */
     return Status;
 



More information about the Ros-diffs mailing list