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

📄 drivercontrol.cpp

📁 CPU降温程序
💻 CPP
字号:
#include "DriverControl.h"
#include <shlwapi.h>
#include <winioctl.h>
#include "..\commondef.h"

#pragma comment( lib, "shlwapi.lib" )

#ifdef __cplusplus
extern "C"{
#endif

typedef LONG NTSTATUS;
#define STATUS_SUCCESS				((NTSTATUS)0x00000000L)
#define STATUS_IMAGE_ALREADY_LOADED	((NTSTATUS)0xC000010EL)

typedef struct _UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

NTSYSAPI NTSTATUS NTAPI ZwLoadDriver( IN PUNICODE_STRING DriverServiceName );
NTSYSAPI NTSTATUS NTAPI ZwUnloadDriver( IN PUNICODE_STRING DriverServiceName );

NTSYSAPI VOID NTAPI RtlInitUnicodeString( PUNICODE_STRING DestinationString, PCWSTR SourceString );

#ifdef __cplusplus
}//end extern "C"
#endif

const WCHAR wszSvcName[] = L"CoolCPUsvc";
const WCHAR wszRegKeyRoot[] = L"\\registry\\machine\\SYSTEM\\CurrentControlSet\\Services\\";
const TCHAR szRegSvcKeyRoot[] = TEXT("SYSTEM\\CurrentControlSet\\Services");

BOOL EnablePrivilege( LPCTSTR lpszPrivilege )
{
	TOKEN_PRIVILEGES tp;
	HANDLE			 hToken;

	if( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
		{
		return FALSE;
		}//end if

	if( !LookupPrivilegeValue( NULL, lpszPrivilege, &tp.Privileges[0].Luid ) )
		{
		return FALSE;
		}//end if

	tp.PrivilegeCount = 1;
	tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

	if( !AdjustTokenPrivileges( hToken, FALSE, &tp, 0, NULL, 0 ) )
		{
		return FALSE;
		}//end if

	CloseHandle( hToken );

	return TRUE;
}//end EnablePrivilege

void GetDriverFullName( LPWSTR lpszDriverPath, LPCWSTR lpszDriverFileName )
{
	int i;

	wcscpy( lpszDriverPath, L"\\??\\" );
	lpszDriverPath += 4;
	GetModuleFileName( NULL, lpszDriverPath, MAX_PATH - 4 );
	for( i = wcslen( lpszDriverPath ) - 1; lpszDriverPath[i] != '\\'; --i );//end for
	++i;
	wcscpy( lpszDriverPath + i, lpszDriverFileName );
}//end GetDriverFullName

BOOL LoadDriver( LPCWSTR lpszDriverFile )
{
	WCHAR wszTemp[MAX_PATH];
	UNICODE_STRING usDevSvcName;
	HKEY hParentKey;
	HKEY hKey;
	DWORD dwType;
	NTSTATUS status;
	BOOL bRes = FALSE;

	if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,
					  szRegSvcKeyRoot,
					  0,
					  KEY_WRITE,
					  &hParentKey ) == ERROR_SUCCESS )
		{
		if( RegCreateKeyExW( hParentKey, wszSvcName, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL ) == ERROR_SUCCESS )
			{
			dwType = SERVICE_KERNEL_DRIVER;
			if( RegSetValueExW( hKey,
								L"ImagePath",
								0,
								REG_SZ,
								(LPBYTE)lpszDriverFile,
								sizeof(WCHAR) * ( wcslen( lpszDriverFile ) + 1 ) ) == ERROR_SUCCESS
				&& RegSetValueEx( hKey,
								  TEXT("Type"),
								  0,
								  REG_DWORD,
								  (LPBYTE)&dwType,
								  sizeof( DWORD ) ) == ERROR_SUCCESS )
				{
				wcscpy( wszTemp, wszRegKeyRoot );
				wcscat( wszTemp, wszSvcName );
				RtlInitUnicodeString( &usDevSvcName, wszTemp );

				status = ZwLoadDriver( &usDevSvcName );
				if( status == STATUS_SUCCESS || status == STATUS_IMAGE_ALREADY_LOADED )
					{
					bRes = TRUE;
					}//end if
				}//end if
			RegCloseKey( hKey );
			}//end if
		RegCloseKey( hParentKey );
		}//end if

	return bRes;
}//end LoadDriver

BOOL UnloadDriver(void)
{
	WCHAR wszTemp[MAX_PATH];
	UNICODE_STRING usDevSvcName;
	HKEY hKey;
	BOOL bRes = FALSE;

	wcscpy( wszTemp, wszRegKeyRoot );
	wcscat( wszTemp, wszSvcName );
	RtlInitUnicodeString( &usDevSvcName, wszTemp );

	if( ZwUnloadDriver( &usDevSvcName ) == STATUS_SUCCESS )
		{
		if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,
						  szRegSvcKeyRoot,
						  0,
						  DELETE,
						  &hKey ) == ERROR_SUCCESS )
			{
			if( SHDeleteKeyW( hKey, wszSvcName ) == ERROR_SUCCESS )
				{
				bRes = TRUE;
				}//end if
			RegCloseKey( hKey );
			}//end if
		}//end if

	return bRes;
}//end UnloadDriver

HANDLE OpenCoolDevice(void)
{
	WCHAR szSymbolicLink[128] = { L"\\\\.\\" };

	wcscpy( szSymbolicLink + 4, wszSymbolicLinkName );
	return CreateFileW( szSymbolicLink, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL );
}//end OpenCoolDevice

void ChangeCoolPriority( HANDLE hDevice, BOOL bLowPrior )
{
	DWORD dwRet;
	DeviceIoControl( hDevice, (bLowPrior) ? IOCTL_LOWPRIOR : IOCTL_HIGHPRIOR, NULL, 0, NULL, 0, &dwRet, NULL );
}//end ChangeCoolPriority

void GrabCPU( HANDLE hDevice, BOOL bGrab )
{
	DWORD dwRet;
	DeviceIoControl( hDevice, (bGrab) ? IOCTL_GRABCPU : IOCTL_UNGRABCPU, NULL, 0, NULL, 0, &dwRet, NULL );
}//end ChangeCoolPriority

⌨️ 快捷键说明

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