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