VS2005 WINCE 简单的 流驱动 模板 转载
来源:互联网 发布:小型音乐网站源码 编辑:程序博客网 时间:2024/05/16 11:51
一个简单的WinCE流驱动模板
驱动程序部分
#define _WIN32_WINNT 0x0400#include <windows.h>#include <tchar.h> HANDLE g_hInstance; #define BUFSIZE 256WCHAR 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;}
- VS2005 WINCE 简单的 流驱动 模板 转载
- 一个简单的WinCE流驱动模板
- VS2005 WINCE 流驱动开发流程 转载
- 一个简单的wince.net流驱动模板
- 【转载】WinCE 流驱动
- 【转载】WinCE 流驱动
- 基于WinCE的一个简单的流程序驱动模板
- 基于WinCE的一个简单的流程序驱动模板
- vs2005开发wince驱动步骤
- WinCE 流驱动一步一步来(转载)
- wince流驱动开发流程(转载)
- WinCE 流驱动一步一步来(转载)
- wince流驱动开发流程(转载)
- wince流驱动开发流程(转载)
- 【转载】wince 显示驱动!
- 转载——WinCE流设备驱动简介及GPIO驱动的实现(驱动最佳入门文章)
- WinCE下的流驱动
- WINCE 流驱动的xx_IOControl
- Linux下的多线程编程
- VS2005 WINCE 流驱动开发流程 转载
- 408 - Uniform Generator 、完全剩余系 和 同余的一个性质
- 【SQL精彩语句】普通行列转换(完整版)
- MD5验证工具:md5sum
- VS2005 WINCE 简单的 流驱动 模板 转载
- makefile1
- 【SQL精彩语句】按某一字段分组取最大(小)值所在行的数据
- wince下查看驱动启动加载时间:celog
- makefile2
- u-boot-2010.06在unsp2440上的移植2
- C++编码转化
- 安装Phoenix-SDK-June-2008-RC1
- linux shell编程基础1