Condividi tramite


Chiamata di COPP DDI da un componente User-Mode

Questa sezione si applica solo a Windows Server 2003 SP1 e versioni successive e Windows XP SP2 e versioni successive.

Un componente in modalità utente, ad esempio vmR, avvia le chiamate all'DDI COPP.

In modo che vmR possa inviare una notifica al driver miniport video per applicare la protezione all'output video della scheda grafica, il driver di visualizzazione deve implementare le funzioni di callback di compensazione del movimento definite dai membri della struttura DD_MOTIONCOMPCALLBACKS .

Per semplificare lo sviluppo dei driver, i writer driver possono usare un modello di codice di compensazione del movimento e implementare le funzioni di esempio IOCTLS COPP e COPP. Il driver di visualizzazione e il miniport video usano IOCTLs COPP per comunicare. Per altre informazioni, vedere Chiamata di COPP DDI dal driver di visualizzazione. Il modello di codice di compensazione del movimento avvia le chiamate alle funzioni di esempio COPP. Per altre informazioni sull'uso di un modello di codice di compensazione movimento, vedere Codice di esempio per dispositivi DirectX VA.

I passaggi seguenti illustrano in che modo vmR avvia le chiamate all'DDI COPP:

  1. Quando vmR viene aggiunto a un grafico di filtro, avvia una chiamata alla funzione di callback DdMoCompGetGuids fornita dal driver visualizzato per recuperare l'elenco di dispositivi supportati dal driver. Il membro GetMoCompGuids della struttura DD_MOTIONCOMPCALLBACKS punta a questa funzione di callback. Per altre informazioni su un grafico di filtro, vedere Architettura del minidriver KS.

  2. Se il GUID del dispositivo DirectX VA COPP è presente, vmR avvia una chiamata alla funzione di callback DdMoCompCreate per inizializzare un dispositivo COPP nella sessione video corrente. Il membro CreateMoComp di DD_MOTIONCOMPCALLBACKS punta alla funzione di callback. Nella chiamata DdMoCompCreate viene specificato un puntatore al GUID del dispositivo COPP nel membro lpGuid della struttura DD_CREATEMOCOMPDATA . Il GUID del dispositivo COPP è definito come segue:

    DEFINE_GUID(DXVA_COPPDevice, 0xd2457add,0x8999,0x45ed,0x8a,0x8a,0xd1,0xaa,0x04,0x7b,0xa4,0xd5);
    

    Il driver di visualizzazione deve comunicare con il driver miniport video usando un IOCTL COPP. Se il driver miniport video implementa una funzione di esempio COPPOpenVideoSession , la funzione di callback DdMoCompCreate avvia la chiamata a COPPOpenVideoSession.

  3. Per determinare la lunghezza del certificato hardware hardware a lunghezza variabile che deve essere usato per la sessione video corrente, vmR avvia una chiamata alla funzione di callback DdMoCompRender fornita dal driver visualizzato. Il membro RenderMoComp di DD_MOTIONCOMPCALLBACKS punta alla funzione di callback. Nella chiamata DdMoCompRender il membro dwFunction di DD_RENDERMOCOMPDATA è impostato sul valore DXVA_COPPGetCertificateLengthFnCode (definito in dxva.h). Il driver di visualizzazione non riceve alcun input in questa chiamata; ovvero, il membro lpInputData di DD_RENDERMOCOMPDATA è NULL. Il driver di visualizzazione restituisce la lunghezza del certificato tramite il membro lpOutputData di DD_RENDERMOCOMPDATA; lpOutputData punta a un tipo di dati DWORD.

    Il driver di visualizzazione deve comunicare con il driver miniport video usando un IOCTL COPP. Se il driver miniport video implementa una funzione di esempio COPPGetCertificateLength , la funzione di callback DdMoCompRender avvia la chiamata a COPPGetCertificateLength.

  4. Per recuperare il certificato usato dall'hardware grafico, vmR avvia una chiamata alla funzione di callback DdMoCompRender fornita dal driver visualizzato. Nella chiamata DdMoCompRender il membro dwFunction di DD_RENDERMOCOMPDATA è impostato sul valore DXVA_COPPKeyExchangeFnCode (definito in dxva.h). Il driver di visualizzazione non riceve alcun input in questa chiamata; ovvero, il membro lpInputData di DD_RENDERMOCOMPDATA è NULL. Il membro lpBufferInfo di DD_RENDERMOCOMPDATA punta a una singola superficie di memoria di sistema RGB32 che contiene lo spazio necessario per il driver di visualizzazione per archiviare il certificato. Il driver di visualizzazione restituisce il numero casuale a 128 bit generato tramite il membro lpOutputData di DD_RENDERMOCOMPDATA.

    Il driver di visualizzazione deve comunicare con il driver miniport video usando un IOCTL COPP. Se il driver miniport video implementa una funzione di esempio COPPKeyExchange , la funzione di callback DdMoCompRender avvia la chiamata a COPPKeyExchange.

  5. Per impostare la sessione video corrente su modalità protetta, vmR avvia una chiamata alla funzione di callback DdMoCompRender fornita dal driver visualizzato. Nella chiamata DdMoCompRender il membro dwFunction di DD_RENDERMOCOMPDATA è impostato sul valore DXVA_COPPSequenceStartFnCode (definito in dxva.h). Il membro lpInputData di DD_RENDERMOCOMPDATA passa i codici di inizio della sequenza di input e della sequenza di stato al driver visualizzato puntando a una struttura DXVA_COPPSignature completata. Il driver di visualizzazione non restituisce alcun output; ovvero, il membro lpOutputData di DD_RENDERMOCOMPDATA è NULL.

    Il driver di visualizzazione deve comunicare con il driver miniport video usando un IOCTL COPP. Se il driver miniport video implementa una funzione di esempio COPPSequenceStart , la funzione di callback DdMoCompRender avvia la chiamata a COPPSequenceStart.

  6. Per impostare il livello di protezione sul connettore fisico associato al dispositivo DirectX VA COPP, vmR avvia una chiamata alla funzione di callback DdMoCompRender fornita dal driver visualizzato. Nella chiamata DdMoCompRender il membro dwFunction di DD_RENDERMOCOMPDATA è impostato sul valore DXVA_COPPCommandFnCode (definito in dxva.h). Il membro lpInputData di DD_RENDERMOCOMPDATA passa i parametri di input al driver di visualizzazione puntando a una struttura DXVA_COPPCommand completata. Il driver di visualizzazione non restituisce alcun output; ovvero, il membro lpOutputData di DD_RENDERMOCOMPDATA è NULL.

    Il driver di visualizzazione deve comunicare con il driver miniport video usando un IOCTL COPP. Se il driver miniport video implementa una funzione di esempio COPPCommand , la funzione di callback DdMoCompRender avvia la chiamata a COPPCommand.

  7. Per recuperare le informazioni di protezione relative al connettore fisico usato, vmR avvia una chiamata alla funzione di callback DdMoCompRender fornita dal driver visualizzato. Nella chiamata DdMoCompRender il membro dwFunction di DD_RENDERMOCOMPDATA è impostato sul valore DXVA_COPPQueryStatusFnCode (definito in dxva.h). Il membro lpInputData di DD_RENDERMOCOMPDATA passa i parametri di input al driver di visualizzazione puntando a una struttura DXVA_COPPStatusInput completata. Il driver di visualizzazione restituisce l'output tramite il membro lpOutputData di DD_RENDERMOCOMPDATA; lpOutputData punta a una struttura DXVA_COPPStatusOutput .

    Il driver di visualizzazione deve comunicare con il driver miniport video usando un IOCTL COPP. Se il driver miniport video implementa una funzione di esempio COPPQueryStatus , la funzione di callback DdMoCompRender avvia la chiamata a COPPQueryStatus.

  8. Quando vmR non deve più eseguire altre operazioni COPP, viene chiamata la funzione di callback DdMoCompDestroy fornita dal driver visualizzato. Il membro DestroyMoComp di DD_MOTIONCOMPCALLBACKS punta alla funzione di callback.

    Il driver di visualizzazione deve comunicare con il driver miniport video usando un IOCTL COPP. Se il driver miniport video implementa una funzione di esempio COPPCloseVideoSession , la funzione di callback DdMoCompDestroy avvia la chiamata a COPPCloseVideoSession.

  9. I driver rilasciano quindi tutte le risorse usate dal dispositivo DirectX VA COPP.