ReactOS 0.4.15-dev-6054-gbddd8b0
filter_topology.cpp
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel Streaming
4 * FILE: drivers/wdm/audio/backpln/portcls/filter_topology.c
5 * PURPOSE: portcls topology filter
6 * PROGRAMMER: Johannes Anderwald
7 */
8
9#include "private.hpp"
10
11#ifndef YDEBUG
12#define NDEBUG
13#endif
14
15#include <debug.h>
16
17class CPortFilterTopology : public CUnknownImpl<IPortFilterTopology>
18{
19public:
21
25
26protected:
27 IPortTopology * m_Port;
29 ISubdevice * m_SubDevice;
30};
31
32
36 IN REFIID refiid,
38{
39
40 if (IsEqualGUIDAligned(refiid, IID_IIrpTarget) ||
42 {
43 *Output = PVOID(PUNKNOWN(this));
44 PUNKNOWN(*Output)->AddRef();
45 return STATUS_SUCCESS;
46 }
47 else if (IsEqualGUIDAligned(refiid, IID_IPort))
48 {
50 PUNKNOWN(*Output)->AddRef();
51 return STATUS_SUCCESS;
52 }
53
55}
56
59CPortFilterTopology::NewIrpTarget(
60 OUT struct IIrpTarget **OutTarget,
65 IN PIRP Irp,
66 IN KSOBJECT_CREATE *CreateObject)
67{
68 DPRINT("CPortFilterTopology::NewIrpTarget entered\n");
69
71}
72
73
76CPortFilterTopology::DeviceIoControl(
78 IN PIRP Irp)
79{
80 PIO_STACK_LOCATION IoStack;
82
84
85 if (IoStack->Parameters.DeviceIoControl.IoControlCode != IOCTL_KS_PROPERTY)
86 {
87 DPRINT("Unhandled function %lx Length %x\n", IoStack->Parameters.DeviceIoControl.IoControlCode, IoStack->Parameters.DeviceIoControl.InputBufferLength);
88
89 Irp->IoStatus.Status = STATUS_SUCCESS;
90
92 return STATUS_SUCCESS;
93 }
94
97 {
98 Irp->IoStatus.Status = Status;
99 DPRINT("Result %x Length %u\n", Status, Irp->IoStatus.Information);
101 }
102 return Status;
103
104}
105
107NTAPI
108CPortFilterTopology::Read(
110 IN PIRP Irp)
111{
113}
114
116NTAPI
117CPortFilterTopology::Write(
119 IN PIRP Irp)
120{
122}
123
125NTAPI
126CPortFilterTopology::Flush(
128 IN PIRP Irp)
129{
131}
132
134NTAPI
135CPortFilterTopology::Close(
137 IN PIRP Irp)
138{
140
141 // FIXME handle DirectSound
142
143#if 0
144//FIXME
145 if (m_ref == 1)
146 {
147 // release reference to port
148 This->SubDevice->lpVtbl->Release(This->SubDevice);
149
150 // time to shutdown the audio system
151 Status = This->SubDevice->lpVtbl->ReleaseChildren(This->SubDevice);
152 }
153#endif
154
155 Irp->IoStatus.Status = Status;
156 Irp->IoStatus.Information = 0;
158
159 return STATUS_SUCCESS;
160}
161
163NTAPI
164CPortFilterTopology::QuerySecurity(
166 IN PIRP Irp)
167{
169}
170
172NTAPI
173CPortFilterTopology::SetSecurity(
175 IN PIRP Irp)
176{
178}
179
181NTAPI
182CPortFilterTopology::FastDeviceIoControl(
190 OUT PIO_STATUS_BLOCK StatusBlock,
192{
193 return FALSE;
194}
195
197NTAPI
198CPortFilterTopology::FastRead(
205 OUT PIO_STATUS_BLOCK StatusBlock,
207{
208 return FALSE;
209}
210
212NTAPI
213CPortFilterTopology::FastWrite(
220 OUT PIO_STATUS_BLOCK StatusBlock,
222{
223 return FALSE;
224}
225
227NTAPI
228CPortFilterTopology::Init(
229 IN IPortTopology* Port)
230{
231 ISubdevice * ISubDevice;
234
235
236 // get our private interface
237 Status = Port->QueryInterface(IID_ISubdevice, (PVOID*)&ISubDevice);
238 if (!NT_SUCCESS(Status))
239 return STATUS_UNSUCCESSFUL;
240
241 // get the subdevice descriptor
242 Status = ISubDevice->GetDescriptor(&Descriptor);
243
244 // store subdevice interface
245 m_SubDevice = ISubDevice;
246
247 if (!NT_SUCCESS(Status))
248 return STATUS_UNSUCCESSFUL;
249
250 // save descriptor
252
253 // store port object
254 m_Port = Port;
255
256 return STATUS_SUCCESS;
257}
258
261 OUT IPortFilterTopology ** OutFilter)
262{
264
266 if (!This)
268
269 This->AddRef();
270
271 // return result
272 *OutFilter = (CPortFilterTopology*)This;
273
274 return STATUS_SUCCESS;
275}
unsigned char BOOLEAN
LONG NTSTATUS
Definition: precomp.h:26
#define STDMETHODIMP
Definition: basetyps.h:43
const GUID IID_IUnknown
_In_ PFCB _In_ LONGLONG FileOffset
Definition: cdprocs.h:160
Definition: bufpool.h:45
virtual ~CPortFilterTopology()
CPortFilterTopology(IUnknown *OuterUnknown)
SUBDEVICE_DESCRIPTOR * m_Descriptor
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
ISubdevice * m_SubDevice
IPortTopology * m_Port
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
_In_ PIRP Irp
Definition: csq.h:116
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
Definition: irp.c:1168
#define NonPagedPool
Definition: env_spec_w32.h:307
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG LockKey
Definition: fatprocs.h:2665
NTSTATUS NewPortFilterTopology(OUT IPortFilterTopology **OutFilter)
Status
Definition: gdiplustypes.h:25
CPPORT Port[4]
Definition: headless.c:35
@ Unknown
Definition: i8042prt.h:114
ULONG AddRef()
#define IOCTL_KS_PROPERTY
Definition: ks.h:127
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
#define IoCompleteRequest
Definition: irp.c:1240
#define STATUS_PENDING
Definition: ntstatus.h:82
#define STATUS_NOT_SUPPORTED
Definition: ntstatus.h:423
#define TAG_PORTCLASS
Definition: private.hpp:24
NTSTATUS NTAPI PcHandlePropertyWithTable(IN PIRP Irp, IN ULONG PropertySetCount, IN PKSPROPERTY_SET PropertySet, IN PSUBDEVICE_DESCRIPTOR Descriptor)
Definition: undoc.cpp:81
#define REFIID
Definition: guiddef.h:118
@ Output
Definition: arc.h:85
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:71
PKSPROPERTY_SET FilterPropertySet
Definition: interfaces.hpp:210
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:3128
const uint16_t * PCWSTR
Definition: typedefs.h:57
INT POOL_TYPE
Definition: typedefs.h:78
#define NTAPI
Definition: typedefs.h:36
void * PVOID
Definition: typedefs.h:50
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2055
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
Definition: wdfdevice.h:3815
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
Definition: wdfdevice.h:550
_In_ WDFDPC _In_ BOOLEAN Wait
Definition: wdfdpc.h:170
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
Definition: wdfio.h:325
_In_ WDFREQUEST _In_ size_t OutputBufferLength
Definition: wdfio.h:320
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
Definition: wdfio.h:322
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
Definition: wdfiotarget.h:863
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
Definition: wdfiotarget.h:953
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:235
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2793
#define IO_NO_INCREMENT
Definition: iotypes.h:598
* PFILE_OBJECT
Definition: iotypes.h:1998