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

📄 charfilterdll.cpp

📁 windows 2000/XP WDM设备驱动程序开发 附书光盘 武安河著
💻 CPP
字号:
// CharFilterDll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"
#include "devinfo.h"
#include "CharFilterDll.h"
#include "filterinstall.h"
#include "CharFilterInst.h"
#include <Newdev.h>


/////////////////////////////////////////////////////////////////////
//	TODO   Installation Notes:
//
//  To install the WDM filter driver using this dll, follow these steps:
//
//	1. The dll copies the .sys file to the system32/drivers folder.  The .dll
//		and .sys should be located in the same folder.
//
//	2. Use rundll32 to execute the dll exported functions.  For installing,
//		execute 'Install' method like so:
//			rundll32 CharFilterInst.dll Install
//		be sure to first change folders to the location of the .dll or
//		use the full path to the .dll as a parameter to rundll32.
//
//	3. If the driver is not started, a system reboot is likely required.
//
//	4. To uninstall, follow step 2 except use Uninstall as a parameter to 
//		rundll32 instead of Install.
//
/////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////
//  DllMain
// 
//	Routine Description:
//		This function is the primary entry point of the dll.  
//
BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
    return TRUE;
}


/////////////////////////////////////////////////////////////////////
//  Install
// 
//	Routine Description:
//		This function is exported by the dll.  The function installs 
//		the WDM filter driver using the CharFilterInstaller class.
//
//	Return Value:
//		DWORD - Returns ERROR_SUCCESS if no errors are encountered.
//			Returns ERROR_SUCCESS_REBOOT_REQUIRED if a reboot is 
//			required to start the driver.
//
//	Comments:
//
FILTERDLL_API DWORD Install(void)
{
	// Instance the object will which will install the filter driver
	CharFilterInstaller FilterInst;

	DWORD Status = ERROR_SUCCESS;

	TCHAR Buff[MAX_PATH];
	memset(&Buff,0,MAX_PATH*sizeof(TCHAR));
	
	if (!GetWindowsDirectory(Buff, MAX_PATH)) {
		Status = ERROR_NOT_ENOUGH_MEMORY;
		return Status;
	}

	size_t len = _tcslen(Buff) + _tcslen(_T("\\")) + _tcslen(FilterInst.m_szFilterBinary) + 1;
	LPTSTR lpNewFileName = new TCHAR[len];
	if (!lpNewFileName) {
		Status = ERROR_NOT_ENOUGH_MEMORY;
		return Status;
	}

	memset(lpNewFileName,0,len*sizeof(TCHAR));
	_tcscpy(lpNewFileName,Buff);
	_tcscpy(lpNewFileName+_tcslen(Buff),_T("\\"));
	_tcscpy(lpNewFileName+_tcslen(Buff)+_tcslen(_T("\\")),FilterInst.m_szFilterBinary);

	// Copy the driver file to system32/drivers
	BOOL bRet = CopyFile(
					FilterInst.m_pszFilterSys,	// name of an existing file
					lpNewFileName,				// name of new file
					FALSE						// operation if file exists
					);

	if (FALSE == bRet) {
		Status = GetLastError();
	}
	else {

		// Install the filter's service key 
		if (!CDeviceInfo::m_WinVer.IsWin9x())
			Status = FilterInst.AddService();

		if (ERROR_SUCCESS == Status || ERROR_SERVICE_EXISTS == Status) {

			// Install the filter driver
			Status = FilterInst.InstallFilter();

			// Check if a reboot is required
			if ((ERROR_SUCCESS == Status) && (FilterInst.IsRebootRequired()))
				Status = ERROR_SUCCESS_REBOOT_REQUIRED;
		}
	}

	delete lpNewFileName;

	return Status;
}


/////////////////////////////////////////////////////////////////////
//  Uninstall
// 
//	Routine Description:
//		This function is exported by the dll.  The function uninstalls 
//		the WDM filter driver using the CharFilterInstaller class.
//
//	Return Value:
//		DWORD - Returns ERROR_SUCCESS if no errors are encountered.
//			Returns DI_NEEDRESTART if a reboot is 
//			required to stop the driver.
//
//	Comments:
//
FILTERDLL_API DWORD Uninstall(void)
{
	// Instance the object will which will uninstall the filter driver
	CharFilterInstaller FilterInst;

	DWORD Status = FilterInst.UninstallFilter();

	// See if a reboot is required
	if ((ERROR_SUCCESS == Status) && (FilterInst.IsRebootRequired())) 
		Status = DI_NEEDRESTART;

	// Remove the service key for the filter driver
	if (!CDeviceInfo::m_WinVer.IsWin9x())
		FilterInst.RemoveService();

	return Status;
}

⌨️ 快捷键说明

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