wince中測試驅動應用程序的實現

  這裏建的工程是MFC的smart device,選擇ARMV4I的指令集,不一樣的設備可能會有輕微的不一樣,不過大致實現是同樣滴。還有,這裏選的應用類型是dialog base。函數

  1.應用監測內核動向post

  內核經過postmessage廣播給全部的窗口,好比發送的數據是「hello ce」,即PostMessage(HWND_BROADCAST, RegisterWindowMessage(L"hello ce"), 0, 0);而後就是應用部分監測消息,先在對話框類裏面聲明一個消息處理PreTranslateMessage,手動添加或者在vs的資源視圖的dialog裏面添加消息也是能夠的,我這裏用手動添加,另外一種好像找不着這個消息。而後在PreTranslateMessage這個函數裏面添加一個判斷if(pMsg->message == ::RegisterWindowMessage(L"hello ce"))blog

{內存

    應用處理內容資源

postmessage

  2.應用和內核流式驅動的雙向通訊變量

  首先,假設流式驅動若是註冊的名字爲LED,index是0。(數值零不是字母O)擴展

  而後,應用和驅動中共同分別都要定義一個宏,名爲IOCTL_WRITE_LED,即#define IOCTL_WRITE_LED 10086   。im

  接着就是幾個關鍵的函數,CreateFile和DeviceIoControl。先用HANDLE hread = CreateFile(L"LED0:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 通信

FILE_ATTRIBUTE_NORMAL, NULL);建立一個句柄hread定義 BYTE bTemp[128]用來存放數據,而後DeviceIoControl(hread, IOCTL_WRITE_LED, NULL, 0, bTemp, 128, 0, (LPOVERLAPPED) NULL);就可以把數據寫入到bTemp裏面,這樣就能讀取驅動中的數據。一樣,要寫數據進驅動,DeviceIoControl(hread, IOCTL_READ_LED, (char *)(LPCTSTR)c_str, sizeof(c_str), NULL, 0, 0, (LPOVERLAPPED) NULL);IOCTL_READ_LED這個宏自行定義,這裏面的格式轉換花費了我一點時間,如今就能完成應用層主動讀取和寫數據進內核了。

  3.擴展

  若是應用要讀寫內核的全部數據,能夠經過讀寫一個流式驅動,而後這個流式驅動用共享內存或者全局變量的方式傳值。可能還有更好的辦法,目前我就只能用這種比較挫的方式。

  界面比較簡單,加幾個按鈕,控制led開關。

相關文章
相關標籤/搜索