4#define TAG_BDASUP 'SadB'
6const GUID KSPROPSETID_BdaPinControl = {0xded49d5, 0xa8b7, 0x4d5d, {0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d}};
7const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
8const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
56 sizeof(KSPROPERTY_ITEM),
59 sizeof(KSMETHOD_ITEM),
84 sizeof(KSPROPERTY_ITEM),
87 sizeof(KSMETHOD_ITEM),
111 IN PKSFILTERFACTORY FilterFactory)
135 InstanceEntry =
NULL;
142 return InstanceEntry;
153 DPRINT(
"BDASUP::DllInitialize\n");
169 DPRINT(
"BdaCheckChanges\n");
184 DPRINT(
"BdaCommitChanges\n");
198 IN PKSDEVICE pKSDevice,
247 IN PKSDEVICE pKSDevice,
252 PKSFILTERFACTORY FilterFactory;
258 DPRINT(
"BdaCreateFilterFactoryEx\n");
284 DPRINT1(
"KsMergeAutomationTables failed with %lx\n",
Status);
358 IN PKSFILTER pKSFilter,
362 PKSPIN_DESCRIPTOR_EX PinDescriptor;
363 PKSFILTERFACTORY FilterFactory;
367 PKSPIN_DESCRIPTOR_EX NewPinDescriptor;
375 FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
397 DPRINT(
"BdaCreatePin NoPins supported\n");
417 if (!NewPinDescriptor)
420 DPRINT(
"BdaCreatePin OutOfMemory\n");
425 RtlMoveMemory(NewPinDescriptor, PinDescriptor,
sizeof(KSPIN_DESCRIPTOR_EX));
444 DPRINT(
"BdaCreatePin Result %x PinId %u\n",
Status, PinId);
461 DPRINT(
"BdaMethodCreatePin\n");
489 IN PKSFILTER pKSFilter,
493 PKSFILTERFACTORY FilterFactory;
504 FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
542 IN PKSFILTER pKSFilter,
547 PKSFILTERFACTORY FilterFactory;
550 DPRINT(
"BdaCreateTopology\n");
557 FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
594 IN PKSFILTER pKSFilter,
608 IN PKSFILTERFACTORY FilterFactory,
611 DPRINT(
"BdaFilterFactoryUpdateCacheData\n");
624 DPRINT(
"BdaGetChangeState\n");
626 if (
Irp && ChangeState)
650 DPRINT(
"BdaMethodCreateTopology\n");
679 DPRINT(
"BdaMethodDeletePin\n");
698 DPRINT(
"BdaPropertyGetControllingPinId\n");
714 PKSFILTERFACTORY FilterFactory;
717 DPRINT(
"BdaPropertyGetPinControl\n");
728 FilterFactory = KsFilterGetParentFilterFactory(
Filter);
756 DPRINT(
"BdaPropertyNodeDescriptors\n");
771 DPRINT(
"BdaPropertyNodeEvents\n");
786 DPRINT(
"BdaPropertyNodeMethods\n");
801 DPRINT(
"BdaPropertyNodeProperties\n");
816 PKSFILTERFACTORY FilterFactory;
821 DPRINT(
"BdaPropertyNodeTypes\n");
834 FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
884 PKSFILTERFACTORY FilterFactory;
889 DPRINT(
"BdaPropertyPinTypes\n");
902 FilterFactory = KsFilterGetParentFilterFactory(pKSFilter);
956 DPRINT(
"BdaPropertyTemplateConnections\n");
1013 DPRINT(
"BdaStartChanges\n");
1029 DPRINT(
"BdaUninitFilter\n");
1042 DPRINT(
"BdaValidateNodeProperty\n");
1045 if (
Irp && KSProperty)
static PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(PIRP Irp)
NTSTATUS NTAPI KsAddItemToObjectBag(IN KSOBJECT_BAG ObjectBag, IN PVOID Item, IN PFNKSFREE Free OPTIONAL)
KSDDKAPI NTSTATUS NTAPI _KsEdit(IN KSOBJECT_BAG ObjectBag, IN OUT PVOID *PointerToPointerToItem, IN ULONG NewSize, IN ULONG OldSize, IN ULONG Tag)
KSMETHOD_SET FilterMethodSet
NTSTATUS NTAPI BdaUninitFilter(IN PKSFILTER pKSFilter)
NTSTATUS NTAPI BdaPropertyNodeMethods(IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
KSPROPERTY_SET PinPropertySet
PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes)
NTSTATUS NTAPI BdaPropertyNodeTypes(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
const GUID KSPROPSETID_BdaPinControl
NTSTATUS NTAPI BdaFilterFactoryUpdateCacheData(IN PKSFILTERFACTORY FilterFactory, IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL)
KSAUTOMATION_TABLE PinAutomationTable
VOID NTAPI FreeFilterInstance(IN PVOID Context)
NTSTATUS NTAPI BdaInitFilter(IN PKSFILTER pKSFilter, IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate)
NTSTATUS NTAPI BdaValidateNodeProperty(IN PIRP Irp, IN KSPROPERTY *KSProperty)
NTSTATUS NTAPI BdaPropertyNodeDescriptors(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT BDANODE_DESCRIPTOR *pNodeDescriptorProperty)
NTSTATUS NTAPI DllInitialize(PUNICODE_STRING RegistryPath)
NTSTATUS NTAPI BdaCreateTopology(IN PKSFILTER pKSFilter, IN ULONG InputPinId, IN ULONG OutputPinId)
NTSTATUS NTAPI BdaCheckChanges(IN PIRP Irp)
KSPROPERTY_ITEM FilterPropertyItem[]
NTSTATUS NTAPI BdaPropertyNodeEvents(IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
NTSTATUS NTAPI BdaCreateFilterFactoryEx(IN PKSDEVICE pKSDevice, IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, IN const BDA_FILTER_TEMPLATE *BdaFilterTemplate, OUT PKSFILTERFACTORY *ppKSFilterFactory)
NTSTATUS NTAPI BdaPropertyPinTypes(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
const GUID KSMETHODSETID_BdaDeviceConfiguration
PBDA_FILTER_INSTANCE_ENTRY GetFilterInstanceEntry(IN PKSFILTERFACTORY FilterFactory)
const GUID KSPROPSETID_BdaTopology
KSPROPERTY_ITEM PinPropertyItem[]
NTSTATUS NTAPI BdaPropertyGetPinControl(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT ULONG *pulProperty)
KSMETHOD_ITEM FilterMethodItem[]
NTSTATUS NTAPI BdaPropertyGetControllingPinId(IN PIRP Irp, IN KSP_BDA_NODE_PIN *pProperty, OUT ULONG *pulControllingPinId)
KSAUTOMATION_TABLE FilterAutomationTable
NTSTATUS NTAPI BdaCreatePin(IN PKSFILTER pKSFilter, IN ULONG ulPinType, OUT ULONG *pulPinId)
NTSTATUS NTAPI BdaMethodCreateTopology(IN PIRP Irp, IN KSMETHOD *pKSMethod, OPTIONAL PVOID pvIgnored)
NTSTATUS NTAPI BdaGetChangeState(IN PIRP Irp, OUT BDA_CHANGE_STATE *ChangeState)
NTSTATUS NTAPI BdaDeletePin(IN PKSFILTER pKSFilter, IN ULONG *pulPinId)
NTSTATUS NTAPI BdaStartChanges(IN PIRP Irp)
NTSTATUS NTAPI BdaCreateFilterFactory(IN PKSDEVICE pKSDevice, IN const KSFILTER_DESCRIPTOR *pFilterDescriptor, IN const BDA_FILTER_TEMPLATE *pBdaFilterTemplate)
KSPROPERTY_SET FilterPropertySet
NTSTATUS NTAPI BdaPropertyNodeProperties(IN PIRP Irp, IN KSP_NODE *pKSProperty, OUT GUID *pguidProperty)
VOID FreeItem(IN PVOID Item)
NTSTATUS NTAPI BdaCommitChanges(IN PIRP Irp)
NTSTATUS NTAPI BdaPropertyTemplateConnections(IN PIRP Irp, IN KSPROPERTY *pKSProperty, OUT KSTOPOLOGY_CONNECTION *pConnectionProperty)
NTSTATUS NTAPI BdaMethodDeletePin(IN PIRP Irp, IN KSMETHOD *pKSMethod, OPTIONAL PVOID pvIgnored)
NTSTATUS NTAPI BdaMethodCreatePin(IN PIRP Irp, IN KSMETHOD *pKSMethod, OUT ULONG *pulPinFactoryID)
_Must_inspect_result_ _In_ const KSFILTER_DESCRIPTOR _In_ const BDA_FILTER_TEMPLATE _Out_opt_ PKSFILTERFACTORY * ppKSFilterFactory
struct _KSM_PIN * PKSM_PIN
_Must_inspect_result_ _In_ KSMETHOD _Out_opt_ ULONG * pulPinFactoryID
_Must_inspect_result_ _In_ KSP_BDA_NODE_PIN * pProperty
_Must_inspect_result_ _In_ KSMETHOD PVOID pvIgnored
_Must_inspect_result_ _In_ KSPROPERTY _Out_opt_ KSTOPOLOGY_CONNECTION * pConnectionProperty
_Must_inspect_result_ _In_ ULONG ulPinType
_Must_inspect_result_ _In_ const KSFILTER_DESCRIPTOR * pFilterDescriptor
_Must_inspect_result_ _In_ KSPROPERTY _Out_opt_ ULONG * pulProperty
_Must_inspect_result_ _In_ ULONG _Out_opt_ ULONG * pulPinId
_Must_inspect_result_ _In_ KSPROPERTY _Out_opt_ BDANODE_DESCRIPTOR * pNodeDescriptorProperty
_Must_inspect_result_ _In_ KSP_BDA_NODE_PIN _Out_opt_ ULONG * pulControllingPinId
_Must_inspect_result_ _In_ const KSFILTER_DESCRIPTOR _In_ const BDA_FILTER_TEMPLATE * pBdaFilterTemplate
_Must_inspect_result_ _In_ KSP_NODE _Out_opt_ GUID * pguidProperty
_Must_inspect_result_ _In_ KSMETHOD * pKSMethod
_Must_inspect_result_ _In_ ULONG InputPinId
_Must_inspect_result_ _In_ KSPROPERTY * pKSProperty
_Must_inspect_result_ _In_ ULONG _In_ ULONG OutputPinId
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI KsMergeAutomationTables(OUT PKSAUTOMATION_TABLE *AutomationTableAB, IN PKSAUTOMATION_TABLE AutomationTableA OPTIONAL, IN PKSAUTOMATION_TABLE AutomationTableB OPTIONAL, IN KSOBJECT_BAG Bag OPTIONAL)
KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory(IN PKSFILTER Filter, IN const KSPIN_DESCRIPTOR_EX *const InPinDescriptor, OUT PULONG PinID)
KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections(IN PKSFILTER Filter, IN ULONG NewConnectionsCount, IN const KSTOPOLOGY_CONNECTION *const NewTopologyConnections)
KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp(IN PIRP Irp)
PKSFILTER NTAPI KsPinGetParentFilter(IN PKSPIN Pin)
KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp(IN PIRP Irp)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define KeReleaseSpinLock(sl, irql)
#define KeAcquireSpinLock(sl, irql)
#define InitializeListHead(ListHead)
#define KeInitializeSpinLock(sl)
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
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)
KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData(IN PKSFILTERFACTORY FilterFactory, IN const KSFILTER_DESCRIPTOR *FilterDescriptor OPTIONAL)
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
#define ExFreePoolWithTag(_P, _T)
FORCEINLINE PVOID ExAllocatePoolZero(ULONG PoolType, SIZE_T NumberOfBytes, ULONG Tag)
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
const KSFILTER_DESCRIPTOR FilterDescriptor
PULONG MinorVersion OPTIONAL
PKSFILTERFACTORY FilterFactoryInstance
PBDA_FILTER_TEMPLATE FilterTemplate
LIST_ENTRY FilterFactoryInstanceList
KSPIN_LOCK FilterFactoryInstanceListLock
base of all file and directory entries
const KSFILTER_DESCRIPTOR * pFilterDescriptor
struct _IO_STACK_LOCATION::@1584::@1585 DeviceIoControl
union _IO_STACK_LOCATION::@1584 Parameters
struct _LIST_ENTRY * Flink
#define RtlMoveMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_MORE_ENTRIES
#define STATUS_INSUFFICIENT_RESOURCES
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ WDFCOLLECTION _In_ WDFOBJECT Item
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
_Must_inspect_result_ typedef _In_ PHYSICAL_ADDRESS _Inout_ PLARGE_INTEGER NumberOfBytes