Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En BDA-minidrivrutin bearbetar metodbegäranden för KSMETHODSETID_BdaDeviceConfiguration-metoduppsättningen för att konfigurera en filterinstans för minidrivrutinen i den nuvarande filtergrafen.
I följande kodfragment skickas två av metoderna i KSMETHODSETID_BdaDeviceConfiguration-metoduppsättningen direkt till BDA-supportbiblioteket och den återstående metoden fångas först upp av BDA-minimejeln innan den skickas till BDA-supportbiblioteket.
//
// BDA Device Configuration Method Set
//
// Defines the dispatch routines for the filter level
// topology configuration methods
//
DEFINE_KSMETHOD_TABLE(BdaDeviceConfigurationMethods)
{
DEFINE_KSMETHOD_ITEM_BDA_CREATE_PIN_FACTORY(
BdaMethodCreatePin,
NULL
),
DEFINE_KSMETHOD_ITEM_BDA_DELETE_PIN_FACTORY(
BdaMethodDeletePin,
NULL
),
DEFINE_KSMETHOD_ITEM_BDA_CREATE_TOPOLOGY(
CFilter::CreateTopology,
NULL
)
};
/*
** CreateTopology()
**
** Keeps track of topology association between input and output pins
**
*/
NTSTATUS
CFilter::
CreateTopology(
IN PIRP pIrp,
IN PKSMETHOD pKSMethod,
PVOID pvIgnored
)
{
NTSTATUS Status = STATUS_SUCCESS;
CFilter * pFilter;
ULONG ulPinType;
PKSFILTER pKSFilter;
ASSERT( pIrp);
ASSERT( pKSMethod);
// Obtain a "this" pointer for the method.
//
// Because this function is called directly from the property
// dispatch table, get pointer to the underlying object.
//
pFilter = FilterFromIRP( pIrp);
ASSERT( pFilter);
if (!pFilter)
{
Status = STATUS_INVALID_PARAMETER;
goto errExit;
}
// Let the BDA support library create the standard topology.
// It will also validate the method, instance count, etc.
//
Status = BdaMethodCreateTopology( pIrp, pKSMethod, pvIgnored);
if (Status != STATUS_SUCCESS)
{
goto errExit;
}
// This is where the filter can keep track of associated pins.
//
errExit:
return Status;
}
KSMETHOD_BDA_CREATE_TOPOLOGY-metodbegäran anropar minimejselns CFilter::CreateTopology-metod. Den här metoden anropar BDA-stödbiblioteksfunktionen BdaMethodCreateTopology för att skapa en topologi mellan filterstift. Den här funktionen skapar faktiskt en topologistruktur i Ring 3, som för andra egenskapsuppsättningar återspeglar de kända anslutningarna för filtret. En BDA-minidrivrutin ska fånga upp KSMETHOD_BDA_CREATE_TOPOLOGY metodbegäran enligt föregående kodfragment om den minidrivrutinen måste skicka särskilda instruktioner till maskinvaran när den ansluter specifika pin-typer, till exempel om BDA-enheten använder maskinvara för demultiplexering och skapar ett valfritt antal utgångsstift som ansluts från en enda ingångsstift.