Partager via


Plug-in de gestionnaire d’interface

Vous pouvez écrire un plug-in de gestionnaire d’interface pour fournir un accès en mode utilisateur par programme à un jeu de propriétés spécifique au pilote exposé par un minidriver KS. Tout d’abord, inscrivez votre objet comme décrit dans Inscription des plug-ins de proxy KS.

Votre classe de plug-in d’interface peut dériver de CUnknown :

class CMyPluginInterface : public CUnknown
{
public:
    // creation method
    static CUnknown* CALLBACK CreateInstance( LPUNKNOWN piOuterUnknown, HRESULT* phResult );
private:
 CMyPluginInterface( IKsPropertySet* piKsPropertySet );
    IKsPropertySet* m_piKsPropertySet;
};

Le plug-in d’interface est une interface COM fournie par le fournisseur qui s’agrège avec le proxy KS fourni par MS au moment de la création.

Plus précisément, la méthode CreateInstance du plug-in reçoit un pointeur vers le proxy KS en tant qu’inconnu externe.

Vous pouvez ensuite interroger cet objet externe pour obtenir un pointeur vers l’interface IKsPropertySet fournie par MS :

hResult = piOuterUnknown->QueryInterface(
                __uuidof( piKsPropertySet ),
                 &piKsPropertySet );

Ensuite, à partir de CreateInstance, appelez le constructeur de votre interface pour créer un instance de votre objet de gestionnaire d’interface.

Fournissez le pointeur vers IKsPropertySet en tant que paramètre dans l’appel du constructeur. Le constructeur conserve ensuite le pointeur vers iKsPropertySet comme membre m_piKsPropertySet dans la déclaration précédente.

Vous pouvez maintenant implémenter des méthodes Get et Set dans votre classe qui appellent respectivement IKsPropertySet::Get et IKsPropertySet::Set pour manipuler les propriétés exposées par le pilote.

Vous pouvez également interroger l’inconnu externe pour rechercher un pointeur vers son interface IKsObject . Appelez ensuite IKsObject::KsGetObjectHandle pour obtenir un handle de fichier. Vous manipulez maintenant les propriétés de l’appareil en appelant KsSynchronousIoControlDevice avec ce handle de fichier.