1#pragma once
2
3#if (NTDDI_VERSION >= NTDDI_WINXP)
4
5#if defined(__cplusplus)
6extern "C" {
7#endif
8
9#define STDMETHODCALLTYPE __stdcall
10
11#ifndef _WDMDDK_
12typedef GUID *PGUID;
13#endif
14
15/* Types */
16
17typedef ULONG BDA_TOPOLOGY_JOINT, *PBDA_TOPOLOGY_JOINT;
18
19typedef struct _BDA_PIN_PAIRING {
20  ULONG ulInputPin;
21  ULONG ulOutputPin;
22  ULONG ulcMaxInputsPerOutput;
23  ULONG ulcMinInputsPerOutput;
24  ULONG ulcMaxOutputsPerInput;
25  ULONG ulcMinOutputsPerInput;
26  ULONG ulcTopologyJoints;
27  const ULONG *pTopologyJoints;
28} BDA_PIN_PAIRING, *PBDA_PIN_PAIRING;
29
30typedef struct _BDA_FILTER_TEMPLATE {
31  const KSFILTER_DESCRIPTOR *pFilterDescriptor;
32  ULONG ulcPinPairs;
33  const BDA_PIN_PAIRING *pPinPairs;
34} BDA_FILTER_TEMPLATE, *PBDA_FILTER_TEMPLATE;
35
36typedef struct _KSM_PIN_PAIR {
37  KSMETHOD Method;
38  ULONG InputPinId;
39  ULONG OutputPinId;
40  ULONG Reserved;
41} KSM_PIN_PAIR, * PKSM_PIN_PAIR;
42
43typedef struct _KSM_PIN {
44  KSMETHOD Method;
45  __GNU_EXTENSION union {
46    ULONG PinId;
47    ULONG PinType;
48  };
49  ULONG Reserved;
50} KSM_PIN, * PKSM_PIN;
51
52/* Functions */
53
54STDMETHODIMP_(NTSTATUS)
55BdaCheckChanges(
56  IN PIRP Irp);
57
58STDMETHODIMP_(NTSTATUS)
59BdaCommitChanges(
60  IN PIRP Irp);
61
62STDMETHODIMP_(NTSTATUS)
63BdaCreateFilterFactory(
64  IN PKSDEVICE pKSDevice,
65  IN const KSFILTER_DESCRIPTOR *pFilterDescriptor,
66  IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate);
67
68STDMETHODIMP_(NTSTATUS)
69BdaCreateFilterFactoryEx(
70  IN PKSDEVICE pKSDevice,
71  IN const KSFILTER_DESCRIPTOR *pFilterDescriptor,
72  IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate,
73  OUT PKSFILTERFACTORY  *ppKSFilterFactory);
74
75STDMETHODIMP_(NTSTATUS)
76BdaCreatePin(
77  IN PKSFILTER pKSFilter,
78  IN ULONG ulPinType,
79  OUT ULONG *pulPinId);
80
81STDMETHODIMP_(NTSTATUS)
82BdaCreateTopology(
83  IN PKSFILTER pKSFilter,
84  IN ULONG InputPinId,
85  IN ULONG OutputPinId);
86
87STDMETHODIMP_(NTSTATUS)
88BdaDeletePin(
89  IN PKSFILTER pKSFilter,
90  IN ULONG *pulPinId);
91
92STDMETHODIMP_(NTSTATUS)
93BdaFilterFactoryUpdateCacheData(
94  IN PKSFILTERFACTORY pFilterFactory,
95  IN const KSFILTER_DESCRIPTOR *pFilterDescriptor OPTIONAL);
96
97STDMETHODIMP_(NTSTATUS)
98BdaGetChangeState(
99  IN PIRP Irp,
100  OUT BDA_CHANGE_STATE *pChangeState);
101
102STDMETHODIMP_(NTSTATUS)
103BdaInitFilter(
104  IN PKSFILTER pKSFilter,
105  IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate);
106
107STDMETHODIMP_(NTSTATUS)
108BdaMethodCreatePin(
109  IN PIRP Irp,
110  IN KSMETHOD *pKSMethod,
111  OUT ULONG *pulPinFactoryID);
112
113STDMETHODIMP_(NTSTATUS)
114BdaMethodCreateTopology(
115  IN PIRP Irp,
116  IN KSMETHOD *pKSMethod,
117  OPTIONAL PVOID pvIgnored);
118
119STDMETHODIMP_(NTSTATUS)
120BdaMethodDeletePin(
121  IN PIRP Irp,
122  IN KSMETHOD *pKSMethod,
123  OPTIONAL PVOID pvIgnored);
124
125STDMETHODIMP_(NTSTATUS)
126BdaPropertyGetControllingPinId(
127  IN PIRP Irp,
128  IN KSP_BDA_NODE_PIN *pProperty,
129  OUT ULONG *pulControllingPinId);
130
131STDMETHODIMP_(NTSTATUS)
132BdaPropertyGetPinControl(
133  IN PIRP Irp,
134  IN KSPROPERTY *pKSProperty,
135  OUT ULONG *pulProperty);
136
137STDMETHODIMP_(NTSTATUS)
138BdaPropertyNodeDescriptors(
139  IN PIRP Irp,
140  IN KSPROPERTY *pKSProperty,
141  OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty);
142
143STDMETHODIMP_(NTSTATUS)
144BdaPropertyNodeEvents(
145  IN PIRP Irp,
146  IN KSP_NODE *pKSProperty,
147  OUT GUID *pguidProperty);
148
149STDMETHODIMP_(NTSTATUS)
150BdaPropertyNodeMethods(
151  IN PIRP Irp,
152  IN KSP_NODE *pKSProperty,
153  OUT GUID *pguidProperty);
154
155STDMETHODIMP_(NTSTATUS)
156BdaPropertyNodeProperties(
157  IN PIRP Irp,
158  IN KSP_NODE *pKSProperty,
159  OUT GUID *pguidProperty);
160
161STDMETHODIMP_(NTSTATUS)
162BdaPropertyNodeTypes(
163  IN PIRP Irp,
164  IN KSPROPERTY *pKSProperty,
165  OUT ULONG *pulProperty);
166
167STDMETHODIMP_(NTSTATUS)
168BdaPropertyPinTypes(
169  IN PIRP Irp,
170  IN KSPROPERTY *pKSProperty,
171  OUT ULONG *pulProperty);
172
173STDMETHODIMP_(NTSTATUS)
174BdaPropertyTemplateConnections(
175  IN PIRP Irp,
176  IN KSPROPERTY *pKSProperty,
177  OUT KSTOPOLOGY_CONNECTION *pConnectionProperty);
178
179STDMETHODIMP_(NTSTATUS)
180BdaStartChanges(
181  IN PIRP Irp);
182
183STDMETHODIMP_(NTSTATUS)
184BdaUninitFilter(
185  IN PKSFILTER pKSFilter);
186
187STDMETHODIMP_(NTSTATUS)
188BdaValidateNodeProperty(
189  IN PIRP Irp,
190  IN KSPROPERTY *pKSProperty);
191
192#if defined(__cplusplus)
193}
194#endif
195
196#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
197