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

小默

[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>
            欧美日韩高清一区| 久久精品视频在线看| 午夜在线视频一区二区区别| 一区二区三区高清不卡| 一本色道久久88亚洲综合88| 亚洲五月六月| 欧美一区二区三区另类 | 国产香蕉久久精品综合网| 欧美午夜一区二区福利视频| 国产精品久久波多野结衣| 国产精品综合视频| 精品999在线播放| 夜夜嗨av一区二区三区四季av| 亚洲伊人第一页| 久久久久久久久综合| 欧美国产免费| 亚洲无人区一区| 久久九九久精品国产免费直播| 欧美激情aaaa| 国产一区二区三区日韩| 亚洲精品日韩在线| 久久成人18免费观看| 欧美激情aⅴ一区二区三区| 日韩视频欧美视频| 久久久国际精品| 欧美三级免费| 亚洲电影第三页| 亚洲欧美日本视频在线观看| 欧美成人性生活| 亚洲欧美国产日韩天堂区| 久热精品视频在线| 国产日韩欧美中文在线播放| 一本色道久久精品| 国产一区二区三区久久精品| 9色精品在线| 久久精品官网| 一区二区三区久久精品| 久久综合久久综合久久综合| 国产精品色婷婷久久58| 99综合电影在线视频| 久久亚裔精品欧美| 亚洲永久免费精品| 欧美精品日日鲁夜夜添| 在线国产亚洲欧美| 久久精品国产成人| 在线一区观看| 欧美激情亚洲激情| 亚洲高清在线观看| 美女精品在线| 久久激情婷婷| 国产日本亚洲高清| 欧美一区二区高清| 亚洲视频电影在线| 欧美日韩免费观看一区二区三区 | 亚洲女人小视频在线观看| 亚洲成在线观看| 久久精品中文字幕一区二区三区 | 一区二区三区精密机械公司| 亚洲国语精品自产拍在线观看| 久久久久国产精品www| 国产午夜精品一区理论片飘花 | 亚洲国产高清在线观看视频| 久久精品亚洲精品| 欧美一级欧美一级在线播放| 国产午夜久久久久| 久久亚洲私人国产精品va| 久久久久9999亚洲精品| 亚洲第一精品福利| 亚洲大片免费看| 欧美精品久久久久久久| 亚洲视频欧美视频| 亚洲欧美卡通另类91av| 国产一级久久| 欧美成人精品1314www| 美日韩精品视频免费看| 亚洲精品一区二区网址| 亚洲美女免费视频| 国产九色精品成人porny| 久久久精品免费视频| 久久婷婷国产综合尤物精品| 亚洲精品在线二区| 亚洲永久免费av| 黄色成人在线| 亚洲国产黄色| 国产精品久久77777| 久久久99爱| 欧美成人免费大片| 亚洲一区中文字幕在线观看| 欧美亚洲一区二区在线观看| 91久久国产精品91久久性色| 日韩亚洲精品在线| 国产亚洲女人久久久久毛片| 欧美激情亚洲一区| 国产精品视频网站| 亚洲第一搞黄网站| 国产日韩av高清| 亚洲精品久久| 一区二区三区在线观看视频| 亚洲乱码精品一二三四区日韩在线| 国产精品视频福利| 欧美韩国在线| 国产一区二区高清不卡| 亚洲麻豆视频| 在线观看一区| 亚洲一区尤物| 夜夜嗨网站十八久久| 久久久久**毛片大全| 亚洲欧美日韩爽爽影院| 欧美xx69| 裸体一区二区| 国产视频一区三区| 9色精品在线| 亚洲精品久久久一区二区三区| 午夜精品美女久久久久av福利| 亚洲精品国产精品国自产在线| 午夜精品一区二区三区电影天堂| 99在线精品免费视频九九视| 久久精品理论片| 欧美中日韩免费视频| 欧美日韩一区视频| 亚洲欧洲精品一区二区| 在线观看视频亚洲| 久久不见久久见免费视频1| 亚洲欧美日韩专区| 国产精品豆花视频| 亚洲美女性视频| 日韩天堂在线观看| 久久在线免费| 欧美11—12娇小xxxx| 国产一区二区黄| 香蕉成人啪国产精品视频综合网| 亚洲午夜一区二区| 欧美日产在线观看| 91久久中文字幕| 亚洲精品视频一区| 麻豆av福利av久久av| 欧美91视频| 亚洲国产精选| 欧美成人高清| 亚洲国产精品悠悠久久琪琪| 亚洲黄色大片| 欧美激情中文字幕在线| 亚洲美女中出| 欧美日韩国产不卡| 一区二区三区精密机械公司| 亚洲一区在线播放| 国产精品乱看| 亚欧美中日韩视频| 久久阴道视频| 亚洲精品123区| 欧美日韩免费区域视频在线观看| 亚洲欧洲一区二区在线播放 | 日韩视频在线播放| 欧美日本高清视频| 99亚洲一区二区| 欧美一区成人| 激情成人av在线| 欧美国产日韩精品免费观看| 亚洲免费成人av| 欧美在线亚洲综合一区| 在线精品国精品国产尤物884a| 欧美丰满少妇xxxbbb| 亚洲精品少妇网址| 欧美在线国产| 亚洲精品123区| 国产精品欧美日韩一区二区| 久久久久久亚洲精品杨幂换脸| 亚洲欧洲视频| 久久精品女人天堂| 亚洲精品久久久久中文字幕欢迎你| 欧美日韩伊人| 久久精品首页| 9色porny自拍视频一区二区| 久久在精品线影院精品国产| 亚洲最新视频在线| 国内精品嫩模av私拍在线观看 | 欧美日韩一区二区精品| 欧美在线视频免费播放| 亚洲精品视频二区| 美女露胸一区二区三区| 亚洲影院一区| 亚洲精选久久| 狠狠干综合网| 国产精品网站一区| 欧美精品日韩综合在线| 久久精品72免费观看| 亚洲视频综合| 亚洲黄网站在线观看| 久久久久88色偷偷免费| 亚洲视频综合| 日韩视频一区二区| 亚洲国产精品久久精品怡红院| 国产美女一区| 国产精品yjizz| 欧美久久九九| 欧美大片在线看| 久久久久亚洲综合| 欧美亚洲一区在线| 销魂美女一区二区三区视频在线| 99国产精品国产精品久久|