一个简单的wince.net流驱动模板
2004-09-11 10:35
411 查看
作者:
no.killer@cnemb.com
转载自cnemb.com 原贴链接http://www.cnemb.com/modules.php?op=modload&name=News&file=article&sid=177
鉴于网上有人向我要一个简单的流驱动的例子,其实PB自己带例子已经很多了!但是对于初学者可能不知道到哪儿找所以发表一个简单的流驱动模板,对于老鸟可能没有用不过对于初学者或许有用!这个驱动的功能是保存一个字符串!希望对初学者有帮助!
驱动程序部分
#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;
}
no.killer@cnemb.com
转载自cnemb.com 原贴链接http://www.cnemb.com/modules.php?op=modload&name=News&file=article&sid=177
鉴于网上有人向我要一个简单的流驱动的例子,其实PB自己带例子已经很多了!但是对于初学者可能不知道到哪儿找所以发表一个简单的流驱动模板,对于老鸟可能没有用不过对于初学者或许有用!这个驱动的功能是保存一个字符串!希望对初学者有帮助!
驱动程序部分
#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的一个简单的流程序驱动模板
- 一个简单的WinCE流驱动模板
- 基于WinCE的一个简单的流程序驱动模板
- 一个简单的串口过滤驱动
- 驱动开发之一 --- 创建一个简单的设备驱动(续) 【译文】
- Epii.js 一个极其简单的Js模板引擎
- PC上简单驱动的Makefile模板
- 一个简单的类模板的友元函数和友元类示例
- Linux下面一个简单的虚拟platform驱动
- linux设备驱动第三篇:如何写一个简单的字符设备驱动?
- 一个简单的LED驱动
- 一个基于简单USB过滤驱动。。
- linux驱动—input输入子系统—The simplest example(一个最简单的实例)分析(1)
- linux驱动—input输入子系统—The simplest example(一个最简单的实例)分析(2)
- linux 一个简单的字符设备驱动例子
- 一个简单的PCIE驱动到设备的通信协议
- 代码:编写一个简单的字符设备驱动
- OpenCms JSP 模板开发——创建一个简单的JSP模板
- linux设备驱动第三篇:写一个简单的字符设备驱动
- 教你使用javascript简单写一个页面模板引擎