Set di regole di avviso (KMDF)
Usare queste regole per verificare che il driver possa elaborare correttamente i runtime di integrazione in vari contesti e seguire le procedure consigliate da Microsoft.
Contenuto della sezione
Argomento | Descrizione |
---|---|
La regola DeferredRequestCompleted specifica che se una richiesta di I/O presentata alla coda di I/O predefinita di un driver non viene completata nella funzione di callback, ma viene posticipata per un'elaborazione successiva, la richiesta deve essere completata in una funzione di callback di elaborazione posticipata, a meno che la richiesta non venga inoltrata e recapitata al framework o a meno che non venga chiamato il metodo WdfRequestStopAcknowledge . |
|
La regola DriverAttributeChanged specifica che un driver non deve modificare il livello di esecuzione o l'ambito di sincronizzazione di un driver KMDF. |
|
La regola DrvAckIoStop verifica che il driver sia a conoscenza delle richieste in sospeso mentre la coda gestita dall'alimentazione viene spenta e il driver riconosce, completa o annulla di conseguenza le richieste in sospeso. Nel caso di richieste di I/O autogestito, il driver deve anche gestire correttamente queste richieste dalla relativa funzione EvtDeviceSelfManagedIoSuspend . Un driver che non riesce a gestire queste richieste durante un'alimentazione causa il controllo bug 0x9F: DRIVER_POWER_STATE_FAILURE. |
|
La regola EvtIoResumeGetParam specifica che WdfRequestGetParameters non viene chiamato all'interno della funzione di callback EvtIoResumeGetParam . |
|
La regola EvtIoStopGetParam controlla che WdfRequestGetParameters non venga chiamato all'interno del callback EvtIoStop . |
|
La regola EvtIoStopResume specifica che se un driver registra una funzione di callback EvtIoStop e quindi chiama WdfRequestStopAcknowledge con il parametro Requeue uguale a FALSE, il driver deve registrare una funzione di callback EvtIoResume . Il framework recapita le richieste alla funzione di callback EvtIoResume quando il dispositivo entra nuovamente nello stato D0. |
|
La regola EvtSurpriseRemoveNoRequestComplete specifica che i driver WDF non devono completare le richieste dal callback EvtDeviceSurpriseRemoval , ma devono essere usate le funzioni di callback di I/O autogestito. Il callback EvtDeviceSurpriseRemoval non è sincronizzato con il percorso di spegnimento. |
|
La regola FDOPowerPolicyOwnerAPI specifica che se un driver FDO abbandona la proprietà dei criteri di risparmio energia, i metodi WdfDeviceInitSetPowerPolicyEventCallbacks, WdfDeviceAssignS0IdleSettings e WdfDeviceAssignSxWakeSettings possono essere chiamati solo nei percorsi di esecuzione in cui il driver è un proprietario dei criteri di alimentazione. SDV genera un avviso per questa regola. |
|
La regola NoCancelFromEvtSurpriseRemove specifica che i driver WDF non devono annullare le richieste dalla funzione di callback EvtDeviceSurpriseRemoval . È invece necessario usare le funzioni di callback di I/O autogestte. La funzione di callback EvtDeviceSurpriseRemoval non è sincronizzata con il percorso di accensione. |
|
La regola PagedCodeAtD0 specifica che un driver non deve contrassegnare il codice come impaginabile all'interno di funzioni di callback presenti nel percorso del codice di alimentazione. |
|
La regola ParentObjectCheck specifica che il driver deve chiamare WdfMemoryCreate specificando un oggetto padre usando una struttura WDF_OBJECT_ATTRIBUTES . Se il driver non imposta un oggetto padre per l'oggetto memoria framework, il framework imposta il driver come padre predefinito, in modo che, a meno che il driver non elimini in modo esplicito l'oggetto memoria framework rimarrà nella memoria fino a quando l'oggetto driver non viene scaricato. |
|
La regola ReqNotCanceledLocal specifica che se una richiesta contrassegnata come annullabile viene completata in una funzione di callback di coda I/O predefinita, il metodo WdfRequestUnmarkCancelable deve essere chiamato sulla richiesta di I/O prima del completamento. La richiesta di I/O deve essere completata, a meno che la richiesta non venga annullata prima di chiamare WdfRequestUnmarkCancelable. |
|
La regola ReqSendFail specifica che un driver deve impostare lo stato di completamento corretto nei casi in cui il metodo WdfRequestSend potrebbe non riuscire. |
|
La regola RequestCompletedLocal specifica che se una richiesta di I/O non viene completata nelle funzioni di callback EvtIoDefault, EvtIoRead, EvtIoWrite, EvtIoDeviceControl e EvtIoInternalDeviceControl e se WdfRequestMarkCancelable non è stato chiamato nella richiesta all'interno della funzione di callback, potrebbe verificarsi un problema con il completamento della richiesta nel codice del driver. |
|
Se il driver client chiama WdfUsbTargetDeviceCreateWithParameters e specifica la versione del contratto client USBD_CLIENT_CONTRACT_VERSION_602 nella struttura di WDF_USB_DEVICE_CREATE_CONFIG (per usare le nuove funzionalità dello stack di driver USB per Windows 8), le DDI che usano un contesto DI BILANCIAMENTo internamente userebbero solo se si applica una delle condizioni preliminari seguenti: |
|
La regola SyncReqSend specifica che tutte le richieste di invio sincrone vengono eseguite usando metodi di interfaccia del driver del dispositivo KMDF specifici della funzione sincrona e che i metodi hanno un valore di timeout diverso da zero impostato. |
|
La regola SyncReqSend2 specifica che le richieste sincrone inviate hanno un valore di timeout diverso da zero impostato. |
Per selezionare il set di regole di avviso
Selezionare il progetto driver (con estensione vcxProj) in Microsoft Visual Studio. Dal menu Driver fare clic su Launch Static Driver Verifier....From the Driver menu, click Launch Static Driver Verifier....
Fare clic sulla scheda Regole . In Set di regole selezionare Avviso.
Per selezionare il set di regole predefinito da una finestra del prompt dei comandi per gli sviluppatori di Visual Studio, specificare Warning.sdv con l'opzione /check . Ad esempio:
msbuild /t:sdv /p:Inputs="/check:Warning.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Per altre informazioni, vedere Using Static Driver Verifier to Find Defects in Drivers and Static Driver Verifier commands (MSBuild).