共用方式為


MM_BAD_POINTER

注意

此頁面先前包含核心宏的清單,而不只是 MM_BAD_POINTER。 這些宏現在已分成自己的個別頁面。 如需連結,請使用下方的 [另請參閱] 區段,或搜尋網頁。

定義於:Wdm.h

您的驅動程式可以使用 MM_BAD_POINTER 宏做為錯誤的指標值,指派給未初始化或不再有效的指標變數。 嘗試存取這個無效指標變數所指向的記憶體位置會導致錯誤檢查。

在許多硬體平臺上,位址 0 (經常以具名常數 NULL 表示) 是無效的位址,但驅動程式開發人員不應假設位址 0 在所有平臺上都通用無效。 將未初始化或無效的指標變數設定為位址 0 不一定會保證偵測到不適當的透過這些指標存取。

相反地 ,MM_BAD_POINTER值 保證在驅動程序執行的每個平臺上都是無效的位址。

在位址 0 是無效位址的平臺上,存取 IRQL < 位址 0 的驅動程式DISPATCH_LEVEL會導致例外狀況 (存取違規) ,而語句可能會意外攔截 try/except 。 因此,驅動程式的例外狀況處理程式代碼可能會遮罩無效的存取,並防止在偵錯期間偵測到。 不過,保證存取 MM_BAD_POINTER 位址會導致錯誤檢查,而例外狀況處理程式無法遮罩。

下列程式代碼範例示範如何將值 指派給 名為 ptr的指標變數MM_BAD_POINTER。 Ntdef.h 頭檔會將 PUCHAR 類型定義為 的 unsigned char指標。

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

設定為 MM_BAD_POINTER 之後ptr,嘗試存取 所ptr指向的記憶體位置會導致錯誤檢查。

事實上, MM_BAD_POINTER 是無效位址之整個頁面的基位址。 因此,範圍中位址的任何存取MM_BAD_POINTER (MM_BAD_POINTER + PAGE_SIZE - 1) 會導致錯誤檢查。

從 Windows 8.1 開始,MM_BAD_POINTER宏會定義在 Wdm.h 頭檔中。 不過,使用此宏定義的驅動程式程式代碼可以在舊版 Windows 中從 Windows Vista 開始執行。

從 Windows Vista 開始, MmBadPointer 全域變數可作為指標值的指標,保證為無效的位址。 不過,從 Windows 8.1 開始,MmBadPointer 的使用已被取代,您應該更新驅動程式以改用 MM_BAD_POINTER 宏。

從 Windows 8.1 開始提供。 與舊版 Windows 相容,從 Windows Vista 開始。

另請參閱