Annotazioni SAL 2.0 per i driver Windows

Microsoft Source Code Annotation Language (SAL) include annotazioni specifiche per l'analisi dei driver di Windows e del codice kernel correlato. Il linguaggio di annotazione consente di descrivere le proprietà di funzioni, parametri, valori restituiti, strutture e campi struttura. Le annotazioni sono come i commenti aggiunti al codice e vengono ignorate dal compilatore, ma vengono usate dagli strumenti di analisi statica. L'uso di annotazioni consente di migliorare l'efficacia dello sviluppatore, migliora l'accuratezza dei risultati dell'analisi statica e consente agli strumenti di determinare meglio se esiste un bug specifico. Le annotazioni del driver non sono destinate all'uso nel codice non correlato al driver o non al kernel. Le annotazioni del driver sono definite in Driverspecs.h.

Nota Windows 8 introduce SAL 2.0, che sostituisce SAL 1.0. Per informazioni su SAL 2.0, vedere Uso delle annotazioni SAL per ridurre i difetti del codice C/C++. SAL 2.0 sostituisce SAL 1.0. SAL 2.0 deve essere usato con Windows Driver Kit (WDK) 8 per Windows 8. Per informazioni su SAL 1.0 per i driver, vedere la documentazione fornita con WDK per Windows 7.

Annotazioni IRQL

Usare le annotazioni IRQL per specificare l'intervallo di livelli IRQL in cui deve essere eseguita una funzione. Le annotazioni IRQL consentono allo strumento di analisi del codice di individuare in modo più accurato gli errori.

_IRQL_requires_max_(value)

_IRQL_requires_min_(value)

_IRQL_raises_(value)

_IRQL_requires_(value)

_IRQL_raises_(value)

_IRQL_saves_

_IRQL_restores_

_IRQL_saves_global_(kind, param)

_IRQL_restores_global_(kind, param)

_IRQL_always_function_min_(value)

_IRQL_always_function_max_(value)

_IRQL_requires_same_

_IRQL_is_cancel_ - Usare l'annotazione _IRQL_is_cancel per garantire il comportamento corretto di una funzione di callback DRIVER_CANCEL.

Annotazioni a virgola mobile per i driver

_Kernel_float_saved_

_Kernel_float_restored_

_Kernel_float_used_

Usare le annotazioni a virgola mobile per i driver per consentire allo strumento di analisi del codice di rilevare l'uso di virgola mobile nel codice in modalità kernel e per segnalare errori se lo stato a virgola mobile non è protetto correttamente.

annotazione DO_DEVICE_INITIALIZING

_Kernel_clear_do_init_

Usare l'annotazione DO_DEVICE_INITIALIZING per specificare se la funzione con annotazioni deve cancellare il bit DO_DEVICE_INITIALIZING nel campo Flags dell'oggetto dispositivo.

annotazione Kernel_IoGetDmaAdapter

_Kernel_IoGetDmaAdapter_

Usare l'annotazione Kernel_IoGetDmaAdapter per indirizzare gli strumenti di analisi del codice per cercare l'uso improprio dei puntatori DMA.

Annotazioni per gli operandi interlock

_Interlocked_operand_

Usare le annotazioni per gli operandi interlock per i parametri di funzione per identificarli come operandi interlock. Una serie di funzioni accetta come uno dei relativi parametri l'indirizzo di una variabile a cui è necessario accedere usando un'istruzione del processore interlocked. Si tratta di istruzioni atomiche di lettura nella cache e, se gli operandi vengono usati in modo errato, si verificano bug molto sottili.

Annotazioni per le routine di invio dei driver

_Dispatch_type_

Usare le annotazioni per le routine dispatch driver quando si dichiarano routine di invio del driver WDM. Per altre informazioni, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver WDM e annotare le routine dispatch del driver.

Callback pre-operazione del minifilter del file system _Flt_CompletionContext_Outptr_ annotazione

_Flt_CompletionContext_Outptr_

Usare il callback di pre-operazione minifilter del file system _Flt_CompletionContext_Outptr_ annotazione quando si dichiarano le funzioni di callback preoperazione del minifilter del file system PFLT_PRE_OPERATION_CALLBACK.

Inserire questa annotazione nel parametro CompletionContext. Questa annotazione indirizza lo strumento di analisi del codice a verificare che CompletionContext sia corretto per il valore restituito FLT_PREOP_CALLBACK_STATUS.

Vedi anche

Uso delle annotazioni SAL per ridurre gli errori del codice C/C++