您的位置:首页 > 其它

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

2010-04-28 10:23 465 查看

驱动程序:

view
plain
copy
to clipboard
print
?

// 此
驱动功能是保存一个字符串。

#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;
}


驱动程序注册表部分:

view
plain
copy
to clipboard
print
?

[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


调用这个驱动程序:

view
plain
copy
to clipboard
print
?

#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 o­nly 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 o­nly 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;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: