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

正文內(nèi)容

wince下的usb設(shè)備-資料下載頁

2025-08-04 10:14本頁面
  

【正文】 L向操作系統(tǒng)提供接口。同時也為后續(xù)的操作進(jìn)行了準(zhǔn)備。 最關(guān)鍵的部分就在接下來的LoadDriver()那句,加載了另一個驅(qū)動程序的DLL文件,計數(shù)器增一,取到該文件中UsbDiskAttach函數(shù)及UsbDiskDetach函數(shù)的地址,注冊事件通知處理函數(shù),然后調(diào)用了該DLL文件中的UsbDiskAttach函數(shù)。 由此可見,USB設(shè)備驅(qū)動程序有兩層功能,一方面是識別出指定的設(shè)備并進(jìn)行配置,另一方面按照要求調(diào)用更高層的驅(qū)動程序來向操作系統(tǒng)提供接口。,操作系統(tǒng)就會按該文件中的程序以一個磁盤的形式或文件夾的形式進(jìn)行處理,通過文件系統(tǒng)的操作,就可以對其進(jìn)行讀寫控制了。我們也可以看一下HID設(shè)備的這個函數(shù),它也是通過這種方式讓操作系統(tǒng)知道把USB設(shè)備識別成鼠標(biāo)設(shè)備的。 前文我們說過還有一個通知消息的回調(diào)函數(shù),我們在剛才的程序體中已經(jīng)發(fā)現(xiàn)通過:UsbFuncslpRegisterNotificationRoutine( hDevice, UsbDeviceNotify, pUsbDevice )。語句已經(jīng)對這個函數(shù)進(jìn)行了設(shè)置。我們再向下來看一下這個函數(shù)的函數(shù)體。這個函數(shù)很簡單,只要對USB_CLOSE_DEVICE消息進(jìn)行處理,既然是要關(guān)閉USB設(shè)備,讓上層的驅(qū)動程序進(jìn)行釋放,然后將引用計數(shù)減一,如果不再有設(shè)備引用此驅(qū)動程序,則FreeLibrary(),僅此而已。 其余的函數(shù)可以再仔細(xì)研究一下,在此就不詳細(xì)描述了,接下來我們要弄明白的就是到底操作系統(tǒng)是如何通過抽象的DISK讀寫具體的設(shè)備呢?帶著上次留下的疑問,我們繼續(xù)來學(xué)習(xí)操作系統(tǒng)如何通過USBDISK讀寫USB設(shè)備的。我們先看USB/CLASS/STORAGE/DISK/SCSI2/。在這個文件中可以看到,該DLL一共導(dǎo)出了14個函數(shù),其中兩個是上次內(nèi)容當(dāng)中被設(shè)備驅(qū)動程序調(diào)用的UsbDiskAttach和UsbDiskDetach,余下的是一組以DSK開頭的流驅(qū)動接口,易見,USBDISK是以流驅(qū)動的形式向操作系統(tǒng)提供服務(wù)的。 為了清晰起見,以下大量的程序我們并不學(xué)習(xí),而只關(guān)心設(shè)備讀寫。找到DSK_Read和DSK_Write兩個函數(shù),令我們大失所望,因為這兩個函數(shù)都是形如UNREFERENCED_PARAMETER(pDevice)。UNREFERENCED_PARAMETER(pBuffer)。UNREFERENCED_PARAMETER(BufferLength)。DEBUGMSG(ZONE_ERR,(TEXT(DSK_Read/n)))。SetLastError(ERROR_INVALID_FUNCTION)。return 0。這樣的實現(xiàn),也就是說用戶無法通過常規(guī)的ReadFile和WriteFile函數(shù)使用這個設(shè)備,那怎么辦?是否意味著這個DISK無法讀寫呢?當(dāng)然不是,我們應(yīng)該馬上想到DSK_IOControl()這個函數(shù),當(dāng)遇到某些設(shè)備無法用常規(guī)的文件操作函數(shù)操作時,我們有DeviceIoControl()用戶函數(shù)可以使用,而這個函數(shù)就會調(diào)用到驅(qū)動程序中的DSK_IOControl函數(shù)。 在這個函數(shù)中,我們找到了對IOCTL_DISK_READ等命令的處理程序,其中最關(guān)鍵的一句就是ScsiRWSG(pDevice, pSgReq, pDeviceLun, bRead),即調(diào)用了一個ScsiRWSG的函數(shù)。 ,我們找到了這個函數(shù),其中SG指的是一種讀寫緩沖區(qū)的數(shù)據(jù)結(jié)構(gòu),實際上就是帶有緩沖區(qū)及長度的一個結(jié)構(gòu)體,是CE下磁盤設(shè)備通用的讀寫數(shù)據(jù)結(jié)構(gòu)。在這個函數(shù)中我們發(fā)現(xiàn)它再次調(diào)用了ScsiReadWrite()這個函數(shù)進(jìn)行讀寫操作,找到這個函數(shù),里面有我們最重要的一行調(diào)用,即調(diào)用了UsbsDataTransfer()函數(shù),還記得這個函數(shù)在哪見過嗎?沒錯,就是在USB設(shè)備的驅(qū)動程序當(dāng)中。 通過這一過程我們發(fā)現(xiàn),那些Scsi的函數(shù)都只是在準(zhǔn)備一些緩沖區(qū)、數(shù)據(jù)結(jié)構(gòu)等,并沒有對硬件進(jìn)行操作,真正要操作硬件設(shè)備的還是由驅(qū)動程序來完成的,可見,設(shè)備驅(qū)動程序是有著很強(qiáng)層次結(jié)構(gòu)的,下層是專門針對物理設(shè)備的,上層是針對操作系統(tǒng)的抽象設(shè)備的,下層是U盤等物理實體,上層是文件夾,二者通過一定的通信或調(diào)用機(jī)制完成了設(shè)備在操作系統(tǒng)下的正常工作。 ,找到UsbsDataTransfer函數(shù),這個函數(shù)很簡單,根據(jù)傳輸協(xié)議調(diào)用CBIT_DataTransfer()或BOT_DataTransfer() 即可。
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1