|
|
//==========================================================================;
//
// 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_)
|