Condividi tramite


MM_BAD_POINTER

Nota

Questa pagina contiene in precedenza un elenco di macro del kernel, non solo MM_BAD_POINTER. Queste macro sono state ora suddivise in singole pagine. Per i collegamenti, usare la sezione Vedere anche sotto o cercare il Web.

Definito in: Wdm.h

Il driver può usare la macro MM_BAD_POINTER come valore puntatore non valido per assegnare a una variabile puntatore non inizializzata o non più valida. Un tentativo di accedere alla posizione di memoria puntata da questa variabile puntatore non valida causerà un controllo di bug.

In molte piattaforme hardware, indirizzo 0 (spesso rappresentato come costante NULL denominata) è un indirizzo non valido, ma gli sviluppatori di driver non devono presupporre che l'indirizzo 0 sia universalmente non valido in tutte le piattaforme. L'impostazione di variabili di puntatore non inizializzate o non valide per l'indirizzo 0 potrebbe non garantire sempre che vengano rilevati accessi inappropriati tramite questi puntatori.

Al contrario, il valore MM_BAD_POINTER è garantito essere un indirizzo non valido in ogni piattaforma in cui viene eseguito un driver.

Nelle piattaforme in cui l'indirizzo 0 è un indirizzo non valido, un driver che accede all'indirizzo 0 in IRQL < DISPATCH_LEVEL causa un'eccezione (violazione di accesso) che può essere rilevata inavvertitamente da un'istruzione try/except . Pertanto, il codice di gestione delle eccezioni del driver potrebbe mascherare l'accesso non valido e impedire che venga rilevato durante il debug. Tuttavia, un accesso dell'indirizzo MM_BAD_POINTER è garantito per causare un controllo di bug, che non può essere mascherato da un gestore di eccezioni.

Nell'esempio di codice seguente viene illustrato come assegnare il valore MM_BAD_POINTER a una variabile puntatore denominata ptr. Il file di intestazione Ntdef.h definisce il tipo PUCHAR come puntatore a un unsigned charoggetto .

PUCHAR ptr = (PUCHAR)MM_BAD_POINTER; // Now _ptr is guaranteed to fault._

Dopo ptr essere impostato su MM_BAD_POINTER, un tentativo di accedere alla posizione di memoria puntata ptr da causerà un controllo di bug.

Infatti, MM_BAD_POINTER è l'indirizzo di base di un'intera pagina di indirizzi non validi. Pertanto, qualsiasi accesso di un indirizzo nell'intervallo MM_BAD_POINTER a (MM_BAD_POINTER PAGE_SIZE + - 1) causerà un controllo di bug.

A partire da Windows 8.1, la macro MM_BAD_POINTER viene definita nel file di intestazione Wdm.h. Tuttavia, il codice driver che usa questa definizione di macro può essere eseguito nelle versioni precedenti di Windows a partire da Windows Vista.

A partire da Windows Vista, la variabile globale MmBadPointer è disponibile come puntatore a un valore puntatore garantito come indirizzo non valido. Tuttavia, a partire da Windows 8.1, l'uso di MmBadPointer è deprecato e è consigliabile aggiornare i driver per usare la macro MM_BAD_POINTER.

Disponibile a partire da Windows 8.1. Compatibile con le versioni precedenti di Windows a partire da Windows Vista.

Vedi anche