摘要: 一般性調(diào)試技巧包括打印調(diào)試信息、查看dump文件等。這些方法在調(diào)試驅(qū)動(dòng)中比較常見,使用也比較簡單。
閱讀全文
摘要: 今天在調(diào)試驅(qū)動(dòng)的時(shí)候,發(fā)現(xiàn)一個(gè)開始覺得很奇怪的問題,就是調(diào)用RtlStringCbPrintfW函數(shù)來格式化WCHAR字符串時(shí),一定藍(lán)屏,提示
IRQL_NOT_LESS_OR_EQUAL,并且比較郁悶的是,在虛擬機(jī)上有時(shí)不會(huì)出現(xiàn),有時(shí)會(huì)出現(xiàn),但在真正的主機(jī)上一定會(huì)出現(xiàn)(Windows xp sp2)。
一般出現(xiàn)IRQL_NOT_LESS_OR_EQUAL,是IRQL在級(jí)別高的地方調(diào)用了分頁內(nèi)存,所以,我就想到把當(dāng)前的IRQL打出來看看,發(fā)現(xiàn)在進(jìn)入函數(shù)
的時(shí)候,當(dāng)前的IRQL是0(PASSIVE_LEVEL),而在執(zhí)行這段代碼的地方,IRQL是2(DISPATCH_LEVEL),是什么原因使得IRQL發(fā)生了變化呢?
仔細(xì)查看代碼后,發(fā)現(xiàn)了原因,因?yàn)樵趫?zhí)行這段代碼之前,通過NdisAcquireSpinLock獲取旋轉(zhuǎn)鎖,而在旋轉(zhuǎn)鎖釋放之前,其中的代碼是跑在
IRQL=2的,另外,RtlStringCbPrintfW需要處理分頁內(nèi)存(PagedPool),但在IRQL=2的情況下,是只能處理非分頁內(nèi)存的(NonpagedPool),所以,
閱讀全文
摘要: 中間層驅(qū)動(dòng)對(duì)上層來說,扮演一個(gè)Miniport Driver的角色,它在上邊沿向NDIS注冊(cè)一組Miniportxxx函數(shù);對(duì)于下層Miniport Driver來說,中間層驅(qū)動(dòng)扮演一個(gè)Protocol Driver的角色,因此它在下邊沿向NDIS注冊(cè)一組Protocolxxx函數(shù)。Miniport Driver通過調(diào)用NdisMRegisterMiniport向NDIS注冊(cè)一組MiniportXxx函數(shù);Protocol Driver 通過調(diào)用 NdisRegisterProtocol向NDIS注冊(cè)一組ProtocolXxx函數(shù)。
閱讀全文
摘要: 我這里將一步一步的介紹,是從新手的角度來講的,所以對(duì)高手來說,可能有些啰嗦。如果你看完這篇文章還不知道如何設(shè)置,那么原因可能有兩個(gè):1. 我沒講好;2. 你需要稍微認(rèn)真看下并實(shí)踐下,并實(shí)現(xiàn)對(duì)相關(guān)基本概念要有所了解。
閱讀全文
摘要: 在傳輸文件的時(shí)候,為了顯示傳輸?shù)倪M(jìn)度,需要在一行不停的變換數(shù)字顯示,找了些資料,發(fā)現(xiàn)原來可以很簡單的實(shí)現(xiàn)
閱讀全文
摘要: 常用DNS服務(wù)軟件
閱讀全文
摘要: UDT是建立在UDP協(xié)議基礎(chǔ)之上的應(yīng)用層協(xié)議,其最終是通過UDP協(xié)議來接發(fā)數(shù)據(jù)。
在UDT的實(shí)現(xiàn)中,是通過類CChannel來處理的,顧名思義,可以理解為通過UDP管道來接發(fā)數(shù)據(jù)。
閱讀全文
摘要: 具體介紹了udt包結(jié)構(gòu)
閱讀全文
摘要: linux下udp頭結(jié)構(gòu)
閱讀全文
摘要: linux下tcp頭結(jié)構(gòu)及說明
閱讀全文