1 列舉裝置:因為微軟已經提供usb驅動程式開發api介面,所以使用此api介面,進行裝置列舉。
標準函式介面:ulong devapi skf_enumdev(bool bpresent, lpstr sznamelist, ulong *pulsize)
輸入引數:bpresent [in] 為 true 表示取當前裝置狀態為存在的裝置列表。為 false 表示取當前驅動支援的裝置列表。
sznamelist [out] 裝置名稱列表。如果該引數為 null,將由 pulsize 返回所需要的記憶體空間大小。每個裝置的名稱以單個『\0』結束,以雙『\0』表示列表的結束。
pulsize [in ,out] 輸入時表示裝置名稱列表的緩衝區長度,輸出時表示sznamelist 所占用的空間大小。
實現:分為hid通訊,usb mass storage,scsi
1:hid通訊,scsi:兩者區別在於裝置類別不一樣 ,也就是guid值不同,例子中為hid通訊
hidd_gethidguid(&hid_guid);獲得hid的guid值;
然後通過hdevinfo=setupdigetclassdevs(&hid_guid,null,null,digcf_present|digcf_deviceinte***ce);函式獲得滿足該guid值的裝置列表
或者通過hdevinfo=setupdigetclassdevs(&guid_devinte***ce_cdrom,null,null,digcf_present|digcf_deviceinte***ce);函式獲得滿足scsi通訊協議的guid值的裝置列表。
死迴圈遍歷列表查詢滿足我們的裝置,hid裝置通過pid,vid比對查詢,scsi也通過這兩個值,只不過寫法不同而已
遍歷過程:setupdienumdeviceinte***ces列舉裝置列表中第n個裝置,並獲得該裝置的裝置資訊
setupdigetdeviceinte***cedetail第一次呼叫,通過獲得的裝置資訊,獲取該裝置在pc端的路徑資訊的位元組大小
setupdigetdeviceinte***cedetail第二次呼叫之前,要給該儲存路徑的資料結構分配記憶體,然後獲取路徑資訊
createfile使用該函式建立裝置控制代碼(上面得到的裝置路徑)
hidd_getattributes獲得hid裝置的hid屬性資料結構
最後進行vid,pid值比較,判斷是否為我們的裝置,是的話記錄控制代碼然後呼叫獲取裝置資訊,獲得裝置標籤返回即可。
最主要的功能是獲取裝置控制代碼,因為後面所有的操作都是基於此處的裝置控制代碼,擁有控制代碼後才能進行通訊;
注意函式的引數,輸出為連線的所有裝置名稱列表,因此需要下面connectdevice函式輸入某裝置名稱,然後進行連線。
連線裝置同樣使用這些api函式,區別在於連線裝置時,函式的輸入引數中需要輸入裝置名稱,然後和尋找到的裝置的裝置資訊中的標籤進行比對,相同則成功連線,不相同則不能成功連線。
連線裝置函式原型:ulong devapi skf_connectdev (lpstr szname, devhandle *phdev)
功能描述 通過裝置名稱連線裝置,返回裝置的控制代碼。
引數 szname [in] 裝置名稱。
phdev [out] 返回裝置操作控制代碼。
返回值 sar_ok: 成功。
其他: 錯誤碼。
實現過程同列舉實現部分
hadoop各個元件之間的通訊
文章 在hadoop中為了方便集群中各個元件之間的通訊,它採用了rpc,當然為了提高元件之間的通訊效率以及考慮到元件自身的負載等情況,hadoop在其內部實現了乙個基於ipc模型的rpc。關於這個rpc元件的整體情況我已紹經在前面的博文中介紹過了。而在本文,我將結合源 詳細地介紹它在客戶端的實現。先...
Hadoop YARN各個元件和流程的學習
size x large color red b 一 基本組成結構 b color size 集群唯一的resourcemanager 每個機器節點上的nodemanager color blue b 執行在每個nodemanager上針對某個任務的container b color size la...
Duilib中各個類的簡單介紹
來自 一 核心類 1.cwindowwnd,視窗物件管理父類,主要作用 1 建立視窗。2 視窗訊息過程處理。3 提供視窗子類化與超類化介面。2.cdialogbuilder,控制項布局類,主要作用 1 讀取xml指令碼,分析指令碼,構建控制項樹。2 建立控制項物件。3.cpaintmanagerui...