盡管VxD使用32位平面存儲模式(flat memory model),但它的代碼和數(shù)據(jù)仍使用分段管理,段有六種類型,即實模式初始化、保護(hù)模式初始化、可分頁、不可分頁、靜態(tài)和只調(diào)試(debug only),每種類型又有代碼段和數(shù)據(jù)段之分,所以VxD共有12個段。實模式代碼段和數(shù)據(jù)段為16位(分段模式),其他段則是32位(平面模式)?!皩嵞J匠跏蓟倍伟嗽赪indows初始化過程的最初階段VMM變?yōu)楸Wo(hù)模式之前要執(zhí)行的代碼。靜態(tài)加載的VxD此時可以查看Windows啟動前的實模式環(huán)境,決定是否繼續(xù)加載,并通知VMM。加載完畢后,VMM進(jìn)入保護(hù)模式并執(zhí)行保護(hù)模式初始化代碼,同樣將執(zhí)行結(jié)果再通知VMM。初始化完成后,“實模式初始化”段和“保護(hù)模式初始化”段即被遺棄。VxD的大部分代碼都在其他的某一段中,“可分頁”段允許虛擬存儲管理器(Virtual Memory Manager)進(jìn)行分頁管理,大多數(shù)的VxD代碼都應(yīng)當(dāng)在“可分頁”段?!安豢煞猪摗倍蔚膬?nèi)容主要包括:VxD的主入口點、硬件中斷處理函數(shù)、所訪問的數(shù)據(jù)以及能被另一個VxD中斷處理函數(shù)調(diào)用的異步服務(wù)?!办o態(tài)”段僅用于可以動態(tài)加載的VxD,當(dāng)VxD卸載后,靜態(tài)代碼段和數(shù)據(jù)段都保留在內(nèi)存中?!爸徽{(diào)試”段只是VMM在Soft-ICE for Win 95等調(diào)試環(huán)境下才將其載入。
VMM是通過VxD的設(shè)備描述符塊DDB(Device Descriptor Block)來識別的。DDB向VMM提供了VxD的主入口點,還向應(yīng)用程序和其他的VxD提供了入口點。VMM利用這個主入口點將VM及Windows自身的狀態(tài)通知給VxD,然后VxD通過相應(yīng)的工作來響應(yīng)這些事件。由于VxD不僅僅服務(wù)于一個物理設(shè)備(比如多個串口)或僅與一個VM發(fā)生聯(lián)系,所以VxD需要產(chǎn)生自己支持的數(shù)據(jù)結(jié)構(gòu)(Supporting Data Structures)來保存每一個設(shè)備、每一個VM的配置和狀態(tài)信息。VxD用一個或多個設(shè)備上下文結(jié)構(gòu)來保存設(shè)備信息,如I/O端口基地址、中斷向量等,VxD將自己的每個VM的狀態(tài)信息保存在VMM的VM控制塊中。