Condividi tramite


Test PnP (Nozioni fondamentali sui dispositivi)

I test PnP di Device Fundamentals forzano un driver a gestire quasi tutti i irP PnP; Tuttavia, ci sono tre aree sottolineate in particolare: rimozione, ribilanciamento e rimozione di sorprese. Il test PnP fornisce un meccanismo per testare ognuno di questi elementi separatamente o per testarli tutti insieme (ovvero, come test di stress). Questo test PnP viene eseguito usando una combinazione di chiamate API in modalità utente (tramite l'applicazione di test) e chiamate API in modalità kernel (tramite un driver di filtro superiore).

Test PNP

I test Plug and Play (PnP) eseguono vari percorsi di codice correlati a PnP nei componenti driver e modalità utente. I test PnP devono essere eseguiti con Driver Verifier abilitato nel computer di test. Per informazioni sull'abilitazione di Driver Verifier, vedere Proprietà di Driver Verifier per i progetti driver.

Test Descrizione

Disabilitare il supporto per i test dei dispositivi avanzati (EDT)

Questo test disinstalla il driver del filtro di test (msdmfilt.sys) come filtro superiore nei dispositivi specificati usando il parametro DQ. Questo filtro di test viene installato come parte dei test in esecuzione in questa categoria di test

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

IOType

PNP (disabilitare e abilitare) il riavvio con I/O prima e dopo

Questo test esegue la disabilitazione/abilitazione/abilitazione PnP di base e I/O nei dispositivi con un riavvio del sistema.

Test binario: Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc

Metodo di test: PNP_DisableEnable_Reboot_With_IO_Before_And_After

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

IOPeriod

PNP (disabilitare e abilitare) con I/O prima e dopo

Questo test esegue l'I/O e la disabilitazione/abilitazione PnP di base nei dispositivi.

Questo test esegue le operazioni seguenti:

  1. Verifica che nel sistema non siano presenti dispositivi che segnalano codici di problema del dispositivo.
  2. Testa le operazioni di I/O in ogni dispositivo del sistema usando plug-in I/O semplici WDTF. Per altre informazioni, vedere Plug-in WDTF Simple I/O forniti.
  3. Disabilita e abilita ogni dispositivo nel sistema usando interfacce di azione WDTF PnP, vedere Metodi IWDTFPNPAction2::D isableDevice e IWDTFPNPAction2::EnableDevice per altre informazioni.
  4. Verifica che nel sistema non siano presenti dispositivi che segnalano codici di problema del dispositivo.
  5. Testa le operazioni di I/O in ogni dispositivo del sistema usando plug-in I/O semplici WDTF. Per altre informazioni, vedere Plug-in WDTF Simple I/O forniti.
  6. Ripete i passaggi da 3 a 5 volte.

Test binario: Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc

Metodo di test: PNP_DisableEnable_With_IO_Before_And_After

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

IOPeriod

PNP Cancel Remove Device test

Questo test usa il driver di filtro EDT per inviare IRP_MN_CANCEL_REMOVE_DEVICE agli stack di dispositivi di destinazione.

Per altre informazioni, vedere Informazioni sui test di rimozione dei dispositivi.

File binario di test: Devfund_PnPDTest.dll

Metodo di test: PNPCancelRemoveDevice

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

PNP Cancel Stop Device test

Questo test usa il driver di filtro EDT per inviare IRP_MN_CANCEL_STOP_DEVICE agli stack di dispositivi di destinazione.

Per altre informazioni, vedere Informazioni sui test di ribilanciamento.

File binario di test: Devfund_PnPDTest.dll

Metodo di test: PNPCancelStopDevice

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

PNP DIF Remove Device Test

Questo test usa l'API SetupDi per inviare una richiesta di DIF_REMOVE per i programmi di installazione per rimuovere il dispositivo.

File binario di test: Devfund_PnPDTest.dll

Metodo di test: PNPDIFRemoveAndRescanParentDevice

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

PNP Disable and Enable Device test

Questo test disabilita e abilita i dispositivi di destinazione.

File binario di test: Devfund_PnPDTest.dll

Metodo di test: PNPDisableAndEnableDevice

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

IOType

PNP Rebalance Fail Restart Device test

Questo test usa il driver di filtro EDT per provare a inviare IRP_MN_STOP_DEVICE agli stack di dispositivi di destinazione. Il driver di filtro EDT ha quindi esito negativo IRP_MN_START_DEVICE richieste (che seguono IRP_MN_STOP_DEVICE richieste) per attivare la rimozione a sorpresa dei dispositivi di destinazione.

Per altre informazioni, vedere Informazioni sui test di ribilanciamento.

File binario di test: Devfund_PnPDTest.dll

Metodo di test: PNPTryStopDeviceAndFailRestart

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Test del dispositivo PNP Rebalance Request New Resources

Questo test usa il driver di filtro EDT per provare a inviare IRP_MN_STOP_DEVICE agli stack di dispositivi di destinazione. Modifica anche i requisiti delle risorse dei dispositivi per ottimizzare le probabilità che le nuove risorse vengano allocate ai dispositivi.

Per altre informazioni, vedere Informazioni sui test di bilanciamento.

Test binario: Devfund_PnPDTest.dll

Metodo di test: PNPTryStopDeviceRequestNewResourcesAndRestartDevice

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

PNP Remove Device Test

Questo test determina l'invio di IRP_MN_QUERY_REMOVE_DEVICE e IRP_MN_REMOVE_DEVICE agli stack di dispositivi di destinazione.

Per altre informazioni, vedere Informazioni sui test di rimozione dei dispositivi.

Test binario: Devfund_PnPDTest.dll

Metodo di test: PNPRemoveAndRestartDevice

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Test del dispositivo PNP Stop (Rebalance)

Questo test usa il driver di filtro EDT per provare a inviare IRP_MN_STOP_DEVICE agli stack di dispositivi di destinazione.

Per altre informazioni, vedere Informazioni sui test di bilanciamento.

Test binario: Devfund_PnPDTest.dll

Metodo di test: PNPTryStopAndRestartDevice

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

PNP Surprise Remove Device test

Questo test usa il driver di filtro EDT per inviare IRP_MN_SURPRISE_REMOVAL agli stack di dispositivi di destinazione.

Per altre informazioni, vedere Informazioni sul test di rimozione delle sorprese.

Test binario: Devfund_PnPDTest.dll

Metodo di test: PNPSurpriseRemoveAndRestartDevice

Parametri: - vedere Parametri di test dei concetti fondamentali del dispositivo

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Informazioni sui test di rimozione dei dispositivi

  • PNP Remove Device Test
  • PNP Cancel Remove Device test

Il test Di rimozione dei dispositivi include IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE e IRP_MN_REMOVE_DEVICE.

Il test tenta di installare il driver di filtro superiore nello stack di dispositivi di destinazione. Questo tentativo comporta una query-remove IRP.

Se questa query-remove IRP ha esito negativo, il test riavvia il computer per ottenere il driver di filtro nello stack di dispositivi. Se la richiesta di rimozione non è veto, lo stack di dispositivi verrà rimosso e riavviato con il driver di filtro nello stack di dispositivi.

Il test, usando le API di installazione, causa l'invio di un'IRP di rimozione di query allo stack di dispositivi. Il driver di filtro ha esito negativo in questa richiesta di rimozione, quindi viene inviato un'istanza di IRP annulla. Il driver di filtro asserisce che la rimozione annulla è riuscita.

Successivamente, l'applicazione di test chiama il programma di installazione della classe appropriato e tutti i co-installer registrati per disabilitare o abilitare o rimuovere o rinumerare il dispositivo (questo verifica la gestione della classe e dei co-installer di DIF_PROPERTYCHANGE con DICS_DISABLE, DICS_ENABLE e DICS_PROPCHANGE). Quando si riceve IRP_MN_REMOVE_DEVICE, il driver di filtro afferma che i driver inferiori sono stati completati correttamente.

Ognuno di questi passaggi implica una richiesta di rimozione preliminare. Se tale richiesta viene veto, il dispositivo non verrà rimosso. È possibile scegliere di rimuovere una richiesta quando appropriato, ad esempio durante lo streaming di video in una fotocamera USB o se il dispositivo di destinazione si trova nel percorso di avvio o paging. Tenere presente che in genere tutte le richieste di rimozione non sono valide. L'esito negativo di tutte le richieste di rimozione non garantisce che il driver non riceva mai una rimozione perché un'IRP rimossa verrà comunque rilasciata dopo una rimozione a sorpresa o se nessuno nello stack di dispositivi ha esito negativo su un'IRP iniziale.

Informazioni sul test di rimozione delle sorprese

  • PNP Surprise Remove Device test

Il test di rimozione delle sorprese include IRP_MN_SURPRISE_REMOVAL seguito da IRP_MN_REMOVE_DEVICE.

Come per i test precedenti, l'applicazione di test tenterà di aggiungere un filtro superiore allo stack di dispositivi di destinazione e quindi riavviare lo stack. Se questo tentativo non ha esito positivo, il test riavvia il computer.

Quando viene attivata dall'applicazione di test, il driver di filtro causerà l'invio di un IRP_MN_SURPRISE_REMOVAL allo stack di dispositivi, seguito da un IRP_MN_REMOVE_DEVICE. Il driver di filtro asserisce che entrambi questi IRP vengono completati correttamente da driver inferiori.

Al termine del test di rimozione delle sorprese, il dispositivo verrà disinstallato e rinumerato, rimuovendo anche il driver di filtro dallo stack.

Informazioni sui test di bilanciamento

  • Test del dispositivo PNP Stop (Rebalance)
  • Test del dispositivo PNP Rebalance Request New Resources
  • Test del dispositivo PNP Rebalance Fail Restart Device
  • Test di PNP Cancel Stop Device

Come per il test di rimozione, l'applicazione di test tenta di aggiungere un filtro superiore allo stack di dispositivi di destinazione e quindi riavviare lo stack di dispositivi usando SetupDiCallClassInstaller con DIF_PROPERTYCHANGE. Se questo tentativo non ha esito positivo, ovvero se qualcuno nello stack di dispositivi di destinazione ha avuto esito negativo, il test riavvia il computer per testare il ribilanciamento.

A seconda del test di ribilanciamento scelto, si verificano gli eventi seguenti:

  1. Test del dispositivo PNP Stop (Rebalance) Questo test avvia una procedura di ribilanciamento che comporta l'IRP_MN_QUERY_STOP_DEVICE IRP PnP al driver del dispositivo.

    Se qualsiasi driver nello stack ha esito negativo, questa procedura di bilanciamento viene abbandonata. Si noti che in Windows Vista è disponibile il supporto per il ribilanciamento a più livelli. Se viene avviato un ribilanciamento in un nodo dispositivo non foglia, tutti gli stack di dispositivi presenti nell'albero dei dispositivi con quel nodo del dispositivo come radice passano anche attraverso il bilanciamento. E se uno degli stack di dispositivi figlio non riesce, l'intera procedura di ribilanciamento viene abbandonata. Pertanto, i driver non devono riuscire a eseguire query senza un motivo autentico per farlo. In caso di errore, il gestore PnP invia l'arresto annulla (IRP_MN_CANCEL_STOP) a tutti gli stack di dispositivi che erano stati inviati.

    Se tutti gli stack di dispositivi coinvolti superano l'arresto della query, il test continua con il ribilanciamento e invia il IRP_MN_QUERY_RESOURCE_REQUIREMENTS e IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPS per trovare il requisito di risorsa dei dispositivi.

    Dopo questo punto, due percorsi diversi sono possibili a seconda che il dispositivo di destinazione consuma qualsiasi risorsa o meno:

    • Se il dispositivo non usa risorse, il gestore PnP invia un arresto annulla (IRP_MN_CANCEL_STOP_DEVICE) come ottimizzazione.

      Se il dispositivo usa effettivamente le risorse, la procedura di bilanciamento viene completata con i IRP_MN_STOP_DEVICE e IRP_MN_START_DEVICE IRP.

    Con questa opzione, le risorse del dispositivo non cambiano.

  2. Test di PNP Cancel Stop Device: questo test avvia una procedura di ribilanciamento, ma il driver di filtro non riesce intenzionalmente la query arresta l'IRP. L'ordine dei provider di integrazione sembra IRP_MN_QUERY_STOP_DEVICE (che non è riuscito dal driver di filtro durante l'arrivo, causando un annullamento del ribilanciamento) e IRP_MN_CANCEL_STOP_DEVICE.

    Con questa opzione, le risorse del dispositivo non cambiano

  3. Test del dispositivo PNP Rebalance Request New Resources Questo test avvia un ribilanciamento e modifica anche il requisito della risorsa del dispositivo per ottimizzare le probabilità che le nuove risorse vengano allocate al dispositivo. Questa opzione consente anche a un dispositivo senza risorse di passare effettivamente attraverso la procedura completa di ribilanciamento:

    1. Per prima cosa viene avviato il semplice ribilanciamento, causando i seguenti IRP:

      • IRP_MN_QUERY_STOP_DEVICE (presupponendo che questa IRP venga passata da tutti i driver. Il test ha già trattato il caso in cui l'IRP non è riuscita.
      • IRP_MN_QUERY_RESOURCE_REQUIREMENTS
      • IRP_MN_FILTER_RESOURCE_REQUIREMENTS. In risposta a questo IRP, durante l'aumento, il driver di filtro esegue un'azione in base al fatto che il dispositivo utilizza o meno risorse:
        • Se il dispositivo non ha requisiti di risorsa, il filtro assegna una risorsa fittizia.
        • Se il dispositivo ha un requisito di risorsa, tenta di ristrutturare l'elenco dei requisiti delle risorse in modo da massimizzare la probabilità di modificare l'assegnazione corrente. Ad esempio, se un dispositivo richiede 2 byte di memoria in qualsiasi punto compreso tra 00 e FF e attualmente è assegnato 3A-3B, modificare in modo che il nuovo requisito di risorsa (in ordine di preferenza) sia simile a 00-39 o 3C-FF o 3A-3B. Analogamente, se l'elenco dei requisiti delle risorse del dispositivo presenta requisiti alternativi, cambierà l'ordine in modo che il requisito alternativo venga riportato in precedenza nell'elenco.
    2. Ora il dispositivo dovrebbe completare sempre la procedura di ribilanciamento.

      IRP_MN_STOP_DEVICE

      IRP_MN_START_DEVICE (nuove risorse allocate. Se sono stati creati requisiti falsi, mascherare le nuove risorse dai driver effettivi.

  4. PNP Rebalance Fail Restart Device Test Questo test avvia un ribilanciamento, ma quando il driver di filtro ottiene l'inizio dopo il ribilanciamento, ha deliberatamente esito negativo, causando la rimozione di sorpresa IRP seguito da IRP di rimozione.

    Innanzitutto, avvia la procedura di ribilanciamento e verifica che il driver ottenga un arresto e un avvio generando un requisito di risorsa fittizia per un dispositivo che non utilizza risorse.

    • IRP_MN_QUERY_STOP_DEVICE (presupponendo che questo IRP venga passato da tutti i driver. Il test ha già trattato il caso in cui l'IRP non è riuscito.
    • IRP_MN_QUERY_RESOURCE_REQUIREMENTS
    • IRP_MN_FILTER_RESOURCE_REQUIREMENTS (se il requisito effettivo della risorsa è Null, assegnare un requisito di risorsa fittizia, quindi è presente un arresto e un avvio).
    • IRP_MN_STOP_DEVICE
    • IRP_MN_START_DEVICE (il filtro non riesce durante l'operazione. Questa azione causa la rimozione della sorpresa IRP.
    • IRP_MN_SURPRISE_REMOVAL
    • IRP_MN_REMOVE

    Al termine del test di ribilanciamento, il dispositivo verrà disinstallato e rinumerato, rimuovendo anche il driver di filtro dallo stack.

Codici di errore del dispositivo

Se il test restituisce un messaggio di errore che indica che lo stato del dispositivo non è OK, è possibile ottenere altre informazioni sullo stato del dispositivo tramite Gestione dispositivi. Per un riepilogo dei vari codici di errore del dispositivo, vedere Gestione dispositivi Messaggi di errore.

Eseguire il debug degli errori di installazione usando i log dell'API di installazione

I log dell'API di installazione (setupapi.app.log e setupapi.dev.log) possono contenere informazioni utili per eseguire il debug degli errori di installazione del driver registrati da questo test. I log dell'API di installazione sono disponibili nella directory %windir%\inf\ nel sistema di test.

Per aumentare la dettaglio e la potenziale utilità di questi log, impostare la chiave del Registro di sistema seguente su 0x2000FFFF prima di eseguire il test reinstalla:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel

Come testare un driver in fase di esecuzione con Visual Studio

Come selezionare e configurare i test dei concetti fondamentali del dispositivo

Test fondamentali del dispositivo

Sono stati forniti plug-in I/O semplici WDTF

Come testare un driver in fase di esecuzione da un prompt dei comandi