日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DDK_HelloWorld卸载例程细化(驱动学习笔记四)

發(fā)布時(shí)間:2023/12/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DDK_HelloWorld卸载例程细化(驱动学习笔记四) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

DDK_HelloWorld卸載例程細(xì)化

  • 0x0 藍(lán)屏
  • 0x1 頭文件、cpp文件
  • 0x2 PDEVICE_EXTENSION

0x0 藍(lán)屏

  • 在編譯DDK卸載程序時(shí),誤將符號名字寫成了設(shè)備名,從而導(dǎo)致卸載時(shí)直接藍(lán)屏
  • 加載驅(qū)動(dòng)的時(shí)候發(fā)生藍(lán)屏,使用windbg定位到問題點(diǎn)如下:

    pDevobj正常,但是提示pDevExt為空指針從而導(dǎo)致藍(lán)屏,想了想覺得很奇怪,難道是PDEVICE_EXTENSION定義錯(cuò)了?反復(fù)查看定義未發(fā)現(xiàn)有什么不妥,
    但是windbg中也顯示pDevobj->DeviceExtension為空,后來左右對比發(fā)現(xiàn)如下代碼:

    在創(chuàng)建設(shè)備的時(shí)候,DEVICE_EXTENSION的大小竟然為0,難怪會是空指針!
    將代碼改為如下后,加載驅(qū)動(dòng)便不再藍(lán)屏了:
  • 按照《Windows驅(qū)動(dòng)開發(fā)技術(shù)詳解》里的代碼將HelloDDK編譯后,發(fā)現(xiàn)每次卸載驅(qū)動(dòng)的時(shí)候都會發(fā)生藍(lán)屏,使用windbg定位到問題故障點(diǎn)如下:

    根據(jù)dbg上查看到的信息發(fā)現(xiàn)是存儲pLinkName的內(nèi)存訪問錯(cuò)誤,反復(fù)檢查流程,發(fā)現(xiàn)邏輯并沒有什么問題,同時(shí)發(fā)現(xiàn)pDevExt->ustrSymLinkName和ustrDeviceName都是異常的內(nèi)存,因此懷疑是內(nèi)存已經(jīng)被釋放了?
    我們找到ustrSymLinkName和ustrDeviceName被賦值的地方如下:

    我們發(fā)現(xiàn)它們的賦值是在創(chuàng)建設(shè)備的過程中進(jìn)行的,檢查創(chuàng)建過程的值發(fā)現(xiàn)它們確確實(shí)實(shí)是被成功賦值了,可是為什么后面又沒有了呢?
    我們看到該函數(shù)時(shí)位于內(nèi)存標(biāo)志位INIT的內(nèi)存區(qū)域的

    書上對INIT內(nèi)存區(qū)域的描述是函數(shù)只是在加載的時(shí)候需要載入內(nèi)存,但是當(dāng)驅(qū)動(dòng)程序成功加載后,函數(shù)就會從內(nèi)存中卸載掉,如下:

    我的理解是,如果把CreateDevice函數(shù)放在INIT內(nèi)存區(qū)域,函數(shù)內(nèi)的賦值操作也會保存在INIT內(nèi)存區(qū)域,那么在加載驅(qū)動(dòng)的時(shí)候,給符號和設(shè)備名進(jìn)行賦值的時(shí)候,一起正常。但是加載成功后,該段內(nèi)存區(qū)域即被釋放,所以當(dāng)卸載驅(qū)動(dòng)再次調(diào)用該段內(nèi)存區(qū)域時(shí),由于該內(nèi)存區(qū)域已經(jīng)被釋放了,所以導(dǎo)致了藍(lán)屏
    因此,解決辦法是,把該函數(shù)放到PAGE內(nèi)存區(qū)域,即不再藍(lán)屏
    然而,事情沒有結(jié)束
    在正常卸載掉驅(qū)動(dòng)后,再次把該函數(shù)改到INIT內(nèi)存區(qū)域,卸載驅(qū)動(dòng)也不會出現(xiàn)藍(lán)屏。這是否意味著,真正藍(lán)屏的原因是由于之前內(nèi)存中還保存著一些東西?按理來說,如果內(nèi)存中有符號名是無法再次創(chuàng)建驅(qū)動(dòng)成功的。

    真正的原因還待進(jìn)一步去研究…
  • 0x1 頭文件、cpp文件

    根據(jù)觀察到的情況,通常,聲明、定義結(jié)構(gòu)體、重定義變量名放在頭文件中,具體實(shí)現(xiàn)放在CPP文件中

    0x2 PDEVICE_EXTENSION

    根據(jù)源代碼調(diào)用PDEVICE_EXTENSION時(shí)發(fā)現(xiàn)始終無法找到該結(jié)構(gòu)體,后來發(fā)現(xiàn)原來該結(jié)構(gòu)體需要自己定義,坑爹啊…如下:

    typedef struct _DEVICE_EXTENSION {PDEVICE_OBJECT pDevice;UNICODE_STRING ustrDeviceName; // 設(shè)備名稱UNICODE_STRING ustrSymLinkName; // 符號鏈接名 }DEVICE_EXTENSION,*PDEVICE_EXTENSION;

    TO be continue…

    總結(jié)

    以上是生活随笔為你收集整理的DDK_HelloWorld卸载例程细化(驱动学习笔记四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品久久久久久久久久辛辛 | 国产成人91| 关之琳三级做爰 | 国产欧美中文字幕 | 欧美性猛交xxxx黑人 | www.成人免费视频 | 在线观看第一页 | 精品影视 | 香蕉福利| 123超碰| 好看的毛片| 亚洲精品国产精品国自 | 日韩草逼视频 | 日韩黄色三级 | 日韩毛片无码永久免费看 | 国产精品一区二区无线 | 亚洲乱码国产乱码精品精大量 | 九一精品视频 | 国产www免费观看 | 国产传媒国产传媒 | a v在线视频 | 一区二区三区资源 | 国产精品免费av一区二区 | 国产日韩亚洲欧美 | 亚洲色图.com | 激情网站在线 | 性欧美videos高清hd4k | 亚洲天堂资源在线 | ass日本| 伊人伊人| 日韩精品影视 | 国产噜噜噜噜久久久久久久久 | 欧美日韩亚洲高清 | 美女隐私无遮挡网站 | 国产视频在线一区二区 | www噜噜噜 | av国产一区 | 欧美大肥婆大肥bbbbb | av加勒比在线 | 久久久久久一 | 丰满大爆乳波霸奶 | 四虎永久免费 | 福利一区三区 | 亚洲精品国产suv | 一级片黑人 | 无码成人一区二区 | 日韩伦理大全 | 精品国产一区二区三区在线 | 国产精品77777| 成人天堂网| 性少妇bbw张开 | 国产一区不卡在线观看 | 精品国内自产拍在线观看视频 | 亚洲免费视频观看 | 国产成人av影院 | 青青视频免费 | 四川话毛片少妇免费看 | 爱爱小视频免费看 | 欧美一级爽aaaaa大片 | 国产日韩欧美在线观看 | 五月av在线 | 日韩一区二区免费在线观看 | 亚洲精品电影在线 | av合集| 国产私拍视频 | 在线99视频 | 国产三级国产精品国产专区50 | 天天人人综合 | 亚洲精品在线观看av | 久久久精品视 | 96精品 | 任你操精品视频 | 国产乡下妇女做爰视频 | 午夜小视频在线观看 | 亚洲xxx视频 | 国产一区日本 | 日韩黄页网站 | 精品人妻人人做人人爽夜夜爽 | 天天射天天色天天干 | 夜夜精品一区二区无码 | 国产老妇伦国产熟女老妇视频 | 国产精品高潮AV无码 | 中文字幕免费 | www.射.com | 亚洲av日韩精品久久久久久久 | 九色首页 | 男人天堂手机在线 | 久久久精品视频在线观看 | 欧美成在线观看 | 99国产精品欲 | 国产51视频| 欧美激情一二三区 | 国产永久在线 | 亚洲综合中文 | 中文字幕视频 | 国产精品无码久久久久久电影 | 国产一级片视频 | 国自产拍偷拍精品啪啪一区二区 | 亚洲无码乱码精品国产 |