驱动程序:
- // 此 驱动功能是保存一个字符串。
- #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;
- }
驱动程序注册表部分:
- [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;
- }