ReactOS  0.4.14-dev-114-gc8cbd56
bdasup.c File Reference
#include "precomp.h"
Include dependency graph for bdasup.c:

Go to the source code of this file.

Functions

PVOID AllocateItem (IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
 
VOID FreeItem (IN PVOID Item)
 
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry (IN PKSFILTERFACTORY FilterFactory)
 
NTSTATUS NTAPI DllInitialize (PUNICODE_STRING RegistryPath)
 
NTSTATUS NTAPI BdaCheckChanges (IN PIRP Irp)
 
NTSTATUS NTAPI BdaCommitChanges (IN PIRP Irp)
 
NTSTATUS NTAPI BdaCreateFilterFactory (IN PKSDEVICE pKSDevice, IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate)
 
VOID NTAPI FreeFilterInstance (IN PVOID Context)
 
NTSTATUS NTAPI BdaCreateFilterFactoryEx (IN PKSDEVICE pKSDevice, IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, IN const BDA_FILTER_TEMPLATE *BdaFilterTemplate, OUT PKSFILTERFACTORY *ppKSFilterFactory)
 
NTSTATUS NTAPI BdaCreatePin (IN PKSFILTER pKSFilter, IN ULONG ulPinType, OUT ULONG *pulPinId)
 
NTSTATUS NTAPI BdaMethodCreatePin (IN PIRP Irp, IN KSMETHOD *pKSMethod, OUT ULONG *pulPinFactoryID)
 
NTSTATUS NTAPI BdaInitFilter (IN PKSFILTER pKSFilter, IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate)
 
NTSTATUS NTAPI BdaCreateTopology (IN PKSFILTER pKSFilter, IN ULONG InputPinId, IN ULONG OutputPinId)
 
NTSTATUS NTAPI BdaDeletePin (IN PKSFILTER pKSFilter, IN ULONG *pulPinId)
 
NTSTATUS NTAPI BdaFilterFactoryUpdateCacheData (IN PKSFILTERFACTORY FilterFactory, IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL)
 
NTSTATUS NTAPI BdaGetChangeState (IN PIRP Irp, OUT BDA_CHANGE_STATE *ChangeState)
 
NTSTATUS NTAPI BdaMethodCreateTopology (IN PIRP Irp, IN KSMETHOD *pKSMethod, OPTIONAL PVOID pvIgnored)
 
NTSTATUS NTAPI BdaMethodDeletePin (IN PIRP Irp, IN KSMETHOD *pKSMethod, OPTIONAL PVOID pvIgnored)
 
NTSTATUS NTAPI BdaPropertyGetControllingPinId (IN PIRP Irp, IN KSP_BDA_NODE_PIN *pProperty, OUT ULONG *pulControllingPinId)
 
NTSTATUS NTAPI BdaPropertyGetPinControl (IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
 
NTSTATUS NTAPI BdaPropertyNodeDescriptors (IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty)
 
NTSTATUS NTAPI BdaPropertyNodeEvents (IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
 
NTSTATUS NTAPI BdaPropertyNodeMethods (IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
 
NTSTATUS NTAPI BdaPropertyNodeProperties (IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
 
NTSTATUS NTAPI BdaPropertyNodeTypes (IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
 
NTSTATUS NTAPI BdaPropertyPinTypes (IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
 
NTSTATUS NTAPI BdaPropertyTemplateConnections (IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT KSTOPOLOGY_CONNECTION *pConnectionProperty)
 
NTSTATUS NTAPI BdaStartChanges (IN PIRP Irp)
 
NTSTATUS NTAPI BdaUninitFilter (IN PKSFILTER pKSFilter)
 
NTSTATUS NTAPI BdaValidateNodeProperty (IN PIRP Irp, IN KSPROPERTY *KSProperty)
 

Variables

const GUID KSPROPSETID_BdaPinControl = {0xded49d5, 0xa8b7, 0x4d5d, {0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d}}
 
const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}}
 
const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}}
 
BDA_GLOBAL g_Settings
 
KSPROPERTY_ITEM FilterPropertyItem []
 
KSPROPERTY_SET FilterPropertySet
 
KSMETHOD_ITEM FilterMethodItem []
 
KSMETHOD_SET FilterMethodSet
 
KSAUTOMATION_TABLE FilterAutomationTable
 
KSPROPERTY_ITEM PinPropertyItem []
 
KSPROPERTY_SET PinPropertySet
 
KSAUTOMATION_TABLE PinAutomationTable
 

Function Documentation

◆ AllocateItem()

PVOID AllocateItem ( IN POOL_TYPE  PoolType,
IN SIZE_T  NumberOfBytes 
)

Definition at line 95 of file bdasup.c.

98 {
100  if (!Item)
101  return Item;
102 
104  return Item;
105 }
#define ExAllocatePool(type, size)
Definition: fbtusb.h:44
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER NumberOfBytes
Definition: iotypes.h:998
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE _In_ SIZE_T _In_ POOL_TYPE PoolType
Definition: fltkernel.h:1444

Referenced by BdaCreateFilterFactoryEx(), and BdaCreatePin().

◆ BdaCheckChanges()

NTSTATUS NTAPI BdaCheckChanges ( IN PIRP  Irp)

Definition at line 174 of file bdasup.c.

175 {
176  DPRINT("BdaCheckChanges\n");
177 
178  if (!Irp)
180 
181  return STATUS_SUCCESS;
182 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
void DPRINT(...)
Definition: polytest.cpp:61
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaCommitChanges()

NTSTATUS NTAPI BdaCommitChanges ( IN PIRP  Irp)

Definition at line 189 of file bdasup.c.

190 {
191  DPRINT("BdaCommitChanges\n");
192 
193  if (!Irp)
195 
196  return STATUS_SUCCESS;
197 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
void DPRINT(...)
Definition: polytest.cpp:61
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaCreateFilterFactory()

NTSTATUS NTAPI BdaCreateFilterFactory ( IN PKSDEVICE  pKSDevice,
IN const KSFILTER_DESCRIPTOR *  pFilterDescriptor,
IN const BDA_FILTER_TEMPLATE pBdaFilterTemplate 
)

Definition at line 204 of file bdasup.c.

208 {
210 }
smooth NULL
Definition: ftsmooth.c:416
NTSTATUS NTAPI BdaCreateFilterFactoryEx(IN PKSDEVICE pKSDevice, IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, IN const BDA_FILTER_TEMPLATE *BdaFilterTemplate, OUT PKSFILTERFACTORY *ppKSFilterFactory)
Definition: bdasup.c:254
_Must_inspect_result_ _In_ const KSFILTER_DESCRIPTOR _In_ const BDA_FILTER_TEMPLATE * pBdaFilterTemplate
Definition: bdasup.h:71
_Must_inspect_result_ _In_ const KSFILTER_DESCRIPTOR * pFilterDescriptor
Definition: bdasup.h:71

◆ BdaCreateFilterFactoryEx()

NTSTATUS NTAPI BdaCreateFilterFactoryEx ( IN PKSDEVICE  pKSDevice,
IN const KSFILTER_DESCRIPTOR *  pFilterDescriptor,
IN const BDA_FILTER_TEMPLATE BdaFilterTemplate,
OUT PKSFILTERFACTORY *  ppKSFilterFactory 
)

Definition at line 254 of file bdasup.c.

259 {
260  PKSFILTERFACTORY FilterFactory;
261  PBDA_FILTER_INSTANCE_ENTRY FilterInstance;
262  KIRQL OldLevel;
264  PKSFILTER_DESCRIPTOR FilterDescriptor;
265 
266  DPRINT("BdaCreateFilterFactoryEx\n");
267 
268  FilterDescriptor = AllocateItem(NonPagedPool, sizeof(KSFILTER_DESCRIPTOR));
269  if (!FilterDescriptor)
270  {
271  /* no memory */
273  }
274 
275  /* copy filter descriptor template */
276  RtlMoveMemory(FilterDescriptor, pFilterDescriptor, sizeof(KSFILTER_DESCRIPTOR));
277 
278  /* erase pin / nodes / connections from filter descriptor */
279  FilterDescriptor->PinDescriptorsCount = 0;
280  FilterDescriptor->PinDescriptors = NULL;
281  FilterDescriptor->NodeDescriptorsCount = 0;
282  FilterDescriptor->NodeDescriptors = NULL;
283  FilterDescriptor->ConnectionsCount = 0;
284  FilterDescriptor->Connections = NULL;
285 
286  /* merge the automation tables */
287  Status = KsMergeAutomationTables((PKSAUTOMATION_TABLE*)&FilterDescriptor->AutomationTable, (PKSAUTOMATION_TABLE)pFilterDescriptor->AutomationTable, &FilterAutomationTable, NULL);
288 
289  /* check for success */
290  if (!NT_SUCCESS(Status))
291  {
292  DPRINT1("KsMergeAutomationTables failed with %lx\n", Status);
294  return Status;
295  }
296 
297  /* allocate filter instance */
298  FilterInstance = AllocateItem(NonPagedPool, sizeof(BDA_FILTER_INSTANCE_ENTRY));
299  if (!FilterInstance)
300  {
301  /* not enough memory */
304  }
305 
306  /* create the filter factory */
307  Status = KsCreateFilterFactory(pKSDevice->FunctionalDeviceObject, FilterDescriptor, NULL, NULL, 0, NULL, NULL, &FilterFactory);
308 
309  /* check for success */
310  if (NT_SUCCESS(Status))
311  {
312  if (FilterDescriptor->AutomationTable != &FilterAutomationTable)
313  {
314  /* add the item to filter object bag */
315  KsAddItemToObjectBag(FilterFactory->Bag, (PVOID)FilterDescriptor->AutomationTable, FreeFilterInstance);
316  }
317  else
318  {
319  /* make sure the automation table is not-read only */
320  Status = _KsEdit(FilterFactory->Bag, (PVOID*)&FilterDescriptor->AutomationTable, sizeof(KSAUTOMATION_TABLE), sizeof(KSAUTOMATION_TABLE), 0);
321 
322  /* sanity check */
324 
325  /* add to object bag */
326  KsAddItemToObjectBag(FilterFactory->Bag, (PVOID)FilterDescriptor->AutomationTable, FreeFilterInstance);
327  }
328 
329  /* initialize filter instance entry */
330  FilterInstance->FilterFactoryInstance = FilterFactory;
331  FilterInstance->FilterTemplate = (BDA_FILTER_TEMPLATE *)BdaFilterTemplate;
332 
333  /* acquire list lock */
335 
336  /* insert factory at the end */
338 
339  /* release spin lock */
341 
342 
343  if (ppKSFilterFactory)
344  {
345  /* store result */
346  *ppKSFilterFactory = FilterFactory;
347  }
348  }
349  else
350  {
351  /* failed to create filter factory */
352  FreeItem(FilterInstance);
354  }
355 
356  /* done */
357  DPRINT("BdaCreateFilterFactoryEx Status %x\n", Status);
358  return Status;
359 }
const KSFILTER_DESCRIPTOR FilterDescriptor
Definition: splitter.c:229
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
NTSTATUS NTAPI KsAddItemToObjectBag(IN KSOBJECT_BAG ObjectBag, IN PVOID Item, IN PFNKSFREE Free OPTIONAL)
Definition: bag.c:86
NTSTATUS NTAPI KsMergeAutomationTables(OUT PKSAUTOMATION_TABLE *AutomationTableAB, IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL, IN KSOBJECT_BAG Bag OPTIONAL)
Definition: api.c:2303
LONG NTSTATUS
Definition: precomp.h:26
KSDDKAPI NTSTATUS NTAPI _KsEdit(IN KSOBJECT_BAG ObjectBag, IN OUT PVOID *PointerToPointerToItem, IN ULONG NewSize, IN ULONG OldSize, IN ULONG Tag)
Definition: bag.c:358
LIST_ENTRY Entry
Definition: precomp.h:19
#define InsertTailList(ListHead, Entry)
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:263
Definition: precomp.h:17
UCHAR KIRQL
Definition: env_spec_w32.h:591
VOID FreeItem(IN PVOID Item)
Definition: bdasup.c:108
smooth NULL
Definition: ftsmooth.c:416
void DPRINT(...)
Definition: polytest.cpp:61
KSAUTOMATION_TABLE FilterAutomationTable
Definition: bdasup.c:52
_Must_inspect_result_ _In_ const KSFILTER_DESCRIPTOR _In_ const BDA_FILTER_TEMPLATE _Out_opt_ PKSFILTERFACTORY * ppKSFilterFactory
Definition: bdasup.h:79
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
BDA_GLOBAL g_Settings
Definition: bdasup.c:8
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory(IN PDEVICE_OBJECT DeviceObject, IN const KSFILTER_DESCRIPTOR *Descriptor, IN PWSTR RefString OPTIONAL, IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, IN ULONG CreateItemFlags, IN PFNKSFILTERFACTORYPOWER SleepCallback OPTIONAL, IN PFNKSFILTERFACTORYPOWER WakeCallback OPTIONAL, OUT PKSFILTERFACTORY *FilterFactory OPTIONAL)
KSPIN_LOCK FilterFactoryInstanceListLock
Definition: precomp.h:27
LIST_ENTRY FilterFactoryInstanceList
Definition: precomp.h:28
PBDA_FILTER_TEMPLATE FilterTemplate
Definition: precomp.h:21
Status
Definition: gdiplustypes.h:24
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
Definition: bdasup.c:95
VOID NTAPI FreeFilterInstance(IN PVOID Context)
Definition: bdasup.c:214
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
#define DPRINT1
Definition: precomp.h:8
_Must_inspect_result_ _In_ const KSFILTER_DESCRIPTOR * pFilterDescriptor
Definition: bdasup.h:71
PKSFILTERFACTORY FilterFactoryInstance
Definition: precomp.h:20
return STATUS_SUCCESS
Definition: btrfs.c:2966

Referenced by BdaCreateFilterFactory().

◆ BdaCreatePin()

NTSTATUS NTAPI BdaCreatePin ( IN PKSFILTER  pKSFilter,
IN ULONG  ulPinType,
OUT ULONG pulPinId 
)

Definition at line 366 of file bdasup.c.

370 {
371  PKSPIN_DESCRIPTOR_EX PinDescriptor;
372  PKSFILTERFACTORY FilterFactory;
373  PBDA_FILTER_INSTANCE_ENTRY InstanceEntry;
375  ULONG PinId;
376  PKSPIN_DESCRIPTOR_EX NewPinDescriptor;
377 
378  DPRINT("BdaCreatePin\n");
379 
380  if (!pulPinId || !pKSFilter)
382 
383  /* get parent filter factory */
384  FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
385 
386  /* sanity check */
387  ASSERT(FilterFactory);
388 
389  /* find instance entry */
390  InstanceEntry = GetFilterInstanceEntry(FilterFactory);
391 
392  if (!InstanceEntry)
393  {
394  /* the filter was not initialized with BDA */
395  return STATUS_NOT_FOUND;
396  }
397 
398  /* sanity checks */
399  ASSERT(InstanceEntry->FilterTemplate);
400  ASSERT(InstanceEntry->FilterTemplate->pFilterDescriptor);
401 
402  /* does the filter support any pins */
403  if (!InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount)
404  {
405  /* no pins supported */
406  DPRINT("BdaCreatePin NoPins supported\n");
407  return STATUS_UNSUCCESSFUL;
408  }
409 
410  /* is pin factory still existing */
411  if (InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount <= ulPinType)
412  {
413  /* pin request is out of bounds */
414  DPRINT("BdaCreatePin ulPinType %lu >= PinDescriptorCount %lu\n", ulPinType, InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount);
416  }
417 
418  /* FIXME custom pin descriptors */
419  ASSERT(InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorSize == sizeof(KSPIN_DESCRIPTOR_EX));
420 
421  /* get pin descriptor */
422  PinDescriptor = (PKSPIN_DESCRIPTOR_EX)&InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptors[ulPinType];
423 
424  /* allocate pin descriptor */
425  NewPinDescriptor = AllocateItem(NonPagedPool, sizeof(KSPIN_DESCRIPTOR_EX));
426  if (!NewPinDescriptor)
427  {
428  /* no memory */
429  DPRINT("BdaCreatePin OutOfMemory\n");
431  }
432 
433  /* make a copy of the pin descriptor */
434  RtlMoveMemory(NewPinDescriptor, PinDescriptor, sizeof(KSPIN_DESCRIPTOR_EX));
435 
436  /* merge the automation tables */
437  Status = KsMergeAutomationTables((PKSAUTOMATION_TABLE*)&NewPinDescriptor->AutomationTable, (PKSAUTOMATION_TABLE)PinDescriptor->AutomationTable, &PinAutomationTable, pKSFilter->Bag);
438 
439  /* check for success */
440  if (NT_SUCCESS(Status))
441  {
442  /* create the pin factory */
443  Status = KsFilterCreatePinFactory(pKSFilter, NewPinDescriptor, &PinId);
444 
445  /* check for success */
446  if (NT_SUCCESS(Status))
447  {
448  /* store result */
449  *pulPinId = PinId;
450  }
451  }
452 
453 
454  DPRINT("BdaCreatePin Result %x PinId %u\n", Status, PinId);
455  return Status;
456 }
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
NTSTATUS NTAPI KsMergeAutomationTables(OUT PKSAUTOMATION_TABLE *AutomationTableAB, IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL, IN KSOBJECT_BAG Bag OPTIONAL)
Definition: api.c:2303
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
LONG NTSTATUS
Definition: precomp.h:26
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry(IN PKSFILTERFACTORY FilterFactory)
Definition: bdasup.c:116
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:263
Definition: precomp.h:17
_Must_inspect_result_ _In_ ULONG ulPinType
Definition: bdasup.h:88
_Must_inspect_result_ _In_ ULONG _Out_opt_ ULONG * pulPinId
Definition: bdasup.h:88
void DPRINT(...)
Definition: polytest.cpp:61
KSAUTOMATION_TABLE PinAutomationTable
Definition: bdasup.c:80
#define STATUS_NOT_FOUND
Definition: shellext.h:67
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
PBDA_FILTER_TEMPLATE FilterTemplate
Definition: precomp.h:21
Status
Definition: gdiplustypes.h:24
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
Definition: bdasup.c:95
KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory(IN PKSFILTER Filter, IN const KSPIN_DESCRIPTOR_EX *const InPinDescriptor, OUT PULONG PinID)
Definition: filter.c:1956
const KSFILTER_DESCRIPTOR * pFilterDescriptor
Definition: bdasup.h:31
unsigned int ULONG
Definition: retypes.h:1

Referenced by BdaInitFilter(), and BdaMethodCreatePin().

◆ BdaCreateTopology()

NTSTATUS NTAPI BdaCreateTopology ( IN PKSFILTER  pKSFilter,
IN ULONG  InputPinId,
IN ULONG  OutputPinId 
)

Definition at line 553 of file bdasup.c.

557 {
558  PBDA_FILTER_INSTANCE_ENTRY InstanceEntry;
559  PKSFILTERFACTORY FilterFactory;
560  KSTOPOLOGY_CONNECTION Connection;
561 
562  DPRINT("BdaCreateTopology\n");
563 
564  /* check input parameters */
565  if (!pKSFilter)
567 
568  /* get parent filter factory */
569  FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
570 
571  /* sanity check */
572  ASSERT(FilterFactory);
573 
574  /* find instance entry */
575  InstanceEntry = GetFilterInstanceEntry(FilterFactory);
576 
577  if (!InstanceEntry)
578  {
579  /* the filter was not initialized with BDA */
580  return STATUS_NOT_FOUND;
581  }
582 
583  if (InputPinId >= InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount ||
584  OutputPinId >= InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount)
585  {
586  /* invalid pin id */
588  }
589 
590  /* initialize topology connection */
591  Connection.FromNode = KSFILTER_NODE;
592  Connection.ToNode = KSFILTER_NODE;
593  Connection.FromNodePin = InputPinId;
594  Connection.ToNodePin = OutputPinId;
595 
596  /* add the connection */
597  return KsFilterAddTopologyConnections(pKSFilter, 1, &Connection);
598 }
_Must_inspect_result_ _In_ ULONG _In_ ULONG OutputPinId
Definition: bdasup.h:96
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry(IN PKSFILTERFACTORY FilterFactory)
Definition: bdasup.c:116
Definition: precomp.h:17
#define KSFILTER_NODE
Definition: ks.h:44
void DPRINT(...)
Definition: polytest.cpp:61
#define STATUS_NOT_FOUND
Definition: shellext.h:67
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
PBDA_FILTER_TEMPLATE FilterTemplate
Definition: precomp.h:21
const KSFILTER_DESCRIPTOR * pFilterDescriptor
Definition: bdasup.h:31
_Must_inspect_result_ _In_ ULONG InputPinId
Definition: bdasup.h:96
KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections(IN PKSFILTER Filter, IN ULONG NewConnectionsCount, IN const KSTOPOLOGY_CONNECTION *const NewTopologyConnections)
Definition: filter.c:1865

Referenced by BdaMethodCreateTopology().

◆ BdaDeletePin()

NTSTATUS NTAPI BdaDeletePin ( IN PKSFILTER  pKSFilter,
IN ULONG pulPinId 
)

Definition at line 605 of file bdasup.c.

608 {
610  DPRINT("BdaDeletePin\n");
611  return STATUS_NOT_IMPLEMENTED;
612 }
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
void DPRINT(...)
Definition: polytest.cpp:61
#define UNIMPLEMENTED
Definition: debug.h:114

◆ BdaFilterFactoryUpdateCacheData()

NTSTATUS NTAPI BdaFilterFactoryUpdateCacheData ( IN PKSFILTERFACTORY  FilterFactory,
IN const KSFILTER_DESCRIPTOR *FilterDescriptor  OPTIONAL 
)

Definition at line 619 of file bdasup.c.

622 {
623  DPRINT("BdaFilterFactoryUpdateCacheData\n");
624  return KsFilterFactoryUpdateCacheData(FilterFactory, FilterDescriptor);
625 }
const KSFILTER_DESCRIPTOR FilterDescriptor
Definition: splitter.c:229
KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData(IN PKSFILTERFACTORY FilterFactory, IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL)
void DPRINT(...)
Definition: polytest.cpp:61

◆ BdaGetChangeState()

NTSTATUS NTAPI BdaGetChangeState ( IN PIRP  Irp,
OUT BDA_CHANGE_STATE ChangeState 
)

Definition at line 632 of file bdasup.c.

635 {
636  DPRINT("BdaGetChangeState\n");
637 
638  if (Irp && ChangeState)
639  {
640  *ChangeState = BDA_CHANGES_COMPLETE;
641  return STATUS_SUCCESS;
642  }
643 
644  /* invalid parameters supplied */
646 
647 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
void DPRINT(...)
Definition: polytest.cpp:61
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaInitFilter()

NTSTATUS NTAPI BdaInitFilter ( IN PKSFILTER  pKSFilter,
IN const BDA_FILTER_TEMPLATE pBdaFilterTemplate 
)

Definition at line 498 of file bdasup.c.

501 {
502  PBDA_FILTER_INSTANCE_ENTRY InstanceEntry;
503  PKSFILTERFACTORY FilterFactory;
504  ULONG Index, PinId;
506 
507  DPRINT("BdaInitFilter %p\n", pBdaFilterTemplate);
508 
509  /* check input parameters */
510  if (!pKSFilter)
512 
513  /* get parent filter factory */
514  FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
515 
516  /* sanity check */
517  ASSERT(FilterFactory);
518 
519  /* find instance entry */
520  InstanceEntry = GetFilterInstanceEntry(FilterFactory);
521 
522  /* sanity check */
523  ASSERT(InstanceEntry);
524 
525  if (!pBdaFilterTemplate)
526  {
527  /* use template from BdaCreateFilterFactoryEx */
528  pBdaFilterTemplate = InstanceEntry->FilterTemplate;
529  }
530 
531  /* now create the pins */
532  for(Index = 0; Index < pBdaFilterTemplate->pFilterDescriptor->PinDescriptorsCount; Index++)
533  {
534  /* create the pin */
535  Status = BdaCreatePin(pKSFilter, Index, &PinId);
536 
537  /* check for success */
538  if (!NT_SUCCESS(Status))
539  break;
540  }
541 
542  /* done */
543  return Status;
544 }
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
LONG NTSTATUS
Definition: precomp.h:26
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry(IN PKSFILTERFACTORY FilterFactory)
Definition: bdasup.c:116
Definition: precomp.h:17
void DPRINT(...)
Definition: polytest.cpp:61
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
static const UCHAR Index[8]
Definition: usbohci.c:18
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
_Must_inspect_result_ _In_ const KSFILTER_DESCRIPTOR _In_ const BDA_FILTER_TEMPLATE * pBdaFilterTemplate
Definition: bdasup.h:71
PBDA_FILTER_TEMPLATE FilterTemplate
Definition: precomp.h:21
Status
Definition: gdiplustypes.h:24
NTSTATUS NTAPI BdaCreatePin(IN PKSFILTER pKSFilter, IN ULONG ulPinType, OUT ULONG *pulPinId)
Definition: bdasup.c:366
const KSFILTER_DESCRIPTOR * pFilterDescriptor
Definition: bdasup.h:31
unsigned int ULONG
Definition: retypes.h:1
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaMethodCreatePin()

NTSTATUS NTAPI BdaMethodCreatePin ( IN PIRP  Irp,
IN KSMETHOD pKSMethod,
OUT ULONG pulPinFactoryID 
)

Definition at line 463 of file bdasup.c.

467 {
468  PKSM_PIN Pin;
469  PKSFILTER Filter;
470 
471  DPRINT("BdaMethodCreatePin\n");
472 
473  if (!Irp)
474  {
475  /* invalid parameter */
477  }
478 
479  /* get filter from irp */
481 
482  /* sanity check */
483  ASSERT(Filter);
484  ASSERT(pKSMethod);
485 
486  /* get method request */
488 
489  /* create the pin */
490  return BdaCreatePin(Filter, Pin->PinId, pulPinFactoryID);
491 }
struct _KSM_PIN * PKSM_PIN
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
void DPRINT(...)
Definition: polytest.cpp:61
_Must_inspect_result_ _In_ KSMETHOD _Out_opt_ ULONG * pulPinFactoryID
Definition: bdasup.h:132
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
Definition: fatprocs.h:415
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
NTSTATUS NTAPI BdaCreatePin(IN PKSFILTER pKSFilter, IN ULONG ulPinType, OUT ULONG *pulPinId)
Definition: bdasup.c:366
KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp(IN PIRP Irp)
Definition: filter.c:2106
_Must_inspect_result_ _In_ KSMETHOD * pKSMethod
Definition: bdasup.h:132

◆ BdaMethodCreateTopology()

NTSTATUS NTAPI BdaMethodCreateTopology ( IN PIRP  Irp,
IN KSMETHOD pKSMethod,
OPTIONAL PVOID  pvIgnored 
)

Definition at line 654 of file bdasup.c.

658 {
659  PKSFILTER Filter;
661 
662  DPRINT("BdaMethodCreateTopology\n");
663 
664  /* check input parameters */
665  if (!Irp || !pKSMethod)
667 
668  /* get filter */
670 
671  /* sanity check */
672  ASSERT(Filter);
673 
674  /* get method request */
676 
677  /* create the topology */
678  return BdaCreateTopology(Filter, Node->ulInputPinId, Node->ulOutputPinId);
679 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
union node Node
Definition: types.h:1255
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
void DPRINT(...)
Definition: polytest.cpp:61
NTSTATUS NTAPI BdaCreateTopology(IN PKSFILTER pKSFilter, IN ULONG InputPinId, IN ULONG OutputPinId)
Definition: bdasup.c:553
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
struct _KSP_BDA_NODE_PIN * PKSP_BDA_NODE_PIN
KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp(IN PIRP Irp)
Definition: filter.c:2106
_Must_inspect_result_ _In_ KSMETHOD * pKSMethod
Definition: bdasup.h:132
Definition: dlist.c:348

◆ BdaMethodDeletePin()

NTSTATUS NTAPI BdaMethodDeletePin ( IN PIRP  Irp,
IN KSMETHOD pKSMethod,
OPTIONAL PVOID  pvIgnored 
)

Definition at line 686 of file bdasup.c.

690 {
691  DPRINT("BdaMethodDeletePin\n");
692 
693  if (!Irp)
695 
696  return STATUS_SUCCESS;
697 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
void DPRINT(...)
Definition: polytest.cpp:61
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaPropertyGetControllingPinId()

NTSTATUS NTAPI BdaPropertyGetControllingPinId ( IN PIRP  Irp,
IN KSP_BDA_NODE_PIN pProperty,
OUT ULONG pulControllingPinId 
)

Definition at line 704 of file bdasup.c.

708 {
710  DPRINT("BdaPropertyGetControllingPinId\n");
711  return STATUS_NOT_IMPLEMENTED;
712 }
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
void DPRINT(...)
Definition: polytest.cpp:61
#define UNIMPLEMENTED
Definition: debug.h:114

◆ BdaPropertyGetPinControl()

NTSTATUS NTAPI BdaPropertyGetPinControl ( IN PIRP  Irp,
IN KSPROPERTY pKSProperty,
OUT ULONG pulProperty 
)

Definition at line 719 of file bdasup.c.

723 {
724  PKSPIN Pin;
725  PKSFILTER Filter;
726  PKSFILTERFACTORY FilterFactory;
727  PBDA_FILTER_INSTANCE_ENTRY InstanceEntry;
728 
729  DPRINT("BdaPropertyGetPinControl\n");
730 
731  /* first get the pin */
733  ASSERT(Pin);
734 
735  /* now get the parent filter */
737  ASSERT(Filter);
738 
739  /* get parent filter factory */
740  FilterFactory = KsFilterGetParentFilterFactory(Filter);
741  ASSERT(FilterFactory);
742 
743  /* find instance entry */
744  InstanceEntry = GetFilterInstanceEntry(FilterFactory);
745  ASSERT(InstanceEntry);
746 
747  /* sanity check */
748  pKSProperty++;
750 
751  /* store pin id */
752  *pulProperty = Pin->Id;
753 
754  return STATUS_SUCCESS;
755 }
PKSFILTER NTAPI KsPinGetParentFilter(IN PKSPIN Pin)
Definition: pin.c:1097
_In_ PIRP Irp
Definition: csq.h:116
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry(IN PKSFILTERFACTORY FilterFactory)
Definition: bdasup.c:116
Definition: precomp.h:17
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
void DPRINT(...)
Definition: polytest.cpp:61
ULONG Id
Definition: dmksctrl.h:77
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
Definition: fatprocs.h:415
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
_Must_inspect_result_ _In_ KSPROPERTY * pKSProperty
Definition: bdasup.h:164
KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp(IN PIRP Irp)
Definition: pin.c:1211
_Must_inspect_result_ _In_ KSPROPERTY _Out_opt_ ULONG * pulProperty
Definition: bdasup.h:164
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaPropertyNodeDescriptors()

NTSTATUS NTAPI BdaPropertyNodeDescriptors ( IN PIRP  Irp,
IN KSPROPERTY pKSProperty,
OUT BDANODE_DESCRIPTOR pNodeDescriptorProperty 
)

Definition at line 762 of file bdasup.c.

766 {
768  DPRINT("BdaPropertyNodeDescriptors\n");
769  return STATUS_NOT_IMPLEMENTED;
770 }
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
void DPRINT(...)
Definition: polytest.cpp:61
#define UNIMPLEMENTED
Definition: debug.h:114

◆ BdaPropertyNodeEvents()

NTSTATUS NTAPI BdaPropertyNodeEvents ( IN PIRP  Irp,
IN KSP_NODE pKSProperty,
OUT GUID pguidProperty 
)

Definition at line 777 of file bdasup.c.

781 {
783  DPRINT("BdaPropertyNodeEvents\n");
784  return STATUS_NOT_IMPLEMENTED;
785 }
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
void DPRINT(...)
Definition: polytest.cpp:61
#define UNIMPLEMENTED
Definition: debug.h:114

◆ BdaPropertyNodeMethods()

NTSTATUS NTAPI BdaPropertyNodeMethods ( IN PIRP  Irp,
IN KSP_NODE pKSProperty,
OUT GUID pguidProperty 
)

Definition at line 792 of file bdasup.c.

796 {
798  DPRINT("BdaPropertyNodeMethods\n");
799  return STATUS_NOT_IMPLEMENTED;
800 }
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
void DPRINT(...)
Definition: polytest.cpp:61
#define UNIMPLEMENTED
Definition: debug.h:114

◆ BdaPropertyNodeProperties()

NTSTATUS NTAPI BdaPropertyNodeProperties ( IN PIRP  Irp,
IN KSP_NODE pKSProperty,
OUT GUID pguidProperty 
)

Definition at line 807 of file bdasup.c.

811 {
813  DPRINT("BdaPropertyNodeProperties\n");
814  return STATUS_NOT_IMPLEMENTED;
815 }
#define STATUS_NOT_IMPLEMENTED
Definition: ntstatus.h:225
void DPRINT(...)
Definition: polytest.cpp:61
#define UNIMPLEMENTED
Definition: debug.h:114

◆ BdaPropertyNodeTypes()

NTSTATUS NTAPI BdaPropertyNodeTypes ( IN PIRP  Irp,
IN KSPROPERTY pKSProperty,
OUT ULONG pulProperty 
)

Definition at line 822 of file bdasup.c.

826 {
827  PBDA_FILTER_INSTANCE_ENTRY InstanceEntry;
828  PKSFILTERFACTORY FilterFactory;
829  PKSFILTER pKSFilter;
830  PIO_STACK_LOCATION IoStack;
831  ULONG Index;
832 
833  DPRINT("BdaPropertyNodeTypes\n");
834 
835  /* check input parameter */
836  if (!Irp || !pKSProperty)
838 
839  /* first get the filter */
840  pKSFilter = KsGetFilterFromIrp(Irp);
841 
842  /* sanity check */
843  ASSERT(pKSFilter);
844 
845  /* get parent filter factory */
846  FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
847 
848  /* sanity check */
849  ASSERT(FilterFactory);
850 
851  /* find instance entry */
852  InstanceEntry = GetFilterInstanceEntry(FilterFactory);
853  ASSERT(InstanceEntry);
854 
855  /* get current irp stack */
857 
858  /* are there node types provided */
859  if (!pulProperty)
860  {
861  /* no node entry array provided */
862  Irp->IoStatus.Information = InstanceEntry->FilterTemplate->pFilterDescriptor->NodeDescriptorsCount * sizeof(ULONG);
863  Irp->IoStatus.Status = STATUS_MORE_ENTRIES;
864  return STATUS_MORE_ENTRIES;
865  }
866 
867  if (InstanceEntry->FilterTemplate->pFilterDescriptor->NodeDescriptorsCount * sizeof(ULONG) > IoStack->Parameters.DeviceIoControl.OutputBufferLength)
868  {
869  /* buffer too small */
870  Irp->IoStatus.Information = InstanceEntry->FilterTemplate->pFilterDescriptor->NodeDescriptorsCount * sizeof(ULONG);
871  Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
873  }
874 
875  /* now copy all descriptors */
876  for(Index = 0; Index < InstanceEntry->FilterTemplate->pFilterDescriptor->NodeDescriptorsCount; Index++)
877  {
878  /* use the index as the type */
880  }
881 
882  return STATUS_SUCCESS;
883 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry(IN PKSFILTERFACTORY FilterFactory)
Definition: bdasup.c:116
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:64
Definition: precomp.h:17
void DPRINT(...)
Definition: polytest.cpp:61
static const UCHAR Index[8]
Definition: usbohci.c:18
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define STATUS_MORE_ENTRIES
Definition: udferr_usr.h:124
PBDA_FILTER_TEMPLATE FilterTemplate
Definition: precomp.h:21
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2745
_Must_inspect_result_ _In_ KSPROPERTY * pKSProperty
Definition: bdasup.h:164
const KSFILTER_DESCRIPTOR * pFilterDescriptor
Definition: bdasup.h:31
KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp(IN PIRP Irp)
Definition: filter.c:2106
unsigned int ULONG
Definition: retypes.h:1
_Must_inspect_result_ _In_ KSPROPERTY _Out_opt_ ULONG * pulProperty
Definition: bdasup.h:164
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:2772
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaPropertyPinTypes()

NTSTATUS NTAPI BdaPropertyPinTypes ( IN PIRP  Irp,
IN KSPROPERTY pKSProperty,
OUT ULONG pulProperty 
)

Definition at line 890 of file bdasup.c.

894 {
895  PBDA_FILTER_INSTANCE_ENTRY InstanceEntry;
896  PKSFILTERFACTORY FilterFactory;
897  PKSFILTER pKSFilter;
898  PIO_STACK_LOCATION IoStack;
899  ULONG Index;
900 
901  DPRINT("BdaPropertyPinTypes\n");
902 
903  /* check input parameter */
904  if (!Irp || !pKSProperty)
906 
907  /* first get the filter */
908  pKSFilter = KsGetFilterFromIrp(Irp);
909 
910  /* sanity check */
911  ASSERT(pKSFilter);
912 
913  /* get parent filter factory */
914  FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
915 
916  /* sanity check */
917  ASSERT(FilterFactory);
918 
919  /* find instance entry */
920  InstanceEntry = GetFilterInstanceEntry(FilterFactory);
921  ASSERT(InstanceEntry);
922 
923  /* get current irp stack */
925 
926  /* are there node types provided */
927  if (!pKSProperty)
928  {
929  /* no node entry array provided */
930  Irp->IoStatus.Information = InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount * sizeof(ULONG);
931  Irp->IoStatus.Status = STATUS_MORE_ENTRIES;
932  return STATUS_MORE_ENTRIES;
933  }
934 
935  if (InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount * sizeof(ULONG) > IoStack->Parameters.DeviceIoControl.OutputBufferLength)
936  {
937  /* buffer too small */
938  Irp->IoStatus.Information = InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount * sizeof(ULONG);
939  Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
941  }
942 
943  /* now copy all descriptors */
944  for(Index = 0; Index < InstanceEntry->FilterTemplate->pFilterDescriptor->PinDescriptorsCount; Index++)
945  {
946  /* use the index as the type */
948  }
949 
950  return STATUS_SUCCESS;
951 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry(IN PKSFILTERFACTORY FilterFactory)
Definition: bdasup.c:116
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:64
Definition: precomp.h:17
void DPRINT(...)
Definition: polytest.cpp:61
static const UCHAR Index[8]
Definition: usbohci.c:18
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define STATUS_MORE_ENTRIES
Definition: udferr_usr.h:124
PBDA_FILTER_TEMPLATE FilterTemplate
Definition: precomp.h:21
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2745
_Must_inspect_result_ _In_ KSPROPERTY * pKSProperty
Definition: bdasup.h:164
const KSFILTER_DESCRIPTOR * pFilterDescriptor
Definition: bdasup.h:31
KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp(IN PIRP Irp)
Definition: filter.c:2106
unsigned int ULONG
Definition: retypes.h:1
_Must_inspect_result_ _In_ KSPROPERTY _Out_opt_ ULONG * pulProperty
Definition: bdasup.h:164
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:2772
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaPropertyTemplateConnections()

NTSTATUS NTAPI BdaPropertyTemplateConnections ( IN PIRP  Irp,
IN KSPROPERTY pKSProperty,
OUT KSTOPOLOGY_CONNECTION pConnectionProperty 
)

Definition at line 958 of file bdasup.c.

962 {
963  PBDA_FILTER_INSTANCE_ENTRY FilterInstance;
964  PKSFILTER Filter;
965  PIO_STACK_LOCATION IoStack;
966  ULONG Index;
967 
968  DPRINT("BdaPropertyTemplateConnections\n");
969 
970  /* validate parameters */
971  if (!Irp || !pKSProperty)
973 
974  /* first get the filter */
976 
977  /* sanity check */
978  ASSERT(Filter);
979 
980  /* verify filter has been registered with BDA */
981  FilterInstance = GetFilterInstanceEntry(KsFilterGetParentFilterFactory(Filter));
982 
983  if (!FilterInstance)
985 
986  /* get current irp stack */
988 
989  if (!pConnectionProperty)
990  {
991  /* caller needs the size first */
992  Irp->IoStatus.Information = FilterInstance->FilterTemplate->pFilterDescriptor->ConnectionsCount * sizeof(KSTOPOLOGY_CONNECTION);
993  Irp->IoStatus.Status = STATUS_BUFFER_OVERFLOW;
994  return STATUS_BUFFER_OVERFLOW;
995  }
996 
997  /* sanity check */
998  ASSERT(FilterInstance->FilterTemplate->pFilterDescriptor->ConnectionsCount * sizeof(KSTOPOLOGY_CONNECTION) <= IoStack->Parameters.DeviceIoControl.OutputBufferLength);
999 
1000  for(Index = 0; Index < FilterInstance->FilterTemplate->pFilterDescriptor->ConnectionsCount; Index++)
1001  {
1002  /* sanity check */
1003  ASSERT(FilterInstance->FilterTemplate->pFilterDescriptor->Connections);
1004 
1005  /* copy connection */
1007  }
1008 
1009  /* store result */
1010  Irp->IoStatus.Information = FilterInstance->FilterTemplate->pFilterDescriptor->ConnectionsCount * sizeof(KSTOPOLOGY_CONNECTION);
1011  Irp->IoStatus.Status = STATUS_SUCCESS;
1012 
1013  /* done */
1014  return STATUS_SUCCESS;
1015 
1016 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry(IN PKSFILTERFACTORY FilterFactory)
Definition: bdasup.c:116
#define RtlMoveMemory(Destination, Source, Length)
Definition: typedefs.h:263
Definition: precomp.h:17
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
void DPRINT(...)
Definition: polytest.cpp:61
static const UCHAR Index[8]
Definition: usbohci.c:18
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
PBDA_FILTER_TEMPLATE FilterTemplate
Definition: precomp.h:21
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
Definition: iofuncs.h:2745
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:61
_Must_inspect_result_ _In_ KSPROPERTY * pKSProperty
Definition: bdasup.h:164
const KSFILTER_DESCRIPTOR * pFilterDescriptor
Definition: bdasup.h:31
KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp(IN PIRP Irp)
Definition: filter.c:2106
unsigned int ULONG
Definition: retypes.h:1
_Must_inspect_result_ _In_ KSPROPERTY _Out_opt_ KSTOPOLOGY_CONNECTION * pConnectionProperty
Definition: bdasup.h:220
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
Definition: iotypes.h:2772
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaStartChanges()

NTSTATUS NTAPI BdaStartChanges ( IN PIRP  Irp)

Definition at line 1023 of file bdasup.c.

1024 {
1025  DPRINT("BdaStartChanges\n");
1026 
1027  if (Irp)
1028  return STATUS_SUCCESS;
1029  else
1030  return STATUS_INVALID_PARAMETER;
1031 
1032 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
void DPRINT(...)
Definition: polytest.cpp:61
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaUninitFilter()

NTSTATUS NTAPI BdaUninitFilter ( IN PKSFILTER  pKSFilter)

Definition at line 1039 of file bdasup.c.

1040 {
1041  DPRINT("BdaUninitFilter\n");
1042  return STATUS_SUCCESS;
1043 }
void DPRINT(...)
Definition: polytest.cpp:61
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ BdaValidateNodeProperty()

NTSTATUS NTAPI BdaValidateNodeProperty ( IN PIRP  Irp,
IN KSPROPERTY KSProperty 
)

Definition at line 1050 of file bdasup.c.

1053 {
1054  DPRINT("BdaValidateNodeProperty\n");
1055 
1056  /* check for valid parameter */
1057  if (Irp && KSProperty)
1058  return STATUS_SUCCESS;
1059 
1060  return STATUS_INVALID_PARAMETER;
1061 }
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
void DPRINT(...)
Definition: polytest.cpp:61
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ DllInitialize()

NTSTATUS NTAPI DllInitialize ( PUNICODE_STRING  RegistryPath)

Definition at line 157 of file bdasup.c.

159 {
160  DPRINT("BDASUP::DllInitialize\n");
161 
165 
166  return STATUS_SUCCESS;
167 }
#define TRUE
Definition: types.h:120
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
Definition: kefuncs.h:251
void DPRINT(...)
Definition: polytest.cpp:61
BOOLEAN Initialized
Definition: precomp.h:26
BDA_GLOBAL g_Settings
Definition: bdasup.c:8
KSPIN_LOCK FilterFactoryInstanceListLock
Definition: precomp.h:27
LIST_ENTRY FilterFactoryInstanceList
Definition: precomp.h:28
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
return STATUS_SUCCESS
Definition: btrfs.c:2966

◆ FreeFilterInstance()

VOID NTAPI FreeFilterInstance ( IN PVOID  Context)

Definition at line 214 of file bdasup.c.

216 {
217  PBDA_FILTER_INSTANCE_ENTRY InstanceEntry = NULL;
219  KIRQL OldLevel;
220 
221  /* acquire list lock */
223 
224  /* point to first entry */
226 
228  {
229  /* get instance entry from list entry offset */
231 
232  /* is the instance entry the requested one */
233  if (InstanceEntry == (PBDA_FILTER_INSTANCE_ENTRY)Context)
234  {
235  RemoveEntryList(&InstanceEntry->Entry);
236  FreeItem(InstanceEntry);
237  break;
238  }
239 
240  /* move to next entry */
241  Entry = Entry->Flink;
242  }
243 
244  /* release spin lock */
246 }
struct _Entry Entry
Definition: kefuncs.h:640
LIST_ENTRY Entry
Definition: precomp.h:19
Definition: precomp.h:17
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
Definition: rtlfuncs.h:105
UCHAR KIRQL
Definition: env_spec_w32.h:591
VOID FreeItem(IN PVOID Item)
Definition: bdasup.c:108
smooth NULL
Definition: ftsmooth.c:416
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
struct BDA_FILTER_INSTANCE_ENTRY * PBDA_FILTER_INSTANCE_ENTRY
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
BDA_GLOBAL g_Settings
Definition: bdasup.c:8
KSPIN_LOCK FilterFactoryInstanceListLock
Definition: precomp.h:27
Definition: typedefs.h:117
LIST_ENTRY FilterFactoryInstanceList
Definition: precomp.h:28
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
struct tagContext Context
Definition: acpixf.h:1024
base of all file and directory entries
Definition: entries.h:82

Referenced by BdaCreateFilterFactoryEx().

◆ FreeItem()

VOID FreeItem ( IN PVOID  Item)

Definition at line 108 of file bdasup.c.

110 {
111  ExFreePool(Item);
112 }
#define ExFreePool(addr)
Definition: env_spec_w32.h:352

Referenced by BdaCreateFilterFactoryEx(), and FreeFilterInstance().

◆ GetFilterInstanceEntry()

PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry ( IN PKSFILTERFACTORY  FilterFactory)

Definition at line 116 of file bdasup.c.

118 {
119  PBDA_FILTER_INSTANCE_ENTRY InstanceEntry = NULL;
121  KIRQL OldLevel;
122 
123  /* acquire list lock */
125 
126  /* point to first entry */
128 
130  {
131  /* get instance entry from list entry offset */
133 
134  /* is the instance entry the requested one */
135  if (InstanceEntry->FilterFactoryInstance == FilterFactory)
136  break;
137 
138  /* move to next entry */
139  Entry = Entry->Flink;
140  /* set to null as it has not been found */
141  InstanceEntry = NULL;
142  }
143 
144 
145  /* release spin lock */
147 
148  /* return result */
149  return InstanceEntry;
150 }
struct _Entry Entry
Definition: kefuncs.h:640
Definition: precomp.h:17
UCHAR KIRQL
Definition: env_spec_w32.h:591
smooth NULL
Definition: ftsmooth.c:416
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
struct BDA_FILTER_INSTANCE_ENTRY * PBDA_FILTER_INSTANCE_ENTRY
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
BDA_GLOBAL g_Settings
Definition: bdasup.c:8
KSPIN_LOCK FilterFactoryInstanceListLock
Definition: precomp.h:27
Definition: typedefs.h:117
LIST_ENTRY FilterFactoryInstanceList
Definition: precomp.h:28
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
PKSFILTERFACTORY FilterFactoryInstance
Definition: precomp.h:20
base of all file and directory entries
Definition: entries.h:82

Referenced by BdaCreatePin(), BdaCreateTopology(), BdaInitFilter(), BdaPropertyGetPinControl(), BdaPropertyNodeTypes(), BdaPropertyPinTypes(), and BdaPropertyTemplateConnections().

Variable Documentation

◆ FilterAutomationTable

KSAUTOMATION_TABLE FilterAutomationTable
Initial value:
=
{
1,
sizeof(KSPROPERTY_ITEM),
1,
sizeof(KSMETHOD_ITEM),
0,
sizeof(KSEVENT_ITEM),
}
smooth NULL
Definition: ftsmooth.c:416
KSPROPERTY_SET FilterPropertySet
Definition: bdasup.c:28
KSMETHOD_SET FilterMethodSet
Definition: bdasup.c:43

Definition at line 52 of file bdasup.c.

Referenced by BdaCreateFilterFactoryEx().

◆ FilterMethodItem

KSMETHOD_ITEM FilterMethodItem[]
Initial value:
=
{
}

Definition at line 37 of file bdasup.c.

◆ FilterMethodSet

KSMETHOD_SET FilterMethodSet
Initial value:
=
{
2,
0,
}
smooth NULL
Definition: ftsmooth.c:416
KSMETHOD_ITEM FilterMethodItem[]
Definition: bdasup.c:37
const GUID KSMETHODSETID_BdaDeviceConfiguration
Definition: bdasup.c:5

Definition at line 43 of file bdasup.c.

◆ FilterPropertyItem

KSPROPERTY_ITEM FilterPropertyItem[]
Initial value:
=
{
}
NTSTATUS NTAPI BdaPropertyTemplateConnections(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT KSTOPOLOGY_CONNECTION *pConnectionProperty)
Definition: bdasup.c:958
#define DEFINE_KSPROPERTY_ITEM_BDA_PIN_TYPES(GetHandler, SetHandler)
Definition: bdamedia.h:83
NTSTATUS NTAPI BdaPropertyNodeEvents(IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
Definition: bdasup.c:777
#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_TYPES(GetHandler, SetHandler)
Definition: bdamedia.h:75
NTSTATUS NTAPI BdaPropertyNodeMethods(IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
Definition: bdasup.c:792
#define DEFINE_KSPROPERTY_ITEM_BDA_TEMPLATE_CONNECTIONS(GetHandler, SetHandler)
Definition: bdamedia.h:91
NTSTATUS NTAPI BdaPropertyPinTypes(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
Definition: bdasup.c:890
NTSTATUS NTAPI BdaPropertyNodeProperties(IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
Definition: bdasup.c:807
#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_PROPERTIES(GetHandler, SetHandler)
Definition: bdamedia.h:107
smooth NULL
Definition: ftsmooth.c:416
NTSTATUS NTAPI BdaPropertyNodeTypes(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
Definition: bdasup.c:822
#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_METHODS(GetHandler, SetHandler)
Definition: bdamedia.h:99
#define DEFINE_KSPROPERTY_ITEM_BDA_CONTROLLING_PIN_ID(GetHandler, SetHandler)
Definition: bdamedia.h:123
#define DEFINE_KSPROPERTY_ITEM_BDA_NODE_EVENTS(GetHandler, SetHandler)
Definition: bdamedia.h:115
NTSTATUS NTAPI BdaPropertyGetControllingPinId(IN PIRP Irp, IN KSP_BDA_NODE_PIN *pProperty, OUT ULONG *pulControllingPinId)
Definition: bdasup.c:704

Definition at line 15 of file bdasup.c.

Referenced by PcAddToPropertyTable().

◆ FilterPropertySet

KSPROPERTY_SET FilterPropertySet
Initial value:
=
{
8,
0,
}
KSPROPERTY_ITEM FilterPropertyItem[]
Definition: bdasup.c:15
smooth NULL
Definition: ftsmooth.c:416
const GUID KSPROPSETID_BdaTopology
Definition: bdasup.c:6

Definition at line 28 of file bdasup.c.

◆ g_Settings

BDA_GLOBAL g_Settings
Initial value:
=
{
0,
0,
}
smooth NULL
Definition: ftsmooth.c:416

Definition at line 8 of file bdasup.c.

Referenced by BdaCreateFilterFactoryEx(), DllInitialize(), FreeFilterInstance(), and GetFilterInstanceEntry().

◆ KSMETHODSETID_BdaDeviceConfiguration

const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}}

Definition at line 5 of file bdasup.c.

◆ KSPROPSETID_BdaPinControl

const GUID KSPROPSETID_BdaPinControl = {0xded49d5, 0xa8b7, 0x4d5d, {0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d}}

Definition at line 4 of file bdasup.c.

◆ KSPROPSETID_BdaTopology

const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}}

Definition at line 6 of file bdasup.c.

◆ PinAutomationTable

KSAUTOMATION_TABLE PinAutomationTable
Initial value:
=
{
1,
sizeof(KSPROPERTY_ITEM),
0,
sizeof(KSMETHOD_ITEM),
0,
sizeof(KSEVENT_ITEM),
}
smooth NULL
Definition: ftsmooth.c:416
KSPROPERTY_SET PinPropertySet
Definition: bdasup.c:71

Definition at line 80 of file bdasup.c.

Referenced by BdaCreatePin().

◆ PinPropertyItem

KSPROPERTY_ITEM PinPropertyItem[]
Initial value:
=
{
}
smooth NULL
Definition: ftsmooth.c:416
NTSTATUS NTAPI BdaPropertyGetPinControl(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
Definition: bdasup.c:719
#define DEFINE_KSPROPERTY_ITEM_BDA_PIN_ID(GetHandler, SetHandler)
Definition: bdamedia.h:198

Definition at line 65 of file bdasup.c.

◆ PinPropertySet

KSPROPERTY_SET PinPropertySet
Initial value:
=
{
2,
0,
}
smooth NULL
Definition: ftsmooth.c:416
KSPROPERTY_ITEM PinPropertyItem[]
Definition: bdasup.c:65
const GUID KSPROPSETID_BdaPinControl
Definition: bdasup.c:4

Definition at line 71 of file bdasup.c.