驱动程序:
view plaincopy to clipboardprint?
-
-
- #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;
-
-
- 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 plaincopy to clipboardprint?
- [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/STRINGS]
- "Index"=dword:1
- "Prefix"="STR"
- "Dll"="String.dll"
- "Order"=dword:0
调用这个驱动程序:
view plaincopy to clipboardprint?
- #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)
- {
-
-
-
- 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;
- }
-
-
-
-
- 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);
-
-
-
-
-
- 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);
-
-
-
-
-
- CloseHandle(hStr);
-
- return 0;
- }