⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 druver.txt

📁 一个简单的流驱动模板
💻 TXT
字号:
一个简单的流驱动模板

这个驱动的功能是保存一个字符串!希望对初学者有帮助!

驱动程序部分

#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 o&shy;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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -