為什麼要用NT_SUCCESS()巨集測試返回的NTSTATUS值
在Windows驅動程式的編寫中,當我們呼叫一個返回NTSTATUS值的函式時(比如IoCreateDevice),應當檢查返回值是否成功。
有人經常這樣寫
但是,這並不總是合理的。
在ddk標頭檔案”ntdef.h“中,NTSTATUS是這樣定義的:
可見,NTSTATUS是一個有符號 的長整數。並且分為四個域。最高2位Sev域,描述的是這個NTSTATUS的嚴重性(Severity):
00 成功(Success)
01 資訊(Informational)
10 警告(Warning)
11 錯誤(Error)
00和01應該都表示成功的狀態,10和11都表示錯誤狀態。即對於這樣的有符號長整數的最高位(也就是符號位) ,0成功,1錯誤。那麼,如果NTSTATUS>=0為成功,NTSTATUS<0為錯誤。
因此,在標頭檔案”ntdef.h“中,測試NTSTATUS成功的巨集定義為:
而不是我以前想象的測試status == 0(STATUS_SUCCESS = 0)
參考我在StackOverflow上發的問題,感謝解答問題的老外^_^
相關推薦
為什麼要用NT_SUCCESS()巨集測試返回的NTSTATUS值
在Windows驅動程式的編寫中,當我們呼叫一個返回NTSTATUS值的函式時(比如IoCreateDevice),應當檢查返回值是否成功。 有人經常這樣寫 ntStatus = function(...); if(STATUS_SUCCESS == ntStatus)
使用NT_SUCCESS()巨集判斷驅動返回NTSTATUS值的原因
根據大佬的部落格,首先 // // Status values are 32 bit values laid out as follows: // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8
c++中賦值運算符重載為什麽要用引用做返回值?
font round opera () const pub copy構造函數 per size class string{ public: string(const char *str=NULL); string(const string& str);
Android6.0機型上調用系統相機拍照返回的resultCode值始終等於0的問題
cti man img pan mission get target lan out 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 正常情況下調用系統相機拍照: 如果拍照後點擊的是“確定”圖標,返回的resultCode = -1(Acti
軟件測試 —— 用例設計2(邊界值)
本場 幾歲 新建 也會 出現 點擊 自己 輸入輸出 無限 在現實生活中,無論做什麽,都會有一個“度”的概念。比如,我們知道在NBA總決賽的時候,很多運動員會特意在剛開始比賽不久就增加身體對抗去試探裁判員本場的尺度怎麽樣;還有MMA比賽的時候,一些有經驗的運動員也會有意去
struts2在配置文件中調用Action的方法返回值
ack 文件下載 返回 public class int cat chm webex struts2在配置文件中可以調用Action的方法返回值 1.Action中 //文件下載名 public String getDownloadFileName(){
軟件測試理論測試用例測試之邊界值法
col 等價 理論 -s 經驗 軟件測試 post 邊界情況 使用 定義 邊界值分析法就是對輸入或輸出的邊界值進行測試的一種黑盒測試方法。通常邊界值分析法是作為對等價類劃分法的補充,這種情況下,其測試用例來自等價類的邊界。 長期的測試工作經驗告訴我們,大量的
oracle 調用包體的函數並返回return值
datarow ret .com rect tex ring catch param finally /// <summary> /// 執行數據庫包體操作,返回結果 /// </summary> /// <param name="cmdTe
資料庫中某個表中的某個欄位的值是用逗號隔開的多個值,根據逗號拆分並從另一個表中查出資料返回
有兩個表A,B,表結構如下: A表 B表 關聯關係說明如下: (1)A.hospital_catalog=B.id (2)A表中hospital_catalog欄位的值是以 逗號 “,” 隔開,且兩邊用中括號“[ ]”包起,
測試之黑盒測試用例設計方法(邊界值分析)
此方法是對等價類劃分法的補充,他不是選擇等價類的任意元素,而是選擇等價類邊界的測試用例,邊界值的處理也是比較容易出錯的地方。使用邊界值分析方法設計測試用例,首先應確定邊界情況。通常輸入
過載運算子時的引數和返回型別要用引用的說明
class Myclass { private:char* str; public:Myclass(char* str1 = "default string") {str = new char[strlen(str1) + 1];strcpy(str, str1);cout << "constru
while判斷值為cin輸入值時,注意除錯時要用檔案結束符結束迴圈
例如,while判斷值為cin >> currVal,最後在Whie迴圈結束及if內,列印最後輸入的數的個數。但是除錯的時候,只按Enter,while迴圈未跳出,一直處於等待輸入值的狀態,不會顯示黃色行的列印。 通過按檔案結束符,然後再按Enter,將跳出w
jquery 選擇input的checkbox屬性 獲取checkbox的值 用非同步傳輸資料 返回結果
jquery 操作 獲取checkbox的值 傳遞給處理程式 返回處理結果 html部分<span style="font-size:12px;"><!DOCTYPE html> <html> <head> <
access Vba中,對日期時間欄位賦空值時,要用Null ,而不是""。
最近一片白雲對“鶴慶縣人事工資變動調資與工資管理系統”增加了一些功能,其中就是能將Access資料表“職工檔案”中的“薪級變動時間”欄位、“崗位變動時間”欄位的日期用程式自動更新為空,在用SQL語句中遇到一點點小問題,經過在網上查詢,問題總算解決了,怪自己學藝不夠紮實。現將SQL語句提供給正在尋找答案的
由於用mpu6050模塊,所以要用上i2c通信原理。
發送 表示 error art 多個 實時性 erro 字節 空閑 i2c通信原理 i2c總線只有兩根雙向信號線,一根是數據線SDA,一根是時鐘線SCL。 每個接到i2c總線上的器件都有唯一的地址,主機與其他器件之間的數據傳送可以是由主
方法被阻塞,一直要等到線程任務返回結果的例子
會有 sys current 返回結果 dex shutdown imp bmi getname package cn.itcast_01_mythread.pool;import java.util.ArrayList;import java.util.List;imp
為什麽要用MarkDown?
doc bsp 寫作 ffi 心情 color href 編輯 off 【為什麽要用MarkDown?】 大部分作家用 Word 或 Pages 寫作,過去的文檔也大都以 .doc, .docx 格式或是 Pages 格式儲存。還有人為了保證文稿發給誰都能正常打開,會
程序員為什麽一定要用Linux
linux程序員大多數人引薦Linux,基本上都會說Linux讓你更高效、更優異。然而工具只是工具。然而工具只是工具。然而工具只是工具。優異程序員和不優異程序員的差異首先是態度上的差異。他們有自個的理想,考慮許多,不管是項目開端之前還是在項目進行中,項目完結以後也會進行總結。他們對待疑問對比謹慎,考慮對比全部
用對象[屬性]表示屬性值 記錄字符出現的次數
asc log max rip r+ scrip har 記錄 Language <script type="text/javascript"> var str="hellomainlanguageoo"; var obj={}; for
Java、JavaWeb中單元測試用到的測試方法
enc nbsp 方法 hat 思維 .com java assert 可能 寫出的代碼做單元測試時,一定要記住從三個方面出發:1、成功 2、異常 3 邏輯錯誤(即沒有異常也可能程序運行出最後結果,可是呢?呵呵)。這就是在做測試時我要牢記的三個方面,同時思維要嚴謹也即做