一个简单的WinCE流驱动模板
2012-08-18 21:41
253 查看
驱动程序部分
驱动程序注册表部分
调用这个驱动程序
#define _WIN32_WINNT 0x0400 #include <windows.h> #include <tchar.h> HANDLE g_hInstance; #define BUFSIZE 256 WCHAR achBuffer[BUFSIZE]; //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- BOOL WINAPI DllEntryPoint(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved ) { switch(dwReason) { case DLL_PROCESS_ATTACH: g_hInstance = hinstDLL; RETAILMSG(1,(TEXT("STRINGS: DLL_PROCESS_ATTACH\n"))); return TRUE; case DLL_THREAD_ATTACH: RETAILMSG(1,(TEXT("STRINGS: DLL_THREAD_ATTACH\n"))); break; case DLL_THREAD_DETACH: RETAILMSG(1,(TEXT("STRINGS: DLL_THREAD_DETACH\n"))); break; case DLL_PROCESS_DETACH: RETAILMSG(1,(TEXT("STRINGS: DLL_PROCESS_DETACH\n"))); break; #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; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- BOOL STR_Close(DWORD hOpenContext) { BOOL bRet = TRUE; RETAILMSG(1,(TEXT("STRINGS: STR_Close\n"))); return bRet; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- BOOL STR_Deinit(DWORD hDeviceContext) { BOOL bRet = TRUE; RETAILMSG(1,(TEXT("STRINGS: STR_Deinit\n"))); return bRet; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- DWORD STR_Init(DWORD dwContext) { DWORD dwRet = 0; RETAILMSG(1,(TEXT("STRINGS: STR_Init\n"))); // Initialize buffer to zero. memset (achBuffer, 0, BUFSIZE * sizeof(WCHAR)); // Set return value to non-zero. dwRet = 1; return dwRet; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- BOOL STR_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) { BOOL bRet = TRUE; RETAILMSG(1,(TEXT("STRINGS: STR_IOControl\n"))); return bRet; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- DWORD STR_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) { DWORD dwRet = 0; RETAILMSG(1,(TEXT("STRINGS: STR_Open\n"))); dwRet = 1; // Have to make non-zero for this call to succeed. return dwRet; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void STR_PowerDown(DWORD hDeviceContext) { RETAILMSG(1,(TEXT("STRINGS: STR_PowerDown\n"))); } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void STR_PowerUp(DWORD hDeviceContext) { RETAILMSG(1,(TEXT("STRINGS: STR_PowerUp\n"))); } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- DWORD STR_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count) { DWORD dwRet = 0; RETAILMSG(1,(TEXT("STRINGS: STR_Read\n"))); // Copy the smaller of buffer size or string size. DWORD cbBuffer = wcslen(achBuffer); dwRet = min(cbBuffer, Count); wcsncpy((LPWSTR)pBuffer, achBuffer, dwRet); // Return number of bytes read. return dwRet; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- DWORD STR_Seek(DWORD hOpenContext, long Amount, DWORD Type) { DWORD dwRet = 0; RETAILMSG(1,(TEXT("STRINGS: STR_Seek\n"))); return dwRet; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- DWORD STR_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes) { DWORD dwRet = 0; RETAILMSG(1,(TEXT("STRINGS: STR_Write\n"))); // Copy the smaller of buffer size or number of bytes they send us. dwRet = min(BUFSIZE, NumberOfBytes); wcsncpy(achBuffer, (LPWSTR)pSourceBytes, dwRet); // Return number of bytes written. return dwRet; }
驱动程序注册表部分
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\STRINGS] "Index"=dword:1 "Prefix"="STR" "Dll"="String.dll" "Order"=dword:0
调用这个驱动程序
#include <windows.h> #include "StdAfx.h" #define BUFFER_SIZE 256 // The buffer size is the same as the driver's buffer size 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; } // Write a string to the driver. // --------------------------------------------------------------------- DWORD dwWritten = 0; WCHAR* pString = TEXT("This is a test of the String Driver. This is only a test"); WriteFile(hStr, pString, (_tcslen(pString)+1), &dwWritten, NULL); // Read string from driver. // --------------------------------------------------------------------- WCHAR wch[BUFFER_SIZE]; DWORD dwBytesRead = BUFFER_SIZE; memset(&wch, '\0', BUFFER_SIZE * sizeof(WCHAR)); ReadFile(hStr, wch, sizeof(wch), &dwBytesRead, NULL); MessageBox(NULL, wch, TEXT("StringApp"), MB_OK); // Disconnect from driver. // --------------------------------------------------------------------- CloseHandle(hStr); return 0; }
相关文章推荐
- 一个简单的wince.net流驱动模板
- 基于WinCE的一个简单的流程序驱动模板
- 基于WinCE的一个简单的流程序驱动模板
- 一个简单的类模板的友元函数和友元类示例
- 一个简单的图片拖拽排序效果 &nbsp; ----- &nbsp; JQUERY特效模板
- IDDD 实现领域驱动设计-一个简单业务用例的回顾和理解
- 一个简单的字符设备驱动
- IDDD 实现领域驱动设计-一个简单的 CQRS 示例
- OpenCms JSP 模板开发——创建一个简单的JSP模板
- 基于 Zen 创建一个 Drupal 7 的主题(模板) ,一份简单的Drupal模板教程
- 一个简单的块设备驱动的实现
- 一个最简单的Linux 2.6内核驱动模块
- [nRF51822] 1、一个简单的nRF51822驱动的天马4线SPI-1.77寸LCD彩屏DEMO
- 驱动开发之 一个简单的截取键盘按键的驱动
- 一个简单的操作端口的驱动------完整过程
- php 编写一个简单的模板引擎
- x-template:一个简单高效的字符串模板引擎
- 一个简单的串口过滤驱动
- 一个简单的beamer模板
- 一个简单的linux的测试修改模板