An AVStream minidriver describes itself and the filter types it supports by providing nested descriptor structures in the call to KsInitializeDriver. Each key component -- the device, the filter factory, and the pin factory -- has an associated descriptor.
In the device descriptor, the FilterDescriptors member points to an array of KSFILTER_DESCRIPTOR structures that describe the types of filters this device can create. AVStream clients can call KsCreateFilterFactory to dynamically add filter factories.
A KSFILTER_DESCRIPTOR indicates how many pin types the filter supports, the KS categories under which the filter is to be registered, and the topology of the filter. Inside each filter descriptor, the minidriver provides a pointer to an array of KSPIN_DESCRIPTOR_EX structures. Each of these pin descriptors describes a pin type that this filter can instantiate. You can create additional pin factories by calling KsFilterCreatePinFactory.
Typically, AVStream minidrivers lay out static descriptor tables in their source and call KsInitializeDriver to perform the setup work. For more information about initializing your driver, see Initializing an AVStream Minidriver.
There are other types of descriptors as well, such as the node descriptor KSNODE_DESCRIPTOR, which describes a given topology node.
The dispatch table is common to each of the three main descriptor types. See AVStream Dispatch Tables.