646 lines
12 KiB
C
646 lines
12 KiB
C
|
//==========================================================================;
|
||
|
//
|
||
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
||
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
||
|
// PURPOSE.
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
//
|
||
|
//==========================================================================;
|
||
|
|
||
|
#if !defined(_BDATYPES_)
|
||
|
#error BDATYPES.H must be included before BDATOPGY.H
|
||
|
#endif // !defined(_BDATYPES_)
|
||
|
|
||
|
#if !defined(_BDATOPGY_)
|
||
|
#define _BDATOPGY_
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
extern "C" {
|
||
|
#endif // defined(__cplusplus)
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
// Common typedefs
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
#define STDMETHODCALLTYPE __stdcall
|
||
|
|
||
|
typedef GUID * PGUID;
|
||
|
|
||
|
//===========================================================================
|
||
|
//
|
||
|
// BDA KS Topology Structures
|
||
|
//
|
||
|
//===========================================================================
|
||
|
|
||
|
typedef struct _KSM_PIN_PAIR
|
||
|
{
|
||
|
KSMETHOD Method;
|
||
|
ULONG InputPinId;
|
||
|
ULONG OutputPinId;
|
||
|
ULONG Reserved;
|
||
|
} KSM_PIN_PAIR, * PKSM_PIN_PAIR;
|
||
|
|
||
|
typedef struct _KSM_PIN
|
||
|
{
|
||
|
KSMETHOD Method;
|
||
|
union
|
||
|
{
|
||
|
ULONG PinId;
|
||
|
ULONG PinType;
|
||
|
};
|
||
|
ULONG Reserved;
|
||
|
} KSM_PIN, * PKSM_PIN;
|
||
|
|
||
|
typedef ULONG BDA_TOPOLOGY_JOINT, * PBDA_TOPOLOGY_JOINT;
|
||
|
|
||
|
typedef struct _BDA_PIN_PAIRING
|
||
|
{
|
||
|
ULONG ulInputPin;
|
||
|
ULONG ulOutputPin;
|
||
|
ULONG ulcMaxInputsPerOutput;
|
||
|
ULONG ulcMinInputsPerOutput;
|
||
|
ULONG ulcMaxOutputsPerInput;
|
||
|
ULONG ulcMinOutputsPerInput;
|
||
|
ULONG ulcTopologyJoints;
|
||
|
const ULONG * pTopologyJoints;
|
||
|
|
||
|
} BDA_PIN_PAIRING, * PBDA_PIN_PAIRING;
|
||
|
|
||
|
|
||
|
// BDA Topology Template Structures
|
||
|
//
|
||
|
typedef struct _BDA_FILTER_TEMPLATE
|
||
|
{
|
||
|
const KSFILTER_DESCRIPTOR * pFilterDescriptor;
|
||
|
ULONG ulcPinPairs;
|
||
|
const BDA_PIN_PAIRING * pPinPairs;
|
||
|
|
||
|
} BDA_FILTER_TEMPLATE, *PBDA_FILTER_TEMPLATE;
|
||
|
|
||
|
|
||
|
//===========================================================================
|
||
|
//
|
||
|
// BDA Utility Functions
|
||
|
//
|
||
|
//===========================================================================
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaCreateFilterFactory()
|
||
|
**
|
||
|
** Creates a Filter Factory according to pFilterDescriptor. Keeps a
|
||
|
** reference to pBdaFilterTemplate so that Pin Factories can be dynamically
|
||
|
** created on a Filter created from this Filter Factory.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
**
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaCreateFilterFactory(
|
||
|
PKSDEVICE pKSDevice,
|
||
|
const KSFILTER_DESCRIPTOR * pFilterDescriptor,
|
||
|
const BDA_FILTER_TEMPLATE * pBdaFilterTemplate
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaCreateFilterFactoryEx()
|
||
|
**
|
||
|
** Creates a Filter Factory according to pFilterDescriptor. Keeps a
|
||
|
** reference to pBdaFilterTemplate so that Pin Factories can be dynamically
|
||
|
** created on a Filter created from this Filter Factory.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
**
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaCreateFilterFactoryEx(
|
||
|
PKSDEVICE pKSDevice,
|
||
|
const KSFILTER_DESCRIPTOR * pFilterDescriptor,
|
||
|
const BDA_FILTER_TEMPLATE * pBdaFilterTemplate,
|
||
|
PKSFILTERFACTORY * ppKSFilterFactory
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaInitFilter()
|
||
|
**
|
||
|
** Initializes a BDA filter context for this KS Filter instance. Creates
|
||
|
** a linkage to the BDA Filter Template associated with the factory from
|
||
|
** which this KS Filter instance was created.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
**
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaInitFilter(
|
||
|
PKSFILTER pKSFilter,
|
||
|
const BDA_FILTER_TEMPLATE * pBdaFilterTemplate
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaUninitFilter()
|
||
|
**
|
||
|
** Unitializes and frees resources from the BDA filter context associated
|
||
|
** with this KS filter instance.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
**
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaUninitFilter(
|
||
|
PKSFILTER pKSFilter
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaFilterFactoryUpdateCacheData()
|
||
|
**
|
||
|
** Updates the pin data cache for the given filter factory.
|
||
|
** The function will update the cached information for all pin factories
|
||
|
** exposed by the given filter factory.
|
||
|
**
|
||
|
** If the option filter descriptor is given, the function will update
|
||
|
** the pin data cache for all pins listed in the given filter descriptor
|
||
|
** instead of those in the filter factory.
|
||
|
**
|
||
|
** Drivers will call this to update the pin data cache for all
|
||
|
** pins that may be exposed by the filter factory. The driver will
|
||
|
** provide a filter descriptor listing pins that are not initially exposed
|
||
|
** by the filter factory (this is usually the same as the template filter
|
||
|
** descriptor).
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
**
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaFilterFactoryUpdateCacheData(
|
||
|
IN PKSFILTERFACTORY pFilterFactory,
|
||
|
IN const KSFILTER_DESCRIPTOR * pFilterDescriptor OPTIONAL
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaCreatePin()
|
||
|
**
|
||
|
** Utility function creates a new pin in the given filter instance.
|
||
|
**
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaCreatePin(
|
||
|
PKSFILTER pKSFilter,
|
||
|
ULONG ulPinType,
|
||
|
PULONG pulPinId
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaDeletePin()
|
||
|
**
|
||
|
** Utility function deletes a pin from the given filter instance.
|
||
|
**
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaDeletePin(
|
||
|
PKSFILTER pKSFilter,
|
||
|
PULONG pulPinId
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaCreateTopology()
|
||
|
**
|
||
|
** Utility function creates the topology between two pins.
|
||
|
**
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** NULL If no valid pin pairing exists with the
|
||
|
** given input and output pins.
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaCreateTopology(
|
||
|
PKSFILTER pKSFilter,
|
||
|
ULONG InputPinId,
|
||
|
ULONG OutputPinId
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
//===========================================================================
|
||
|
//
|
||
|
// BDA Property and Method Functions
|
||
|
//
|
||
|
//===========================================================================
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyNodeTypes ()
|
||
|
**
|
||
|
** Returns a list of ULONGs.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyNodeTypes(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSPROPERTY pKSProperty,
|
||
|
OUT ULONG * pulProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyPinTypes ()
|
||
|
**
|
||
|
** Returns a list of GUIDS.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyPinTypes(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSPROPERTY pKSProperty,
|
||
|
OUT ULONG * pulProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyTemplateConnections ()
|
||
|
**
|
||
|
** Returns a list of KSTOPOLOGY_CONNECTIONS. The list of connections
|
||
|
** describs how pin types and node types are connected in the template
|
||
|
** topology
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyTemplateConnections(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSPROPERTY pKSProperty,
|
||
|
OUT PKSTOPOLOGY_CONNECTION pConnectionProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyNodeProperties ()
|
||
|
**
|
||
|
** Returns a list of GUIDs.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyNodeProperties(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSP_NODE pKSProperty,
|
||
|
OUT GUID * pguidProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyNodeMethods ()
|
||
|
**
|
||
|
** Returns a list of GUIDs.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyNodeMethods(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSP_NODE pKSProperty,
|
||
|
OUT GUID * pguidProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyNodeEvents ()
|
||
|
**
|
||
|
** Returns a list of GUIDs.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyNodeEvents(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSP_NODE pKSProperty,
|
||
|
OUT GUID * pguidProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyNodeDescriptors ()
|
||
|
**
|
||
|
** Returns a list of BDA Node Descriptors.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyNodeDescriptors(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSPROPERTY pKSProperty,
|
||
|
OUT BDANODE_DESCRIPTOR * pNodeDescriptorProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyGetControllingPinId ()
|
||
|
**
|
||
|
** Gets the ID of the pin on which to submit node properties, methods
|
||
|
** and events.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyGetControllingPinId(
|
||
|
IN PIRP Irp,
|
||
|
IN PKSP_BDA_NODE_PIN Property,
|
||
|
OUT PULONG pulControllingPinId
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaStartChanges ()
|
||
|
**
|
||
|
** Starts a new set of BDA topology changes. All changes to BDA topology
|
||
|
** that have not been committed are ignored. Changes after this will be
|
||
|
** in effect only after BdaCommitChanges.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaStartChanges(
|
||
|
IN PIRP pIrp
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaCheckChanges ()
|
||
|
**
|
||
|
** Checks the changes to BDA topology that have occured since the
|
||
|
** last BdaStartChanges. Returns the result that would have occurred if
|
||
|
** CommitChanges had been called.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaCheckChanges(
|
||
|
IN PIRP pIrp
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaCommitChanges ()
|
||
|
**
|
||
|
** Commits the changes to BDA topology that have occured since the
|
||
|
** last BdaStartChanges.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaCommitChanges(
|
||
|
IN PIRP pIrp
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaGetChangeState ()
|
||
|
**
|
||
|
** Returns the current change state of the BDA topology.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaGetChangeState(
|
||
|
IN PIRP pIrp,
|
||
|
PBDA_CHANGE_STATE pChangeState
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaMethodCreatePin ()
|
||
|
**
|
||
|
** Creates a new pin factory for the given pin type.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaMethodCreatePin(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSMETHOD pKSMethod,
|
||
|
OUT PULONG pulPinFactoryID
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaMethodDeletePin ()
|
||
|
**
|
||
|
** Deletes the given pin factory
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaMethodDeletePin(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSMETHOD pKSMethod,
|
||
|
OPTIONAL PVOID pvIgnored
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaMethodCreateTopology ()
|
||
|
**
|
||
|
** Creates the topology between the two given pin factories.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaMethodCreateTopology(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSMETHOD pKSMethod,
|
||
|
OPTIONAL PVOID pvIgnored
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaPropertyGetPinControl ()
|
||
|
**
|
||
|
** Returns a the BDA ID or BDA Template Type of the Pin.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaPropertyGetPinControl(
|
||
|
IN PIRP Irp,
|
||
|
IN PKSPROPERTY Property,
|
||
|
OUT ULONG * pulProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** BdaValidateNodeProperty ()
|
||
|
**
|
||
|
** Validates that the node property belongs to the current pin.
|
||
|
**
|
||
|
** Arguments:
|
||
|
**
|
||
|
**
|
||
|
** Returns:
|
||
|
**
|
||
|
** Side Effects: none
|
||
|
*/
|
||
|
STDMETHODIMP_(NTSTATUS)
|
||
|
BdaValidateNodeProperty(
|
||
|
IN PIRP pIrp,
|
||
|
IN PKSPROPERTY pProperty
|
||
|
);
|
||
|
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
}
|
||
|
#endif // defined(__cplusplus)
|
||
|
|
||
|
#endif // !defined(_BDATOPGY_)
|
||
|
|