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

驱动程序:

  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. }  

驱动程序注册表部分:

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

调用这个驱动程序:

  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. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值