Wince5.0 流驅動創建全程 (經典中的經典)

使用Platform Builder5.0創建Wince5.0的流驅動相當簡單,你只需要編寫一個修改3個文件,.c,.bib,.reg. 詳細步驟如下:

1.用PB5.0創建一個動態鏈接庫(DLL)工程,取名爲MyDriver,在第二步選擇“A Simple DLL Project".

2.在工程中添加源文件MyDriver.cpp.

 

#include<windows.h> #include<tchar.h> #define BUFSIZE 256 WCHAR achBuffer[BUFSIZE]; BOOL WINAPI DllEntry(HANDLE hinstDLL,DWORD deReason,LPVOID lpvReserved) { switch(deReason) { case DLL_PROCESS_ATTACH: RETAILMSG(1,(TEXT("STRINGS:DLL_PROCESS_ATTACH\n"))); return TRUE; case DLL_THREAD_ATTACH: RETAILMSG(1,(TEXT("STRINGS:DLL_THEARD_ATTACH\n"))); return TRUE; case DLL_PROCESS_DETACH: RETAILMSG(1,(TEXT("STRINGS:DLL_PROCESS_DETACH\n"))); return TRUE; case DLL_THREAD_DETACH: RETAILMSG(1,(TEXT("STRINGS:DLL_THEARD_DETACH\n"))); return TRUE; #ifdef UNDER_CE case DLL_PROCESS_EXITING: RETAILMSG(1,(TEXT("STRINGS:DLL_PROCESS_EXITING\n"))); break; case DLL_SYSTEM_STARTED: RETAILMSG(1,(TEXT("STRINGS:DLL_SYSTEM_STARTED\n"))); break; #endif } return TRUE; } //----------------------------------------------- DWORD STR_Init(DWORD dwContext) { DWORD dwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Init\n"))); memset(achBuffer,0,BUFSIZE*sizeof(WCHAR)); dwRet=1; return dwRet; } //-------------------------------------------- BOOL STR_Deinit(DWORD hDeviceContext) { BOOL bRet=TRUE; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Deinit\n"))); return bRet; } //-------------------------------------------- DWORD STR_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD SharMode) { //DWORD bwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Open\n"))); return 1; } //-------------------------------------------- BOOL STR_Close(DWORD hDeviceContext) { RETAILMSG(1,(TEXT("MYSTRINGS:STR_Close\n"))); return TRUE; } //-------------------------------------------- BOOL STR_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) { RETAILMSG(1,(TEXT("MYSTRINGS:STR_IOControl\n"))); return TRUE; } //-------------------------------------------- void STR_PowerDown(DWORD hDeviceContext) { RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerDown\n"))); } //-------------------------------------------- void STR_PowerUp(DWORD hDeviceContext) { RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerUp\n"))); } //-------------------------------------------- DWORD STR_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count) { DWORD dwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Read\n"))); DWORD cbBuffer=wcslen(achBuffer); dwRet=min(cbBuffer,Count); wcsncpy((LPWSTR)pBuffer,achBuffer,dwRet); return dwRet; } //-------------------------------------------- DWORD STR_Seek(DWORD hOpenContext, long Amount,DWORD Type) { DWORD dwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Seek\n"))); return dwRet; } //-------------------------------------------- DWORD STR_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes) { DWORD dwRet=0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Write\n"))); //DWORD cbBuffer=wcslen(achBuffer); dwRet=min(BUFSIZE,NumberOfBytes); wcsncpy(achBuffer,(LPWSTR)pSourceBytes,dwRet); return dwRet; }

3.打開PB5.0爲你自動創建的MyDriver.reg文件,輸入以下內容並保存

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\STRING]
"Index"=dword:1
"Prefix"="STR"
"Dll"="MyDriver.dll"
"Order"=dword:0

4.修改MyDriver.def文件

LIBRARY MyDriver

EXPORTS
    STR_Init
    STR_Deinit
    STR_Open
    STR_Close
    STR_Read
    STR_Write
    STR_Seek
    STR_IOControl
    STR_PowerDown
    STR_PowerUp

PB5.0在你創建工程的時候已經爲你自動編寫好了source和Makefile文件,現在需要做的就是點擊Sysgen進行編譯。然後連接模擬器,系統啓動後,會在debug窗口找到以下內容:

 STRINGS:DLL_PROCESS_ATTACH,MYSTRINGS:STR_Init

這說明系統已經加載了MyDriver.dll驅動並調用STR_Init函數初始化設備。

5.編寫應用程序測試

在pb下新建一個WCE Application(test_MyDriver)工程,編寫簡單的測試程序如下:

 

// test_MyDriver.cpp : Defines the entry point for the application. // #include "stdafx.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // Open the STRINGS driver with READ and WRITE access HANDLE hStr = CreateFile(TEXT("STR1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE == hStr) { MessageBox(NULL, _T("Cannot open STR1:"), _T("StringApp"), MB_OK); return 0; } MessageBox(NULL, TEXT("What"), TEXT("StringApp"), MB_OK); // Disconnect from driver. CloseHandle(hStr); return 0; }

編譯後在wince的windows目錄下會找到test_MyDriver.exe文件,雙擊該文件,會在debug窗口發現以下內容:

MYSTRINGS:STR_Open,MYSTRINGS:STR_Close

說明應用程序已經成功調用了MyDriver驅動程序。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章