freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c機(jī)的高級(jí)編程技術(shù)-資料下載頁(yè)

2025-05-15 02:02本頁(yè)面
  

【正文】 P實(shí)現(xiàn) +I/O棧實(shí)現(xiàn)。 (較優(yōu)) IO_STACK_LOCATION結(jié)構(gòu)成員: MajorFunction(該 IRP的主功能碼) MinorFunction(該 IRP的副功能碼) Parameters( IRP參數(shù)) DeviceObject(與該棧單元對(duì)應(yīng)的設(shè)備對(duì)象地址 ) FileObject(內(nèi)核文件對(duì)象地址) CompletionRoutine( I/O完成程序地址) Context(任意的與上下文相關(guān)的值)。 63 Parameters成員的幾個(gè)常見的類型 : IRP_MJ_CREATE請(qǐng)求 ,創(chuàng)建設(shè)備映射; IRP_MJ_CLOSE請(qǐng)求 ,關(guān)閉設(shè)備映射; IRP_MJ_READ請(qǐng)求 ,讀取設(shè)備對(duì)象的信息; IRP_MJ_WRITE請(qǐng)求 ,對(duì)設(shè)備對(duì)象寫信息; IRP_MJ_PNP請(qǐng)求 ,實(shí)現(xiàn) PnP管理,如IRP_MN_START_DEVICE請(qǐng)求 ,啟動(dòng)設(shè)備; IRP_MJ_IOCTL請(qǐng)求 , I/O控制。 64 IRP創(chuàng)建與處理 創(chuàng)建者: I/O管理器,或其他的驅(qū)動(dòng)程序。 創(chuàng)建 IRP的函數(shù): IoBuildAsynchronousFsdRequest()。//創(chuàng)建異步 IRP IoBuildSynchronousFsdRequest()。//創(chuàng)建同步 IRP IoBuildDeviceIoControlRequest()。 //創(chuàng)建同步 IRP_MJ_DEVICE_CONTROL或 // IRP_MJ_INTERNAL_DEVICE_CONTROL請(qǐng)求 IoAllocateIrp()。//創(chuàng)建其他種類 IRP IoMakeAssociatedIrp()。//創(chuàng)建某些 IRP的子 IRP 65 IRP的設(shè)置與派遣: I/O管理器在創(chuàng)建完 IRP后,將 I/O請(qǐng)求信息設(shè)置到IRP中,并將 IRP發(fā)送到設(shè)備驅(qū)動(dòng)程序中。 已知參數(shù)信息: PDEVICE_OBJECT DeviceObject; //設(shè)備對(duì)象結(jié)構(gòu) IRP_MJ_Xxx; //I/O請(qǐng)求對(duì)應(yīng)的功能碼 I/O管理器的處理流程: PIO_STACK_LOCATION stack = IoGetNextIrpStackLocation(Irp)。 //獲得該 IRP第一個(gè)堆棧單元的指針 (堆棧初始為空 ) stackMajorFunction = IRP_MJ_Xxx。 //填充 MajorFunction代碼 …… //對(duì)棧做其他初始化的工作 //如 StartIo() NTSTATUS status = IoCallDriver(DeviceObject,Irp)。 //把 IRP發(fā)送到設(shè)備驅(qū)動(dòng)程序 66 IoCallDriver的執(zhí)行過(guò)程: NTSTATUS IoCallDriver(PDEVICE_OBJECT device, PIRP Irp) { IoSetNextIrpStackLocation( Irp) ; PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); //獲得棧單元指針 stackDeviceObject = device。 //設(shè)置設(shè)備對(duì)象結(jié)構(gòu)地址 ULONG f = stackMajorFunction; //得到主功能號(hào) PDRIVER_OBJECT driver = deviceDriverObject; //獲得驅(qū)動(dòng)程序?qū)ο蟮牡刂? return (*driverMajorFunction[f])(device,Irp); //利用主功能號(hào)調(diào)用相應(yīng)的派遣函數(shù) } *driver MajorFunction[f]是函數(shù)指針,它所指向的派遣函數(shù)是在 DriverEntry例程中指定的。 轉(zhuǎn) 56頁(yè) 67 IRP參數(shù)與 Win32 API 大部分 IRP參數(shù)可以和 Win32函數(shù)對(duì)應(yīng)起來(lái): IRP類型 Win32 API IRP_MJ_CREATE CreateFile IRP_MJ_READ ReadFile IRP_MJ_WRITE WriteFile IRP_MJ_IOCTL DeviceIoControl IRP_MJ_CLOSE CloseFile IRP_MN_START_DEVICE StartDevice 說(shuō)明: IRP_MJ_PNP包含 8個(gè) IRP_MN_xx消息, IRP_MN_START_DEVICE就是其中的一個(gè)。 68 五、 即插即用 支持即插即用 主要是指實(shí)現(xiàn)一個(gè) AddDevice程序和一個(gè) IRP_MJ_PNP處理程序。這個(gè) PnP IRP有 8個(gè)次功能代碼(它們的主功能代碼都是 IRP_MJ_PNP)。 IRP_MN_START_DEVICE 分配資源并啟動(dòng)設(shè)備 IRP_MN_QUERY_REMOVE_DEVICE 詢問(wèn)一個(gè)設(shè)備是否可以刪除 IRP_MN_REMOVE_DEVICE 設(shè)備被拔出,刪除設(shè)備 IRP_MN_CANCEL_REMOVE_DEVICE 取消查詢刪除請(qǐng)求 IRP_MN_STOP_DEVICE 停止設(shè)備進(jìn)行資源重新分配 IRP_MN_QUERY_STOP_DEVICE 詢問(wèn)設(shè)備是否可以停止 IRP_MN_CANCEL_STOP_DEVICE 取消查詢停止請(qǐng)求 IRP_MN_SURPRISE_REMOVAL 用戶在意外下拔出設(shè)備 69 NTSTATUS DispatchPnp(PDEVICE_OBJECT fdo, PIRP Irp) { PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); ULONG f = stackMinorFunction; // 取副功能碼 static NTSTATUS status=STATUS_SUCCESS switch (f) // 按照副功能碼調(diào)用相關(guān)的處理函數(shù) { case IRP_MN_START_DEVICE: HandleStartDevice(fdo,Irp); break; case IRP_MN_QUERY_REMOVE_DEVICE: HandleQueryRemove(fdo, Irp); break。 …… } if (f = arraysize(ftab)) return DefaultPnpHandler(fdo, Irp); return status; } 70 六、 數(shù)據(jù)讀 /寫 WDM有 4個(gè)標(biāo)準(zhǔn)的資源類型,分別是: ? CmResourceTypePort(端口資源) ? CmResourceTypeMemory(內(nèi)存資源) ? CmResourceTypeInterrupt(中斷資源) ? CmResourceTypeDma( DMA資源) 內(nèi)存與端口訪問(wèn) 盡管 PC機(jī)的 I/O端口是單獨(dú)編址的,但為了做到和統(tǒng)一編址的機(jī)器兼容性, Windows 2021的設(shè)計(jì)者使用了硬件抽象層( HAL)的概念。無(wú)論是單獨(dú)編址還是統(tǒng)一編址,只需要使用 P386表中所給的函數(shù)就可以訪問(wèn)端口和內(nèi)存了。 71 響應(yīng)中斷 響應(yīng)中斷首先要配置中斷 , 也就是截獲中斷 , 然后就需要編寫中斷處理程序 。 配置中斷資源是在 StartDevice函數(shù)中實(shí)現(xiàn)的,使用從 CmResourceTypeInterrupt描述符中得到的參數(shù)來(lái)調(diào)用 IoConnectInterrupt函數(shù)。和實(shí)模式下一樣,在調(diào)用IoConnectInterrupt進(jìn)行中斷配置前應(yīng)該禁止 PC機(jī)的中斷,調(diào)用之后再允許設(shè)備中斷。 72 七、 WDM驅(qū)動(dòng)程序的安裝文件 驅(qū)動(dòng)程序的安裝: 安裝 步驟: 根據(jù) INF文件中的指令進(jìn)行。 安裝內(nèi)容: 將 可執(zhí)行文件復(fù)制到正確的位置(通常是 Windows System32\Drivers目錄); 創(chuàng)建各種注冊(cè)表項(xiàng)。 INF文件: 是一個(gè)文本文件,它由節(jié)組成,每一節(jié)從括在方括號(hào)中的節(jié)名稱開始,后面是節(jié)的內(nèi)容,大部分段都含有一系列“ keyword = value”形式的項(xiàng)。 73 節(jié) 項(xiàng) 值描述 [Version] Signature Provider Class ClassGuid DriverVer $Windows NT$, $Windows 95$ 或 $Chicago$ INF文件創(chuàng)建者 系統(tǒng)定義的類名字 , 或用戶指定 的新的類名字 匹配的類 GUID 驅(qū)動(dòng)程序的版本號(hào) [Strings] %String%=”Value” 指定一個(gè)字符串 [Manufacturer] %manufacturer%= models 指定廠商名和對(duì)應(yīng)的 models節(jié)的名稱 [models] 指定產(chǎn)品名稱、對(duì)應(yīng)的 install節(jié)的名稱和硬件 ID, 0個(gè)或多個(gè)兼容 ID 74 節(jié) 項(xiàng) 值描述 [install] Copyfiles=@filename | filelist Addreg=addreg ProfileItems 指 定 要復(fù) 制 的文 件 , 或列出filelist節(jié)的名稱 指定 addreg節(jié)的名稱 列出指定要添加到 “ 開始 ” 菜單中的項(xiàng) [DestinationDirs] DefaultDestDir=dirid, [subdir] filelist= dirid, [subdir] 對(duì)默認(rèn)文件復(fù)制和 filelist節(jié)中的文件復(fù)制 , 指定目錄 ID和可選的子目錄 。 dirid是一個(gè)目錄代碼 ,指 示 存放 文 件的 標(biāo) 準(zhǔn)位 置 。Windows 2021DDK定義了這些代碼 ,如代碼 10表示 Windows目錄 [filelist] 要安裝的文件列表 [addreg] 添加新的鍵和值
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1