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

小默

[zz]DriverEntry

DriverEntry的第一個(gè)參數(shù)是一個(gè)指針,指向一個(gè)剛被初始化的驅(qū)動(dòng)程序?qū)ο螅搶?duì)象就代表你的驅(qū)動(dòng)程序。WDM驅(qū)動(dòng)程序的DriverEntry例程應(yīng)完成對(duì)這個(gè)對(duì)象的初始化并返回。非WDM驅(qū)動(dòng)程序需要做大量額外的工作,它們必須探測(cè)自己的硬件,為硬件創(chuàng)建設(shè)備對(duì)象(用于代表硬件),配置并初始化硬件使其正常工作。而對(duì)于WDM驅(qū)動(dòng)程序,頗麻煩的硬件探測(cè)和配置工作由PnP管理器自動(dòng)完成,我將在第六章討論P(yáng)nP。如果你想知道非WDM驅(qū)動(dòng)程序是如何初始化自身的,參見Art Baker的《The Windows NT Device Driver Book (Prentice Hall, 1997)》、Viscarola和Mason的《Windows NT Device Driver Development (Macmillan, 1998)》。

DriverEntry的第二個(gè)參數(shù)是設(shè)備服務(wù)鍵的鍵名。這個(gè)串不是長(zhǎng)期存在的(函數(shù)返回后可能消失),如果以后想使用該串就必須先把它復(fù)制到安全的地方。

對(duì)于WDM驅(qū)動(dòng)程序的DriverEntry例程,其主要工作是把各種函數(shù)指針填入驅(qū)動(dòng)程序?qū)ο蟆_@些指針為操作系統(tǒng)指明了驅(qū)動(dòng)程序容器中各種子例程的位置。它們包括下面這些指針成員(驅(qū)動(dòng)程序?qū)ο笾?:

  • DriverUnload 指向驅(qū)動(dòng)程序的清除例程。I/O管理器會(huì)在卸載驅(qū)動(dòng)程序前調(diào)用該例程。通常,WDM驅(qū)動(dòng)程序的DriverEntry例程一般不分配任何資源,所以DriverUnload例程也沒有什么清除工作要做。
  • DriverExtension->AddDevice 指向驅(qū)動(dòng)程序的AddDevice函數(shù)。PnP管理器將為每個(gè)硬件實(shí)例調(diào)用一次AddDevice例程。由于AddDevice例程對(duì)WDM驅(qū)動(dòng)程序特別重要,所以我將在本章下一節(jié)單獨(dú)講述它。
  • DriverStartIo 如果驅(qū)動(dòng)程序使用標(biāo)準(zhǔn)的IRP排隊(duì)方式,應(yīng)該設(shè)置該成員,使其指向驅(qū)動(dòng)程序的StartIo例程。如果你不理解什么是“標(biāo)準(zhǔn)”排隊(duì)方式,不要著急,到第五章你就會(huì)完全明白,許多驅(qū)動(dòng)程序都使用這種方法。
  • MajorFunction 是一個(gè)指針數(shù)組,I/O管理器把每個(gè)數(shù)組元素都初始化成指向一個(gè)啞派遣函數(shù),這個(gè)啞派遣函數(shù)僅返回失敗。驅(qū)動(dòng)程序可能僅需要處理幾種類型的IRP,所以至少應(yīng)該設(shè)置與那幾種IRP類型相對(duì)應(yīng)的指針元素,使它們指向相應(yīng)的派遣函數(shù)。我將在第五章詳細(xì)討論IRP和派遣函數(shù)。現(xiàn)在,你僅需要知道至少有三種IRP必須處理。

下面是一個(gè)近乎完整的DriverEntry例程:

extern "C"
            NTSTATUS
            DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
            {
            DriverObject->DriverUnload = DriverUnload;							<--1
            DriverObject->DriverExtension->AddDevice = AddDevice;
            DriverObject->DriverStartIo = StartIo;
            DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;					<--2
            DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
            DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = DispatchWmi;
            ...												<--3
            servkey.Buffer = (PWSTR) ExAllocatePool(PagedPool, RegistryPath->Length + sizeof(WCHAR));	<--4
            if (!servkey.Buffer)
            return STATUS_INSUFFICIENT_RESOURCES;
            servkey.MaximumLength = RegistryPath->Length + sizeof(WCHAR);
            RtlCopyUnicodeString(&servkey, RegistryPath);
            return STATUS_SUCCESS;									<--5
            }
  1. 前三條語句為驅(qū)動(dòng)程序的其它入口點(diǎn)設(shè)置了函數(shù)指針。在這里,我用了能表達(dá)其功能的名字命名了這些函數(shù):DriverUnload、AddDevice、StartIo。
  2. 每個(gè)WDM驅(qū)動(dòng)程序必須能處理PNP、POWER、SYSTEM_CONTROL這三種請(qǐng)求;應(yīng)該在這里為這些請(qǐng)求指定派遣函數(shù)。在早期的Windows 2000 DDK中,IRP_MJ_SYSTEM_CONTROL曾被稱作IRP_MJ_WMI,所以我把系統(tǒng)控制派遣函數(shù)命名為DispatchWmi
  3. 在省略號(hào)處,你可以插入設(shè)置其它MajorFunction指針的代碼。
  4. 如果驅(qū)動(dòng)程序需要訪問設(shè)備的服務(wù)鍵,可以在這里備份RegistryPath串。例如,如果驅(qū)動(dòng)程序要作為WMI生產(chǎn)者(見第十章),則需要備份這個(gè)串。這里我假設(shè)已經(jīng)在某處聲明了一個(gè)類型為UNICODE_STRING的全局變量servkey
  5. 返回STATUS_SUCCESS指出函數(shù)成功。如果函數(shù)失敗,應(yīng)該返回NTSTATUS.H中的一個(gè)錯(cuò)誤代碼,或者返回用戶定義的錯(cuò)誤代碼。STATUS_SUCCESS的值為0。

DriverUnload例程

在WDM驅(qū)動(dòng)程序中,DriverUnload例程的作用就是釋放DriverEntry例程在全局初始化過程中申請(qǐng)的任何資源,但它幾乎沒什么可做。如果你在DriverEntry中備份了RegistryPath串,應(yīng)該在這里釋放備份所占用的內(nèi)存:

VOID DriverUnload(PDRIVER_OBJECT DriverObject)
            {
            RtlFreeUnicodeString(&servkey);
            }

如果DriverEntry例程返回一個(gè)失敗狀態(tài)代碼,系統(tǒng)將不再調(diào)用DriverUnload例程。所以,不能讓DriverEntry例程出錯(cuò)后產(chǎn)生任何副作用,必須在它返回錯(cuò)誤代碼前消除副作用。

posted on 2009-12-28 20:57 小默 閱讀(527) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows

導(dǎo)航

統(tǒng)計(jì)

留言簿(13)

隨筆分類(287)

隨筆檔案(289)

漏洞

搜索

積分與排名

最新評(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>
            99国内精品久久久久久久软件| 亚洲天堂第二页| 欧美国产第一页| 久久精品日韩欧美| 久久超碰97中文字幕| 你懂的成人av| 日韩亚洲欧美一区二区三区| 禁久久精品乱码| 免费不卡中文字幕视频| 欧美日韩亚洲另类| 久久亚洲图片| 欧美日韩国产在线播放| 亚洲自拍电影| 欧美激情一区二区在线| 亚洲第一中文字幕在线观看| 在线视频你懂得一区| 久久免费视频网站| 亚洲制服欧美中文字幕中文字幕| 亚洲第一页在线| 久久国产精品高清| 午夜影视日本亚洲欧洲精品| 亚洲午夜激情网站| 欧美金8天国| 国产综合婷婷| 亚洲免费影视第一页| 亚洲激情中文1区| 99日韩精品| 国产精品第一页第二页第三页| 亚洲欧美日韩国产中文| 在线日韩av永久免费观看| 日韩午夜精品视频| 亚洲激情视频在线观看| 久久一区二区精品| 黄色亚洲精品| 久久久99爱| 一区免费观看视频| 亚洲色图综合久久| 美女999久久久精品视频| 99精品欧美一区| 亚洲国产高清高潮精品美女| 亚洲区免费影片| 久久成人一区| 亚洲伦理在线免费看| 欧美在线1区| 欧美午夜精品一区二区三区| 久久久久久网| 国产拍揄自揄精品视频麻豆| 一区二区国产精品| 一区二区精品在线观看| 欧美在线视频二区| 亚洲精品一区在线观看| 麻豆成人在线| 国产精品美女xx| 亚洲欧美日韩精品久久亚洲区| 亚洲精品中文字幕在线观看| 亚洲大胆人体视频| 亚洲精品孕妇| 欧美一区二区三区免费视| 亚洲人在线视频| 久久精品视频在线看| 欧美性猛交xxxx乱大交蜜桃| 亚洲精品小视频| 亚洲国产精品第一区二区三区| 久久久青草婷婷精品综合日韩| 国产亚洲一本大道中文在线| 亚洲精品久久嫩草网站秘色| 亚洲第一级黄色片| 久热精品视频在线观看| 久久精品免费电影| 狠狠色狠狠色综合日日91app| 久久国产精品一区二区三区四区| 香蕉免费一区二区三区在线观看| 99精品99| 欧美三级网址| 久久国产精品99国产| 性亚洲最疯狂xxxx高清| 国产亚洲一区二区三区在线观看| 久久精品视频99| 久久久久国产精品一区| 亚洲国产精品成人va在线观看| 欧美国产先锋| 欧美手机在线| 久久精品免视看| 美日韩在线观看| 国产精品99久久久久久久久久久久| 一区二区高清视频在线观看| 国产精品h在线观看| 久久福利资源站| 久久久久久亚洲综合影院红桃| 亚洲第一黄色| 一区二区三区高清视频在线观看| 国产久一道中文一区| 久久亚洲精品网站| 欧美成人免费小视频| 亚洲婷婷国产精品电影人久久| 亚洲专区一区二区三区| 亚洲国产黄色片| 亚洲一二三区在线| 亚洲激情影院| 亚洲欧美国产视频| 亚洲国产一成人久久精品| 亚洲免费av片| 一区免费观看| 亚洲一区二区视频在线| 136国产福利精品导航网址| 日韩视频免费观看| 在线不卡中文字幕| 亚洲无限乱码一二三四麻| 亚洲电影观看| 午夜视频一区二区| 一区二区久久| 欧美+日本+国产+在线a∨观看| 欧美一区二区三区在线观看| 欧美国产免费| 女女同性精品视频| 国产日韩欧美麻豆| 亚洲精品一区二区三区蜜桃久| 好吊成人免视频| 亚洲深夜影院| 一区二区三区精品| 欧美韩日视频| 欧美大片一区二区三区| 国产日韩欧美成人| 999亚洲国产精| 亚洲国产1区| 久久久噜噜噜久久狠狠50岁| 久久精品国产亚洲aⅴ| 国产精品国产三级国产专区53| 亚洲国产精品成人| 亚洲国内精品| 老色鬼精品视频在线观看播放 | 亚洲国产激情| 极品中文字幕一区| 久久国产精品久久久久久电车| 午夜在线电影亚洲一区| 欧美日韩国产精品| 亚洲桃花岛网站| 久久性天堂网| 久久青青草综合| 国内精品视频一区| 新片速递亚洲合集欧美合集| 亚洲免费视频在线观看| 国产精品高潮久久| 中文av一区特黄| 亚洲影院一区| 国产美女诱惑一区二区| 亚洲一区二区三区成人在线视频精品| 中日韩视频在线观看| 欧美系列精品| 亚洲一区二区三区在线| 欧美一区永久视频免费观看| 国产日本欧美一区二区三区在线| 亚洲自拍偷拍一区| 欧美专区第一页| 影音先锋久久精品| 免费中文字幕日韩欧美| 亚洲激情在线视频| 亚洲在线视频免费观看| 国产精品欧美久久久久无广告| 亚洲欧美另类国产| 欧美a级片网| 中日韩美女免费视频网址在线观看| 国产精品久久久对白| 欧美在线一区二区三区| 欧美激情精品久久久久久变态| 亚洲香蕉伊综合在人在线视看| 欧美黄色免费网站| 久久婷婷麻豆| 亚洲国产中文字幕在线观看| 一本色道**综合亚洲精品蜜桃冫 | 亚洲视频免费| 久久福利资源站| 亚洲国产精品一区二区www| 欧美日韩视频一区二区| 亚洲综合日韩中文字幕v在线| 久久久国产一区二区| 亚洲激情一区二区三区| 国产精品视频免费一区| 另类尿喷潮videofree| 亚洲新中文字幕| 欧美大秀在线观看| 亚洲欧美日韩另类| 91久久精品国产91性色tv| 国产精品狠色婷| 免费看av成人| 欧美一区二区三区四区夜夜大片| 亚洲黄色精品| 美国三级日本三级久久99| 9人人澡人人爽人人精品| 国产亚洲网站| 国产精品久久久| 欧美日韩精品在线| 噜噜噜久久亚洲精品国产品小说| 亚洲永久字幕| 亚洲免费观看在线观看| 免费亚洲电影在线| 欧美一级在线播放| 亚洲一级二级| 一区二区国产精品| 日韩视频不卡中文|