Condividi tramite


Plug-in del gestore dell'interfaccia

È possibile scrivere un plug-in del gestore dell'interfaccia per fornire l'accesso in modalità utente a livello di codice a un set di proprietà specifico del driver esposto da un minidriver KS. Prima di tutto, registrare l'oggetto come descritto in Registrazione dei plug-in proxy KS.

La classe plug-in dell'interfaccia può derivare da CUnknown:

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

Il plug-in dell'interfaccia è un'interfaccia COM fornita dal produttore che si aggrega con il proxy KS fornito da MS al momento della creazione.

In particolare, il metodo CreateInstance del plug-in riceve come parametro un puntatore al proxy KS come elemento sconosciuto esterno.

È quindi possibile interrogare questo oggetto esterno per ottenere un puntatore all'interfaccia IKsPropertySet fornita da Microsoft.

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

Quindi, da CreateInstance, richiamare il costruttore dell'interfaccia per creare un'istanza dell'oggetto gestore dell'interfaccia.

Specificare il puntatore a IKsPropertySet come parametro nella chiamata del costruttore. Nella dichiarazione precedente, il costruttore mantiene quindi il puntatore a iKsPropertySet come membro m_piKsPropertySet.

È ora possibile implementare i metodi Get e Set nella classe che chiamano rispettivamente IKsPropertySet::Get e IKsPropertySet::Set per modificare le proprietà esposte dal driver.

In alternativa, è possibile eseguire una query sull'ignoto esterno per ottenere un puntatore alla sua interfaccia IKsObject. Quindi, chiamare IKsObject::KsGetObjectHandle per ottenere un handle di file. A questo punto è possibile modificare le proprietà del dispositivo chiamando KsSynchronousIoControlDevice con questo handle di file.