基于WinCE的一个简单的流程序驱动模板
2010-04-28 10:23
465 查看
驱动程序:
viewplain
copy
to clipboard
?
// 此
驱动功能是保存一个字符串。
#include <windows.h>
#include <tchar.h>
#include <string.h>
#define BUFSIZE 256
WCHAR
achBuffer[BUFSIZE];
BOOL
WINAPI DllEntryPoint (
HANDLE
hinstDLL,
DWORD
dwReason,
LPVOID
lpvReserved)
{
switch
(dwReason)
{
case
DLL_PROCESS_ATTACH:
RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_ATTACH/t/n"
)));
return
TRUE;
case
DLL_THREAD_ATTACH:
RETAILMSG(1,(TEXT("ADC:DLL_THREAD_ATTACH/t/n"
)));
break
;
case
DLL_THREAD_DETACH:
RETAILMSG(1,(TEXT("ADC:DLL_THREAD_DETACH/t/n"
)));
break
;
case
DLL_PROCESS_DETACH:
RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_DETACH/t/n"
)));
break
;
#ifdef UNDER_CE
case
DLL_PROCESS_EXITING:
RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_EXITING/t/n"
)));
break
;
case
DLL_SYSTEM_STARTED:
RETAILMSG(1,(TEXT("ADC:DLL_SYSTEM_STARTED/t/n"
)));
break
;
default
:
break
;
#endif
}
return
TRUE;
}
DWORD
STR_Init(
DWORD
dwContext)
{
DWORD
dwReturn = 0;
RETAILMSG (1,(TEXT("MYSTRINGS:STR_Init/t/n"
)));
memset (achBuffer,0,BUFSIZE * sizeof
(
WCHAR
));
dwReturn = 1;
return
dwReturn;
}
BOOL
STR_Deinit(
DWORD
hDeviceContext)
{
BOOL
bReturn = TRUE;
RETAILMSG(1,(TEXT("MYSTRINGS:STR_Deinit/t/n"
)));
return
bReturn;
}
DWORD
STR_Open (
DWORD
hDeviceContext,
DWORD
AccessCode,
DWORD
ShareMode)
{
DWORD
dwReturn = 0;
RETAILMSG (1,(TEXT("MYSTRINGS:STR_Open/t/n"
)));
dwReturn = 1;
return
dwReturn;
}
BOOL
STR_Close(
DWORD
hOpenContext)
{
BOOL
bReturn = TRUE;
RETAILMSG(1,(TEXT("MYSTRINGS:STR_Close/t/n"
)));
return
bReturn;
}
BOOL
STR_IOControl(
DWORD
hOpenContext,
DWORD
dwCode,
PBYTE
pBufIn,
DWORD
dwLenIn,
PBYTE
pBufOut,
DWORD
dwLenOut,
PDWORD pdwActualOut)
{
BOOL
bReturn = TRUE;
RETAILMSG(1,(TEXT("MYSTRINGS:STR_IOControl/t/n"
)));
return
bReturn;
}
void
STR_PowerDown (
DWORD
hDeviceContext)
{
RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerDown/t/n"
)));
}
void
STR_PowerUp(
DWORD
hDeviceContext)
{
RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerUp/t/n"
)));
}
DWORD
STR_Read(
DWORD
hOpenContext,
LPVOID
pBuffer,
DWORD
Count)
{
DWORD
dwReturn = 0;
//RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerUp/t/n")));
DWORD
dwBuffer = wcslen(achBuffer);
dwReturn = min(dwBuffer, Count);
wcsncpy((LPWSTR
)pBuffer, achBuffer, dwReturn);
return
dwReturn;
}
DWORD
STR_Seek(
DWORD
hOpenContext,
long
Amount,
DWORD
Type)
{
DWORD
dwReturn =0;
RETAILMSG(1,(TEXT("MYSTRINGS:STR_Seek/t/n"
)));
return
dwReturn;
}
DWORD
STR_Write(
DWORD
hOpenContext,
LPCVOID
pSourcdBytes,
DWORD
NumberOfBytes)
{
DWORD
dwReturn =0;
RETAILMSG(1,(TEXT("MYSTRINGS:STR_Write/t/n"
)));
dwReturn = min(BUFSIZE, NumberOfBytes);
wcsncpy (achBuffer, (LPWSTR
) pSourcdBytes, dwReturn);
return
dwReturn;
}
// 此驱动功能是保存一个字符串。 #include <windows.h> #include <tchar.h> #include <string.h> #define BUFSIZE 256 WCHAR achBuffer[BUFSIZE]; BOOL WINAPI DllEntryPoint ( HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_ATTACH/t/n"))); return TRUE; case DLL_THREAD_ATTACH: RETAILMSG(1,(TEXT("ADC:DLL_THREAD_ATTACH/t/n"))); break; case DLL_THREAD_DETACH: RETAILMSG(1,(TEXT("ADC:DLL_THREAD_DETACH/t/n"))); break; case DLL_PROCESS_DETACH: RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_DETACH/t/n"))); break; #ifdef UNDER_CE case DLL_PROCESS_EXITING: RETAILMSG(1,(TEXT("ADC:DLL_PROCESS_EXITING/t/n"))); break; case DLL_SYSTEM_STARTED: RETAILMSG(1,(TEXT("ADC:DLL_SYSTEM_STARTED/t/n"))); break; default: break; #endif } return TRUE; } DWORD STR_Init(DWORD dwContext) { DWORD dwReturn = 0; RETAILMSG (1,(TEXT("MYSTRINGS:STR_Init/t/n"))); memset (achBuffer,0,BUFSIZE * sizeof (WCHAR)); dwReturn = 1; return dwReturn; } BOOL STR_Deinit(DWORD hDeviceContext) { BOOL bReturn = TRUE; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Deinit/t/n"))); return bReturn; } DWORD STR_Open (DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) { DWORD dwReturn = 0; RETAILMSG (1,(TEXT("MYSTRINGS:STR_Open/t/n"))); dwReturn = 1; return dwReturn; } BOOL STR_Close(DWORD hOpenContext) { BOOL bReturn = TRUE; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Close/t/n"))); return bReturn; } BOOL STR_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) { BOOL bReturn = TRUE; RETAILMSG(1,(TEXT("MYSTRINGS:STR_IOControl/t/n"))); return bReturn; } void STR_PowerDown (DWORD hDeviceContext) { RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerDown/t/n"))); } void STR_PowerUp(DWORD hDeviceContext) { RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerUp/t/n"))); } DWORD STR_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count) { DWORD dwReturn = 0; //RETAILMSG(1,(TEXT("MYSTRINGS:STR_PowerUp/t/n"))); DWORD dwBuffer = wcslen(achBuffer); dwReturn = min(dwBuffer, Count); wcsncpy((LPWSTR)pBuffer, achBuffer, dwReturn); return dwReturn; } DWORD STR_Seek(DWORD hOpenContext, long Amount, DWORD Type) { DWORD dwReturn =0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Seek/t/n"))); return dwReturn; } DWORD STR_Write(DWORD hOpenContext, LPCVOID pSourcdBytes, DWORD NumberOfBytes) { DWORD dwReturn =0; RETAILMSG(1,(TEXT("MYSTRINGS:STR_Write/t/n"))); dwReturn = min(BUFSIZE, NumberOfBytes); wcsncpy (achBuffer, (LPWSTR) pSourcdBytes, dwReturn); return dwReturn; }
驱动程序注册表部分:
viewplain
copy
to clipboard
?
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/STRINGS]
"Index"=dword:1
"Prefix"="STR"
"Dll"="String.dll"
"Order"=dword:0
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/STRINGS] "Index"=dword:1 "Prefix"="STR" "Dll"="String.dll" "Order"=dword:0
调用这个驱动程序:
viewplain
copy
to clipboard
?
#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;
}
#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的一个简单的流程序驱动模板
- 模拟一个简单的基于tcp的远程关机程序
- 一个简单的基于System.Web.Mail的ASP.Net邮件发送程序
- ARM嵌入式编程(无操作系统、基于MDK)之最简单的程序:点亮一个LED灯
- 本文实现了一个基于servlet技术的简单的csv文件导出的程序实例。
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- 一个简单的统计代码行数的程序(基于MFC)
- 一个简单的web点名程序(基于javascript)
- 逆向一个基于驱动的恶意程序
- 网络编程学习笔记二(实现一个基于简单TCP的用户注册程序)
- 基于mina实现一个简单数据采集中间件的多客户端在线测试程序
- 网络编程与多线程的应用--基于socket udp编写一个简单聊天程序
- 一个简单的AJAX实现,基于C#的ASP.Net,包括服务器端的程序代码
- [J2EE]实现一个最简单的基于Servlet的web程序
- 一个简单的wince.net流驱动模板
- 基于mykernel的一个简单的时间片轮转多道程序内核代码分析
- 自己动手弄基于QT5和directx11的简单粒子编辑器v0.1(一个编辑器,一个更新器,一个linux服务端程序)
- 一个基于PXA255嵌入式系统的简单24位图片读取输出程序
- 简单的手电筒程序(基于系统驱动节点)
- 学习数据结构搜索的的意外收获哈。一个简单的基于java的网页抓取程序。