📄 instdrv.c
字号:
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
BOOL InstallDriver(__in SC_HANDLE SchSCManager, __in LPCTSTR DriverName, __in LPCTSTR ServiceExe)
{
SC_HANDLE schService;
DWORD err;
schService = CreateService(SchSCManager,DriverName, DriverName, SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL, ServiceExe, NULL, NULL, NULL, NULL, NULL);
if(NULL == schService)
{
err = GetLastError();
if(ERROR_SERVICE_EXISTS == err)
return TRUE;
return FALSE;
}
else
{
CloseServiceHandle(schService);
return TRUE;
}
}
BOOL RemoveDriver(__in SC_HANDLE SchSCManager, __in LPCTSTR DriverName)
{
SC_HANDLE schService;
BOOL ret;
schService = OpenService(SchSCManager, DriverName, SERVICE_ALL_ACCESS);
if(NULL == schService)
return FALSE;
ret = DeleteService(schService);
CloseServiceHandle(schService);
return ret;
}
BOOL StartDriver(__in SC_HANDLE SchSCManager, __in LPCTSTR DriverName)
{
SC_HANDLE schService;
BOOL ret;
schService = OpenService(SchSCManager, DriverName, SERVICE_ALL_ACCESS);
if(NULL == schService)
return FALSE;
ret = StartService(schService, 0, NULL) || GetLastError() == ERROR_SERVICE_ALREADY_RUNNING;
CloseServiceHandle(schService);
return ret;
}
BOOL StopDriver(__in SC_HANDLE SchSCManager, __in LPCTSTR DriverName)
{
SC_HANDLE schService;
BOOL ret;
SERVICE_STATUS serviceStatus;
schService = OpenService(SchSCManager, DriverName, SERVICE_ALL_ACCESS);
if(NULL == schService)
return FALSE;
ret = ControlService(schService, SERVICE_CONTROL_STOP, &serviceStatus);
CloseServiceHandle(schService);
return ret;
}
BOOL OpenDevice(__in LPCTSTR DriverName, __in HANDLE * lphDevice)
{
TCHAR completeDeviceName[64];
HANDLE hDevice;
/* NT5, XP及以上 */
if((GetVersion() & 0xff) >= 5)
wsprintf(completeDeviceName, _T("\\\\.\\Global\\%s"), DriverName);
else
wsprintf(completeDeviceName, _T("\\\\.\\%s"), DriverName);
hDevice = CreateFile(completeDeviceName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE == hDevice)
return FALSE;
if(lphDevice)
*lphDevice = hDevice;
else
CloseHandle(hDevice);
return TRUE;
}
BOOL LoadDeviceDriver(const TCHAR * Name, const TCHAR * Path, HANDLE * lphDevice, PDWORD Error)
{
SC_HANDLE schSCManager;
BOOL ret;
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
RemoveDriver(schSCManager, Name);
InstallDriver(schSCManager, Name, Path);
StartDriver(schSCManager, Name);
ret = OpenDevice(Name, lphDevice);
*Error = GetLastError();
CloseServiceHandle(schSCManager);
return ret;
}
BOOL UnLoadDriver(const TCHAR * Name)
{
SC_HANDLE schSCManager;
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
StopDriver(schSCManager, Name);
RemoveDriver(schSCManager, Name);
CloseServiceHandle(schSCManager);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -