Avvisi di Code Analysis for Drivers

Questa sezione elenca e descrive gli avvisi segnalati dall'analisi del codice per i driver quando rileva un possibile errore nel codice del driver. Si noti che alcuni avvisi sono destinati al codice in modalità kernel e possono essere ignorati durante l'analisi dei driver in modalità utente.

Analisi del codice per i driver segnala i tipi di avvisi seguenti:

  • Avvisi generali (6000-6999): potenziali errori nella sintassi C e C++ e nella pratica generale di codifica. Per una descrizione di questi avvisi, vedere Analisi del codice per avvisi C/C++.

  • Avvisi specifici di Windows (28600-28799): questi avvisi sono specifici di determinati modelli di uso in Windows, ma non sono specifici dei driver.

  • Avvisi specifici del driver (28100-28199): errori nell'interazione di un driver con l'applicazione, con altri driver e con il sistema operativo.

  • Errori di annotazione (28200-28299 e 36000-36999): questi avvisi indicano che un'annotazione è stata codificata correttamente o usata in un contesto non corretto. Nella maggior parte dei casi, la presenza di tale avviso indica che l'annotazione non ha l'effetto desiderato (o qualsiasi).

  • Avvisi di allocazione della memoria (30029-30035): si tratta di avvisi di allocazione della memoria.

In questa sezione

Argomento Descrizione

C28101

avviso C28101: il modulo Driver ha dedotto che la funzione corrente non è il tipo corretto di funzione

C28110

avviso C28110: i driver devono proteggere lo stato hardware a virgola mobile. Vedere l'uso di float

C28111

avviso C28111: irQL in cui è stato salvato lo stato a virgola mobile non corrisponde all'oggetto IRQL corrente (per questa operazione di ripristino).

C28114

avviso: C28114: la copia di un'intera voce dello stack IRP lascia determinati campi inizializzati che devono essere cancellati o aggiornati.

C28120

avviso C28120: la funzione non può essere chiamata a livello di IRQ corrente. Il livello corrente è troppo basso.

C28121

avviso C28121: la funzione non può essere chiamata a livello di IRQ corrente. Il livello corrente è troppo alto.

C28122

avviso C28122: la funzione non può essere chiamata a un livello irQ basso. Le chiamate di funzione precedenti non sono coerenti con questo vincolo.

C28123

avviso C28123: la funzione non può essere chiamata a un livello irQ elevato. Le chiamate di funzione precedenti non sono coerenti con questo vincolo.

C28124

avviso C28124: la chiamata a causa del quale il livello IRQ deve essere impostato al di sotto del valore minimo accettabile per la funzione analizzati.

C28126

avviso C28126: il parametro AccessMode to ObReferenceObject* deve essere IRP-RequestorMode>

C28127

avviso C28127: la funzione usata come routine non corrisponde esattamente al tipo previsto.

C28128

avviso C28128: è stato effettuato direttamente un accesso a un campo. Deve essere fatta da una routine.

C28129

avviso C28129: un'assegnazione è stata effettuata a un operando, che deve essere modificata solo usando set di bit e cancella

C28131

avviso C28131: la routine DriverEntry deve salvare una copia dell'argomento, non il puntatore, perché Gestione I/O libera il buffer

C28132

avviso C28132: Prendere le dimensioni del puntatore

C28133

avviso C28133: IoInitializeTimer è meglio chiamato da AddDevice

C28134

avviso C28134: il tipo di un tag di pool deve essere integrale, non un puntatore stringa o stringa

C28135

avviso C28135: se il primo argomento di KeWaitForSingleObject è una variabile locale, il parametro Mode deve essere KernelMode

C28139

avviso C28139: l'argomento deve corrispondere esattamente al tipo

C28141

avviso C28141: l'argomento causa l'impostazione del livello IRQ sotto l'irQL corrente e questa funzione non può essere usata per tale scopo

C28143

avviso C28143: una routine di invio che chiama IoMarkIrpPending deve restituire anche STATUS_PENDING

C28144

avviso C28144: all'interno di una routine di annullamento, al punto di uscita, irQL in Irp-CancelIrql> deve essere il irQL corrente.

C28145

avviso C28145: la struttura MDL opaca non deve essere modificata da un driver

C28146

avviso C28146: i driver in modalità kernel devono usare ntstrsafe.h, non strsafe.h. Trovato nel file di origine

C28147

avviso C28147: l'uso di un tag di pool predefinito (' kdD' o ' mdW') per le chiamate a questa funzione elimina lo scopo dell'assegnazione di tag al pool

C28150

avviso C28150: la funzione causa l'impostazione del livello IRQ al di sopra del massimo accettabile per la funzione analizzati

C28151

avviso C28151: il valore non è un valore legale per un IRQL

C28152

avviso C28152: il ritorno da una funzione come AddDevice in modo imprevisto DO_DEVICE_INITIALIZING

C28153

avviso C28153: non è stato possibile valutare il valore per un IRQL da annotazione in questo contesto.

C28156

avviso C28156: irQL effettivo non è coerente con il irQL richiesto

C28157

avviso C28157: irQL non è mai stato ripristinato

C28158

avviso C28158: nessun irQL è stato salvato

C28161

avviso C28161: Uscita senza acquisire il diritto di usare hardware mobile

C28162

avviso C28162: uscita durante l'uso dell'hardware a virgola mobile

C28165

avviso C28165: il puntatore della funzione della classe non corrisponde alla classe di funzione

C28166

avviso C28166: la funzione non ripristina il valore IRQL al valore corrente alla voce della funzione e deve farlo.

C28167

avviso C28167: la funzione modifica irQL e non ripristina irQL prima di uscire. Deve essere annotato per riflettere la modifica o il runtime di integrazione deve essere ripristinato.

C28168

avviso C28168: la funzione dispatch non ha un'annotazione Dispatch_type corrispondente a questa voce della tabella dispatch

C28169

avviso C28169: la funzione dispatch non include annotazioni Dispatch_type

C28170

avviso C28170: la funzione è stata dichiarata come in un segmento di paging, ma non è stato trovato né PAGED_CODE né PAGED_CODE_LOCKED

C28171

avviso C28171: la funzione ha più di un'istanza di PAGED_CODE o PAGED_CODE_LOCKED

C28172

avviso C28172: la funzione ha PAGED_CODE o PAGED_CODE_LOCKED ma non è dichiarata come in un segmento di paging

C28173

avviso C28173: La funzione corrente sembra adattarsi erroneamente alla memoria fisica superiore a 4 GB

C28175

avviso C28175: il membro dello struct non deve essere accessibile da un driver

C28176

avviso C28176: il membro dello struct non deve essere modificato da un driver

C28177

avviso C28177: la funzione è annotata con più di una classe di funzione. Tutti, ma uno verrà ignorato.

C28260

avviso C28260: È stato rilevato un errore di sintassi nelle annotazioni durante l'analisi di una proprietà all'interno di una funzione

C28266

È stato rilevato un errore di sintassi nelle annotazioni per la proprietà nella funzione .

C28268

avviso C28268: la classe di funzione nella funzione non corrisponde alla classe di funzione nel typedef usato qui

C28601

avviso C28601: Evitare il blocco su HWND_BROADCAST

C28602

avviso C28602: evitare di chiamare SendMessageTimeout con HWND_BROADCAST

C28604

avviso C28604: evitare di chiamare SendMessageTimeout con SMTO_ABORTIFHUNG con un timeout pari a 0

C28615

avviso C28615: deve chiamare _resetstkoflw nel blocco __except() quando si chiama _alloca nel blocco __try. Non chiamare _resetstkoflw dall'interno di un blocco catch()

C28616

avviso C28616: condizione AV multithreading

C28617

avviso C28617: evitare di usare il valore restituito di _beginthread(). Usare invece _beginthreadex()

C28623

avviso C28623: cast senza segno delle coordinate GetMessagePos(). Usare GET_X_LPARAM/GET_Y_LPARAM anziché LOWORD/HIWORD

C28624

avviso C28624: nessuna chiamata a Release() per trovare la corrispondenza con refcount incrementato da LResultFromObject

C28625

avviso C28625: la chiamata di funzione usata per cancellare i dati sensibili verrà ottimizzata

C28636

avviso C28636: Chiamata di LocalFree su un puntatore non allocato ottenuto dalle chiamate a GetSecurityDescriptorOwner/Group/Dacl/Sacl

C28637

avviso C28637: La chiamata della funzione in un inizializzatore globale non è sicura

C28638

avviso C28638: lo stub delayload della funzione manca una dichiarazione corrispondente

C28639

avviso C28639: Chiamata di handle di chiusura con stringa

C28640

avviso C28640: lo stub delayload della funzione deve essere una funzione statica

C28644

avviso C28644: valore restituito da DPA_InsertPtr non selezionato

C28645

avviso C28645: MessageBox è stato chiamato utilizzando il simbolo del messaggio del punto interrogativo che non è più consigliato

C28648

avviso C28648: PulseEvent è una funzione non affidabile

C28649

avviso C28649: Le matrici di stack automatico o globale non sono mai NULL

C28650

avviso C28650: il tipo per il quale viene usato !0 non lo considera come caso di errore.

Restituzione di un valore di stato, ad esempio ! TRUE non corrisponde alla restituzione di un valore di stato che indica un errore.

C28651

avviso C28651: inizializzatore statico causa la copia nelle pagine di scrittura a causa di puntatori a funzione membro

C28652

avviso C28652: l'inizializzatore statico causa la copia nelle pagine di scrittura a causa di operatori bit per bit di overload

C28714

avviso C28714: Cast tra tipi integer semanticamente diversi

C28715

avviso C28715: Cast tra tipi integer semanticamente diversi

C28716

avviso C28716: cast inserito dal compilatore tra tipi integrali diversi semanticamente

C28717

avviso C28717: tipo VARIANT non valido

C28718

avviso C28718: buffer non annotato

C28719

avviso C28719: Utilizzo api escluse

C28720

avviso C28720: Utilizzo api escluse

C28721

avviso C28721: Architettura del contatore delle prestazioni deprecata

C28722

avviso C28722: Buffer non annotato nella dichiarazione di funzione

C28723

avviso C28723: Buffer non annotato nella definizione della funzione senza dichiarazione corrispondente

C28725

avviso C28725: Usare Watson invece di questo SetUnhandledExceptionFilter

C28726

avviso C28726: Utilizzo api escluse

C28727

avviso C28727: Utilizzo api escluse

C28728

avviso C28728: Utilizzo api escluse

C28730

avviso C28730: possibile assegnazione di '\0' direttamente a un puntatore.

C28735

avviso C28735: Utilizzo api crimson vietato

C28736

avviso C28736: Utilizzo degli argomenti api vietati

C28740

avviso C28740: buffer senza segno non firmato

C28741

avviso C28741: buffer non annotato nella funzione

C28742

avviso C28742: buffer nonannota nella funzione

C28750

avviso C28750: utilizzo vietato di lstrlen e delle relative varianti

C28751

avviso C28751: utilizzo vietato di ExAllocatePool e delle relative varianti

C28752

avviso C28752: utilizzo vietato dell'API kernel32 o advapi32

C28753

avviso C28753: Basarsi su un ordine non definito di valutazione dei parametri

C30029

avviso C30029: Chiamata di una funzione di allocazione della memoria che richiede la memoria eseguibile

C30030

avviso C30030: Chiamata di una funzione di allocazione della memoria e passaggio di un parametro che indica la memoria eseguibile

C30031

avviso C30031: Chiamata di una funzione di allocazione della memoria e passaggio di un parametro che indica la memoria eseguibile

C30032

avviso C30032: Chiamata di una funzione di allocazione della memoria e forzare la richiesta di memoria eseguibile tramite l'uso della direttiva POOL_NX_OPTOUT

C30033

avviso C30033: l'allocazione eseguibile è stata rilevata in un driver compilato con POOL_NX_OPTIN. Questo driver è stato determinato a essere caricato in fase di esecuzione da un altro driver. Verificare che il driver di caricamento chiami ExInitializeDriverRuntime(DrvRtPoolNxOptIn) nel driverEntry.

C30034

avviso C30034: passaggio di un valore di flag a una funzione di allocazione che potrebbe causare l'allocazione della memoria eseguibile. Verificare che la funzione di allocazione non richieda una forma di pool non a pagina eseguibile.

C30035

avviso C30035: è stata effettuata una chiamata a una funzione che deve essere effettuata dall'interno della funzione di inizializzazione,ad esempio DriverEntry() o DllInitialize()). PREfast non è riuscito a determinare se la chiamata è stata effettuata dalla funzione di inizializzazione.