[PORTCLS]
[reactos.git] / reactos / drivers / wdm / audio / backpln / portcls / port.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel Streaming
4 * FILE: drivers/wdm/audio/backpln/portcls/port.cpp
5 * PURPOSE: Port construction API
6 * PROGRAMMER: Johannes Anderwald
7 * Andrew Greenwood
8 */
9
10 #include "private.hpp"
11
12
13
14 NTSTATUS
15 NTAPI
16 PcNewPort(
17 OUT PPORT* OutPort,
18 IN REFCLSID ClassId)
19 {
20 NTSTATUS Status;
21 UNICODE_STRING GuidString;
22
23 DPRINT("PcNewPort entered\n");
24
25 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
26
27 if (!OutPort)
28 {
29 DPRINT("PcNewPort was supplied a NULL OutPort parameter\n");
30 return STATUS_INVALID_PARAMETER;
31 }
32
33 if (IsEqualGUIDAligned(ClassId, CLSID_PortMidi))
34 Status = NewPortDMus(OutPort);
35 else if (IsEqualGUIDAligned(ClassId, CLSID_PortDMus))
36 Status = NewPortDMus(OutPort);
37 else if (IsEqualGUIDAligned(ClassId, CLSID_PortTopology))
38 Status = NewPortTopology(OutPort);
39 else if (IsEqualGUIDAligned(ClassId, CLSID_PortWaveCyclic))
40 Status = NewPortWaveCyclic(OutPort);
41 else if (IsEqualGUIDAligned(ClassId, CLSID_PortWavePci))
42 Status = NewPortWavePci(OutPort);
43 else if (IsEqualGUIDAligned(ClassId, CLSID_PortWaveRT))
44 Status = NewPortWaveRT(OutPort);
45 else
46 {
47
48 if (RtlStringFromGUID(ClassId, &GuidString) == STATUS_SUCCESS)
49 {
50 DPRINT("unknown interface %S\n", GuidString.Buffer);
51 RtlFreeUnicodeString(&GuidString);
52 }
53
54 Status = STATUS_NOT_SUPPORTED;
55 return Status;
56 }
57 DPRINT("PcNewPort Status %lx\n", Status);
58
59 return Status;
60 }