驅動程式程式碼分析警告
本節列出並描述驅動程式的程式碼分析在驅動程式程式碼中偵測到可能錯誤時所報告的警告。 請注意,某些警告適用于核心模式程式碼,而且可以在分析使用者模式驅動程式時忽略。
驅動程式的程式碼分析會報告下列類型的警告:
一般警告 (6000-6999) :C 和 C++ 語法中的潛在錯誤,以及一般程式碼撰寫做法。 如需這些警告的描述,請參閱 C/C++ 警告的程式碼分析。
Windows 特定警告 (28600-28799) :這些警告是 Windows 中特定使用模式的特定警告,但不是驅動程式特有的。
驅動程式特定警告 (28100-28199) :驅動程式與應用程式互動、其他驅動程式和作業系統時發生錯誤。
注釋錯誤 (28200-28299 和 36000-36999) :這些警告表示批註在不正確的內容中未正確編碼或使用。 在大部分情況下,這類警告的存在表示批註沒有所需的 (或任何) 效果。
記憶體配置警告 (30029-30035) :這些是記憶體配置警告。
本節內容
主題 | 描述 |
---|---|
警告 C28101:Drivers 模組已推斷目前的函式不是正確的函式類型 |
|
警告 C28110:驅動程式必須保護浮點硬體狀態。 請參閱使用 float |
|
警告 C28111:儲存浮點狀態的 IRQL 不符合此還原作業的目前 IRQL () 。 |
|
警告:C28114:複製整個 IRP 堆疊專案會讓應該清除或更新的特定欄位初始化。 |
|
警告 C28120:不允許在目前的 IRQ 層級呼叫函式。 目前的層級太低。 |
|
警告 C28121:不允許在目前的 IRQ 層級呼叫函式。 目前的層級太高。 |
|
警告 C28122:不允許在低 IRQ 層級呼叫函式。 先前的函式呼叫與此條件約束不一致。 |
|
警告 C28123:不允許在高 IRQ 層級呼叫函式。 先前的函式呼叫與此條件約束不一致。 |
|
警告 C28124:呼叫 會導致 IRQ 層級設定為低於所分析函式可接受的最小值。 |
|
警告 C28126:ObReferenceObject* 的 AccessMode 參數應該是 IRP-RequestorMode > |
|
警告 C28127:作為常式使用的函式與預期的類型不完全相符。 |
|
警告 C28128:已直接存取欄位。 它應該由常式進行。 |
|
警告 C28129:已對運算元進行指派,這應該只使用位集和清除來修改 |
|
警告 C28131:DriverEntry 常式應該儲存引數的複本,而不是指標,因為 I/O 管理員會釋放緩衝區 |
|
警告 C28132:取得指標的大小 |
|
警告 C28133:IoInitializeTimer 最好從 AddDevice 呼叫 |
|
警告 C28134:集區標籤的類型應該是整數,而不是字串或字串指標 |
|
警告 C28135:如果 KeWaitForSingleObject 的第一個引數是區域變數,Mode 參數必須是 KernelMode |
|
警告 C28139:引數應該完全符合類型 |
|
警告 C28141:引數會導致 IRQ 層級設定在目前的 IRQL 下方,而且此函式無法用於該用途 |
|
警告 C28143:呼叫 IoMarkIrpPending 的分派常式也必須傳回STATUS_PENDING |
|
警告 C28144:在取消常式內,在結束點,Irp-CancelIrql > 中的 IRQL 應該是目前的 IRQL。 |
|
警告 C28145:驅動程式不應修改不透明的 MDL 結構 |
|
警告 C28146:核心模式驅動程式應該使用 ntstrsafe.h,而不是 strsafe.h。 在原始程式檔中找到 |
|
警告 C28147:使用預設集區標記 (' kdD' 或 ' mdW') 呼叫此函式會破壞集區標記的目的 |
|
警告 C28150:函式會使 IRQ 層級設定為高於所分析函式可接受的最大值 |
|
警告 C28151:此值不是 IRQL 的法律值 |
|
警告 C28152:從類似 AddDevice 的函式意外傳回DO_DEVICE_INITIALIZING |
|
警告 C28153:無法在此內容中評估來自注釋的 IRQL 值。 |
|
警告 C28156:實際的 IRQL 與必要的 IRQL 不一致 |
|
警告 C28157:IRQL 從未還原 |
|
警告 C28158:未儲存 IRQL |
|
警告 C28161:結束而不取得使用浮動硬體的權利 |
|
警告 C28162:在保留使用浮點硬體許可權時結束 |
|
警告 C28165:類別的函式指標不符合函式類別 |
|
警告 C28166:函式不會將 IRQL 還原為目前在函式專案上的值,而且需要這麼做。 |
|
警告 C28167:函式會變更 IRQL,且不會在 IRQL 結束之前還原 IRQL。 應該加上批註以反映變更,或應該還原 IRQL。 |
|
警告 C28168:分派函式沒有符合此分派資料表專案的 Dispatch_type 批註 |
|
警告 C28169:分派函式沒有任何 Dispatch_type 注釋 |
|
警告 C28170:函式已宣告為位於分頁區段中,但找不到PAGED_CODE或PAGED_CODE_LOCKED |
|
警告 C28171:函式有多個實例PAGED_CODE或PAGED_CODE_LOCKED |
|
警告 C28172:函式具有PAGED_CODE或PAGED_CODE_LOCKED,但未宣告為在分頁區段中 |
|
警告 C28173:目前的函式似乎無法正確地適應超過 4 GB 的實體記憶體 |
|
警告 C28175:驅動程式不應存取結構的成員 |
|
警告 C28176:驅動程式不應修改結構的成員 |
|
warning C28177:函式會加上多個函式類別的批註。 除了一個,將會忽略。 |
|
警告 C28260:在剖析函式內屬性時,發現注釋中的語法錯誤 |
|
在函式中找到 屬性的注釋語法錯誤。 |
|
警告 C28268:函式上的函式類別不符合此處使用的 typedef 函式類別 |
|
警告 C28601:避免封鎖HWND_BROADCAST |
|
警告 C28602:避免使用 HWND_BROADCAST 呼叫 SendMessageTimeout |
|
警告 C28604:避免呼叫具有逾時SMTO_ABORTIFHUNG的 SendMessageTimeout |
|
警告 C28615:在呼叫 __try 區塊中的_alloca時,必須在 __except () 區塊中呼叫 _resetstkoflw。 請勿從 catch () 區塊內呼叫_resetstkoflw |
|
警告 C28616:多執行緒 AV 條件 |
|
警告 C28617:避免使用 _beginthread () 的傳回值。 請改用 _beginthreadex () |
|
警告 C28623:未簽署的 GetMessagePos () 座標轉換。 使用 GET_X_LPARAM/GET_Y_LPARAM,而不是 LOWORD/HIWORD |
|
警告 C28624:不呼叫 Release () 以符合 LResultFromObject 的遞增 refcount |
|
警告 C28625:用來清除敏感性資料的函式呼叫將會優化 |
|
警告 C28636:在從 GetSecurityDescriptorOwner/Group/Dacl/Sacl 呼叫的非配置指標上呼叫 LocalFree |
|
警告 C28637:在全域初始化運算式中呼叫函式不安全 |
|
警告 C28638:函式延遲載入存根遺漏相符宣告 |
|
警告 C28639:使用字串呼叫 close 控制碼 |
|
警告 C28640:函式延遲載入存根應該是靜態函式 |
|
警告 C28644:未核取DPA_InsertPtr傳回值 |
|
警告 C28645:已使用不再建議的問號訊息符號呼叫 MessageBox |
|
警告 C28648:PulseEvent 是不可靠的函式 |
|
警告 C28649:自動或全域堆疊陣列永遠不會是 Null |
|
警告 C28650:正在使用 !0 的類型不會將其視為失敗案例。 傳回狀態值,例如 !TRUE 與傳回指出失敗的狀態值不同。 |
|
警告 C28651:靜態初始化運算式會導致寫入頁面上因為成員函式指標而複製 |
|
警告 C28652:靜態初始化運算式會導致寫入頁面上因為多載位運算子而複製 |
|
警告 C28714:在語意上不同的整數類型之間轉換 |
|
警告 C28715:在語意上不同的整數類型之間轉換 |
|
警告 C28716:語意上不同整數類型之間的編譯器插入轉換 |
|
警告 C28717:不正確 VARIANT 類型 |
|
警告 C28718:未批註緩衝區 |
|
警告 C28719:禁用 API 使用方式 |
|
警告 C28720:禁用 API 使用方式 |
|
警告 C28721:已被取代的效能計數器架構 |
|
警告 C28722:函式宣告中的未批註緩衝區 |
|
警告 C28723:函式定義中沒有對應宣告的未批註緩衝區 |
|
警告 C28725:使用 Watson 而非此 SetUnhandledExceptionFilter |
|
警告 C28726:禁用 API 使用方式 |
|
警告 C28727:禁用 API 使用方式 |
|
警告 C28728:禁用 API 使用方式 |
|
警告 C28730:可能指派 '\0' 給指標。 |
|
警告 C28735:禁用 Crimson API 使用方式 |
|
警告 C28736:禁用 API 引數使用方式 |
|
警告 C28740:未批註的未帶正負號緩衝區 |
|
警告 C28741:函式中的未批註緩衝區 |
|
警告 C28742:函式中的未批註緩衝區 |
|
警告 C28750:禁止使用 lstrlen 及其變體 |
|
警告 C28751:禁止使用 ExAllocatePool 及其變體 |
|
警告 C28752:禁止使用 kernel32 或 advapi32 API |
|
警告 C28753:依賴未定義的參數評估順序 |
|
警告 C30029:呼叫要求可執行記憶體的記憶體配置函式 |
|
警告 C30030:呼叫記憶體配置函式,並傳遞指出可執行記憶體的參數 |
|
警告 C30031:呼叫記憶體配置函式,並傳遞指出可執行記憶體的參數 |
|
警告 C30032:呼叫記憶體配置函式,並透過使用 POOL_NX_OPTOUT 指示詞強制要求可執行記憶體 |
|
警告 C30033:在以 POOL_NX_OPTIN編譯的驅動程式中偵測到可執行配置。 此驅動程式已由另一個驅動程式決定在執行時間載入。 請確認載入驅動程式在其 DriverEntry 中呼叫 ExInitializeDriverRuntime (DrvRtPoolNxOptIn) 。 |
|
警告 C30034:將旗標值傳遞至配置函式,導致配置可執行記憶體。 請確認配置函式未要求可執行檔非分頁集區形式。 |
|
警告 C30035:呼叫必須從初始化函式內部進行的函式 (,例如 DriverEntry () 或 DllInitialize () ) 。 PREfast 無法判斷是否已從初始化函式進行呼叫。 |
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應