青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

aurain
技術(shù)文摘
posts - 137,  comments - 268,  trackbacks - 0

摘自《Windows驅(qū)動(dòng)開發(fā)技術(shù)詳解》
1.
機(jī)構(gòu)化異常處理(try-except塊)

      結(jié)構(gòu)化異常處理(SHE, Structured Exception Handling)是微軟編譯器提供的獨(dú)特處理機(jī)制,這種處理方式能在一定程度上在出現(xiàn)錯(cuò)誤的情況下,避免程序崩潰。先說明兩個(gè)概念。

(1) 異常:異常的概念類似于中斷的概念,當(dāng)程序中某中錯(cuò)誤觸發(fā)一個(gè)異常,操作系統(tǒng)會(huì)尋找處理這個(gè)異常的處理函數(shù)。如果程序提供異常處理函數(shù),則進(jìn)入該函數(shù),否則由操作系統(tǒng)提供的默認(rèn)異常處理函數(shù)處理。在內(nèi)核模式下,操作系統(tǒng)默認(rèn)處理錯(cuò)誤的方法是直接讓系統(tǒng)藍(lán)屏,并在藍(lán)屏上簡單描述出錯(cuò)的信息。

(2) 回卷:程序執(zhí)行到某個(gè)地方出現(xiàn)異常錯(cuò)誤時(shí),系統(tǒng)會(huì)尋找出錯(cuò)點(diǎn)是否處于一個(gè)try{}塊中,并進(jìn)入try塊提供的異常處理代碼。如果當(dāng)前try塊沒有提供異常處理,則會(huì)向更外一層的try塊尋找異常處理代碼,直到最外層try塊也沒有提供異常處理代碼,則交由操作系統(tǒng)處理。這種向更外一層尋找異常處理的機(jī)制,被稱為回卷。

一般處理異常,是通過try-except塊來處理的。

__try

{

//your normal code

}

__except(filter_value)

{

       //your operate code

}

在被__try{}包圍的塊中,如果出現(xiàn)異常,會(huì)根據(jù)filter_value的數(shù)值,判斷是否需要在__except{}塊中處理。filter_value的數(shù)組會(huì)有三種可能。

(1)                EXCEPTION_EXECUTE_HANDLE,該數(shù)值為1。進(jìn)入到__except進(jìn)行錯(cuò)誤處理,處理完后不再回到__try{}塊中,轉(zhuǎn)而繼續(xù)執(zhí)行下面的代碼。

(2)                EXCEPTION_CONTINUE_SEARCH,該數(shù)值為0。不進(jìn)入__except塊中的異常處理,而是向上一層回卷。如果已經(jīng)是最外層,則向操作系統(tǒng)請(qǐng)求異常處理函數(shù)。

(3)                EXCEPTION_CONTINUE_EXECUTION,該數(shù)值為-1。重復(fù)先去錯(cuò)誤的指令,這個(gè)在驅(qū)動(dòng)程序中很少用到。

下面一段代碼是用來檢測某段內(nèi)存是否可讀寫,這段代碼通過try-except來探測指針的地址是否可寫。

VOID ProbeTest()

{

       PVOID pBad = NULL;

       KdPrint((“Enter ProbeTest\n”));

       __try

{

       KdPrint((“Enter __try block\n”));

       //判斷空指針是否可寫,顯然會(huì)導(dǎo)致異常

       ProbeForWrite(pBad, 100, 4);

       //由于在上面引發(fā)異常,所以下面語句不會(huì)被執(zhí)行

       KdPrint((“Leave __try block\n”));

}

__except(EXCEPTION_EXCUTE_HANDLE)

{

       KdPrint((“Catch the exception\n”));

       KdPrint((“The program will keep going\n”));

}

//該語句會(huì)被執(zhí)行

KdPrint((“Leave ProbeTest\n”));

}

      除了處理異常之外,DDK還提供了一些函數(shù)用來觸發(fā)異常。如表1所示:

1 觸發(fā)異常函數(shù)

函數(shù)

描述

ExRaiseStatus

用指定狀態(tài)代碼觸發(fā)異常

ExRaiseAccessViolatioin

觸發(fā)STATUS_ACCESS_VILOATION異常

ExRaiseDatatypeMisalignment

觸發(fā)STATUS_DATATYPE_MISALIGNMENT異常

 

2. 結(jié)構(gòu)化異常處理(try-finally塊)

      結(jié)構(gòu)化異常處理還有另外一種使用方法,就是利用try-finally塊,強(qiáng)迫函數(shù)在退出前執(zhí)行一段代碼。

NTSTATUS TryFinallyTest()

{

NTSTATUS status  = STATUS_SECCESS;

__try

{

       //your normal code

       return status;

}

__finally

{

       //程序退出前必然運(yùn)行到此

       KdPrint((“Enter finally block\n”));

}

}

      上面代碼的__try{}塊中,無論運(yùn)行什么代碼(即使是return語句或者觸發(fā)異常),在程序退出前都會(huì)運(yùn)行__finally{}塊中的代碼。這樣的目的是,在退出前需要運(yùn)行一些資源回收的工作,而資源回收代碼的最佳位置就是放在這個(gè)塊中。

      此外,使用try-finally塊還可以在某種程度上簡化代碼。比較下面兩段代碼,其中地一段是沒有使用try-finally塊的代碼,而第二段是使用了try-finally。可以看出,第二段代碼比第一段代碼清晰明了。

第一段代碼:

VOID FooTest()

{

       NTSTATUS status = STATUS_SUCCESS;

       //執(zhí)行操作1

       status = Foo1();

       //判斷操作是否成功

       if (!NT_SUCCESS(status))

       {

              //回收資源

              return status;

}

 

//執(zhí)行操作2

       status = Foo2();

       //判斷操作是否成功

       if (!NT_SUCCESS(status))

       {

              //回收資源

              return status;

}

 

//執(zhí)行操作n

       status = FooN();

       //判斷操作是否成功

       if (!NT_SUCCESS(status))

       {

              //回收資源

              return status;

}

 

return status;

}

第二段代碼:

VOID FooTest()

{

       NTSTATUS status = STATUS_SUCCESS;

       __try

{

       //執(zhí)行操作1

       status = Foo1();

       //判斷操作是否成功

       if (!NT_SUCCESS(status))

       {

              return status;

}

 

//執(zhí)行操作1

       status = Foo2();

       //判斷操作是否成功

       if (!NT_SUCCESS(status))

       {

              return status;

}

 

//執(zhí)行操作n

       status = Foo1();

       //判斷操作是否成功

       if (!NT_SUCCESS(status))

       {

              return status;

}

}

__finally

{

       //回收資源

}

return status;

}

posted on 2009-02-16 10:36 閱讀(3371) 評(píng)論(0)  編輯 收藏 引用 所屬分類: windows驅(qū)動(dòng)

<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用鏈接

留言簿(17)

隨筆分類(138)

隨筆檔案(137)

網(wǎng)絡(luò)開發(fā)

最新隨筆

搜索

  •  

積分與排名

  • 積分 - 502447
  • 排名 - 37

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区少妇| 欧美日韩一区二区在线观看视频| 久久视频在线免费观看| 在线日韩欧美| 欧美精品黄色| 亚洲在线观看| 美国十次成人| 夜夜躁日日躁狠狠久久88av| 国产精品狠色婷| 久久精品人人爽| 亚洲国产精品成人综合| 一本色道久久综合亚洲精品按摩| 国产精品久久激情| 久久久久一区二区| 99精品免费网| 久久精品一区二区三区四区| 亚洲区免费影片| 国产精品一区二区你懂得| 久久九九久久九九| 亚洲伦理一区| 久久婷婷麻豆| 亚洲夜间福利| 亚洲福利av| 国产精品亚洲一区二区三区在线| 久久一区亚洲| 亚洲女优在线| 亚洲国产精品成人| 久久精品国产综合精品| 亚洲精一区二区三区| 国产丝袜一区二区| 欧美日韩1080p| 久久久久久综合网天天| 亚洲小少妇裸体bbw| 欧美国产亚洲精品久久久8v| 性8sex亚洲区入口| 亚洲精品免费在线| 娇妻被交换粗又大又硬视频欧美| 欧美日本在线一区| 久久欧美肥婆一二区| 亚洲一区二区三区免费在线观看 | 亚洲欧洲一区二区在线观看 | 欧美jizz19性欧美| 香蕉久久一区二区不卡无毒影院| 亚洲精品综合精品自拍| 狠狠色狠狠色综合系列| 国产精品久久午夜夜伦鲁鲁| 欧美成人午夜| 榴莲视频成人在线观看| 久久精品国产99精品国产亚洲性色| 一区二区日韩免费看| 亚洲国产小视频在线观看| 久热精品在线| 久久天天狠狠| 久久久久成人精品| 久久国产日韩| 欧美在线观看你懂的| 午夜日韩av| 午夜精品一区二区三区电影天堂 | 久久亚洲私人国产精品va| 午夜精品在线视频| 亚洲一区视频在线| 亚洲私人影院| 亚洲校园激情| 亚洲欧美精品在线| 亚洲一区精品视频| 亚洲综合欧美| 先锋影音国产精品| 欧美一区二区精美| 欧美一区二区三区播放老司机| 亚洲欧美日韩成人| 亚洲一区影院| 午夜精品久久久久久久久| 亚洲午夜在线观看| 亚洲一区视频在线| 欧美亚洲视频在线观看| 欧美在线视频一区二区三区| 欧美专区日韩专区| 久久精品国产精品亚洲综合| 久久久久久久久久看片| 久久另类ts人妖一区二区 | 亚洲福利久久| 91久久亚洲| 99在线热播精品免费| 一区二区三欧美| 亚洲欧美日韩国产精品| 久久高清国产| 久久综合99re88久久爱| 欧美高清一区二区| 欧美日韩精品中文字幕| 国产精品扒开腿做爽爽爽软件| 国产精品私房写真福利视频| 国产专区欧美精品| 亚洲日本va午夜在线电影| 一本色道久久综合亚洲精品按摩 | 久久久久久色| 欧美韩日一区| 国产乱码精品一区二区三区不卡 | 亚洲日韩欧美视频| 亚洲图片你懂的| 久久久久久网站| 亚洲国产导航| 亚洲综合999| 裸体一区二区三区| 欧美视频一区二区三区四区| 国产一区二区黄色| 亚洲精品精选| 欧美专区一区二区三区| 欧美成人免费网站| 亚洲视频一区在线| 久久人91精品久久久久久不卡| 欧美日韩高清在线观看| 国产一区二区中文| 一区二区免费在线视频| 久久国产精品久久久| 亚洲高清资源| 午夜免费电影一区在线观看| 欧美韩日精品| 国精产品99永久一区一区| 中文有码久久| 免费观看成人| 午夜一区在线| 欧美视频1区| 91久久精品国产91久久| 久久国产精品72免费观看| 亚洲日本成人在线观看| 久久精品在线播放| 国产精品国内视频| 亚洲精品国产精品国自产在线 | 一区二区三区四区国产| 久久九九国产精品| 在线视频精品一区| 欧美国产日韩二区| 狠狠色丁香久久婷婷综合_中| 亚洲专区欧美专区| 亚洲人成网站999久久久综合| 久久精品女人天堂| 国产视频一区在线| 亚洲欧美日韩综合国产aⅴ| 亚洲欧洲在线一区| 久久亚洲综合网| 黄色亚洲在线| 久久精品视频免费播放| 亚洲一区二区三区四区中文| 欧美日韩在线播放三区四区| 亚洲精品一区二区三区樱花| 女生裸体视频一区二区三区| 欧美一区日韩一区| 国产欧美日韩视频一区二区三区| 亚洲午夜在线| 中国成人亚色综合网站| 欧美日韩亚洲高清一区二区| 亚洲麻豆av| 亚洲人成在线影院| 欧美精品三级在线观看| 亚洲肉体裸体xxxx137| 欧美国产综合视频| 免费试看一区| 亚洲美女黄色| 亚洲精品美女91| 欧美日韩一区二区三区在线视频 | 欧美高潮视频| 老巨人导航500精品| 亚洲高清电影| 亚洲国产精品一区二区三区| 嫩草成人www欧美| 亚洲伦理一区| 亚洲最新视频在线| 欧美日韩在线直播| 亚洲欧美视频在线| 亚洲欧美在线播放| 韩国亚洲精品| 欧美激情1区2区3区| 欧美国产欧美综合 | 欧美日韩一区二区在线观看 | 亚洲人成人77777线观看| 欧美精品在线免费| 亚洲资源在线观看| 午夜亚洲影视| 亚洲电影免费在线| 亚洲精品一区二区在线| 欧美性猛交一区二区三区精品| 午夜视频一区| 久久精品网址| 99综合电影在线视频| 亚洲午夜女主播在线直播| 国产午夜亚洲精品理论片色戒| 久久午夜精品一区二区| 欧美二区在线播放| 亚洲欧美久久久久一区二区三区| 欧美一级视频精品观看| 亚洲国产日韩精品| 夜夜嗨一区二区| 国内久久视频| 亚洲精品少妇| 国产一区二区日韩| 亚洲日本va在线观看| 国产三级精品在线不卡| 亚洲国产三级| 国产午夜亚洲精品理论片色戒| 亚洲国产精品热久久|