基于WinCE的一个简单的流程序驱动模板

来源:互联网 发布:js 定时器 刷新 编辑:程序博客网 时间:2024/05/16 08:45

驱动程序:

view plaincopy to clipboardprint?
  1. // 此驱动功能是保存一个字符串。  
  2.   
  3. #include <windows.h>  
  4. #include <tchar.h>  
  5. #include <string.h>  
  6.   
  7. #define BUFSIZE 256  
  8. WCHAR achBuffer[BUFSIZE];  
  9.   
  10. BOOL WINAPI DllEntryPoint ( HANDLE hinstDLL,  
  11.                             DWORD  dwReason,  
  12.                             LPVOID lpvReserved)  
  13. {  
  14.     switch (dwReason)  
  15.     {  
  16.         case DLL_PROCESS_ATTACH:  
  17.             RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_ATTACH/t/n")));  
  18.             return TRUE;  
  19.         case DLL_THREAD_ATTACH:  
  20.             RETAILMSG(1,(TEXT("ADC:DLL_THREAD_ATTACH/t/n")));  
  21.             break;  
  22.         case DLL_THREAD_DETACH:  
  23.             RETAILMSG(1,(TEXT("ADC:DLL_THREAD_DETACH/t/n")));  
  24.             break;  
  25.         case DLL_PROCESS_DETACH:  
  26.             RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_DETACH/t/n")));  
  27.             break;  
  28.     #ifdef UNDER_CE  
  29.         case DLL_PROCESS_EXITING:  
  30.             RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_EXITING/t/n")));  
  31.             break;  
  32.         case DLL_SYSTEM_STARTED:  
  33.             RETAILMSG(1,(TEXT("ADC:DLL_SYSTEM_STARTED/t/n")));  
  34.             break;  
  35.         default:  
  36.             break;  
  37.     #endif  
  38.     }  
  39.     return TRUE;  
  40. }  
  41.   
  42. DWORD STR_Init(DWORD dwContext)  
  43. {  
  44.     DWORD dwReturn = 0;  
  45.     RETAILMSG (1,(TEXT("MYSTRINGS:STR_Init/t/n")));  
  46.     memset (achBuffer,0,BUFSIZE * sizeof (WCHAR));  
  47.     dwReturn = 1;  
  48.     return dwReturn;  
  49. }  
  50.   
  51. BOOL STR_Deinit(DWORD hDeviceContext)  
  52. {  
  53.     BOOL bReturn = TRUE;  
  54.     RETAILMSG(1,(TEXT("MYSTRINGS:STR_Deinit/t/n")));  
  55.     return bReturn;  
  56. }  
  57.   
  58. DWORD STR_Open (DWORD hDeviceContext,  
  59.                 DWORD AccessCode,  
  60.                 DWORD ShareMode)  
  61. {  
  62.     DWORD dwReturn = 0;  
  63.     RETAILMSG (1,(TEXT("MYSTRINGS:STR_Open/t/n")));  
  64.     dwReturn = 1;  
  65.     return dwReturn;  
  66. }  
  67.   
  68. BOOL STR_Close(DWORD hOpenContext)  
  69. {  
  70.     BOOL bReturn = TRUE;  
  71.     RETAILMSG(1,(TEXT("MYSTRINGS:STR_Close/t/n")));  
  72.     return bReturn;  
  73. }  
  74.   
  75. BOOL STR_IOControl(DWORD hOpenContext,  
  76.                     DWORD dwCode,  
  77.                     PBYTE pBufIn,  
  78.                     DWORD dwLenIn,  
  79.                     PBYTE pBufOut,  
  80.                     DWORD dwLenOut,  
  81.                     PDWORD pdwActualOut)  
  82. {  
  83.     BOOL bReturn = TRUE;  
  84.     RETAILMSG(1,(TEXT("MYSTRINGS:STR_IOControl/t/n")));  
  85.     return bReturn;  
  86. }  
  87.   
  88. void STR_PowerDown (DWORD hDeviceContext)  
  89. {  
  90.     RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerDown/t/n")));  
  91.   
  92. }  
  93.   
  94. void STR_PowerUp(DWORD hDeviceContext)  
  95. {  
  96.     RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerUp/t/n")));  
  97. }  
  98.   
  99. DWORD STR_Read(DWORD hOpenContext,  
  100.                 LPVOID pBuffer,  
  101.                 DWORD Count)  
  102. {  
  103.     DWORD dwReturn = 0;  
  104.     //RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerUp/t/n")));  
  105.   
  106.     DWORD dwBuffer = wcslen(achBuffer);  
  107.     dwReturn = min(dwBuffer, Count);  
  108.     wcsncpy((LPWSTR)pBuffer, achBuffer, dwReturn);  
  109.   
  110.     return dwReturn;  
  111. }  
  112.   
  113. DWORD STR_Seek(DWORD hOpenContext,  
  114.                 long Amount,  
  115.                 DWORD Type)  
  116. {  
  117.     DWORD dwReturn =0;  
  118.     RETAILMSG(1,(TEXT("MYSTRINGS:STR_Seek/t/n")));  
  119.     return dwReturn;  
  120. }  
  121.   
  122. DWORD STR_Write(DWORD hOpenContext,  
  123.                 LPCVOID pSourcdBytes,  
  124.                 DWORD NumberOfBytes)  
  125. {  
  126.     DWORD dwReturn =0;  
  127.     RETAILMSG(1,(TEXT("MYSTRINGS:STR_Write/t/n")));  
  128.     dwReturn = min(BUFSIZE, NumberOfBytes);  
  129.     wcsncpy (achBuffer, (LPWSTR) pSourcdBytes, dwReturn);  
  130.   
  131.     return dwReturn;  
  132. }  

驱动程序注册表部分:

view plaincopy to clipboardprint?
  1. [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/STRINGS]  
  2.    "Index"=dword:1  
  3.    "Prefix"="STR"  
  4.    "Dll"="String.dll"  
  5.    "Order"=dword:0  

调用这个驱动程序:

view plaincopy to clipboardprint?
  1. #include <windows.h>  
  2. #include "StdAfx.h"  
  3.   
  4. #define BUFFER_SIZE  256  // The buffer size is the same as the driver's buffer size  
  5.   
  6.   
  7. int WINAPI WinMain(HINSTANCE hInstance,  
  8.                      HINSTANCE hPrevInstance,  
  9.                      LPTSTR     lpCmdLine,  
  10.                      int       nCmdShow)  
  11. {  
  12.   
  13.  // Open the STRINGS driver with READ and WRITE access  
  14.  // ---------------------------------------------------------------------  
  15.     HANDLE hStr = CreateFile(TEXT("STR1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);  
  16.     if (INVALID_HANDLE_VALUE == hStr)  
  17.     {  
  18.         MessageBox(NULL, _T("Cannot open STR1:"), _T("StringApp"), MB_OK);  
  19.         return 0;  
  20.     }  
  21.   
  22.   
  23.     // Write a string to the driver.  
  24.  // ---------------------------------------------------------------------  
  25.     DWORD  dwWritten = 0;  
  26.     WCHAR* pString   = TEXT("This is a test of the String Driver. This is o­nly a test");  
  27.     WriteFile(hStr, pString, (_tcslen(pString)+1), &dwWritten, NULL);  
  28.   
  29.    
  30.   
  31.     // Read string from driver.  
  32.  // ---------------------------------------------------------------------  
  33.     WCHAR wch[BUFFER_SIZE];  
  34.     DWORD dwBytesRead = BUFFER_SIZE;  
  35.  memset(&wch, '/0', BUFFER_SIZE * sizeof(WCHAR));  
  36.      
  37.  ReadFile(hStr, wch, sizeof(wch), &dwBytesRead, NULL);  
  38.   
  39.     MessageBox(NULL, wch, TEXT("StringApp"), MB_OK);  
  40.   
  41.    
  42.   
  43.     // Disconnect from driver.  
  44.  // ---------------------------------------------------------------------  
  45.     CloseHandle(hStr);  
  46.   
  47.  return 0;  
  48. }  

原创粉丝点击