📄 ntdriver.cpp
字号:
/********************************************************************
Copyright 2006-2008 ZHANG Luduo. All Rights Reserved.
Permission to use, copy, modify, distribute and sell this software
and its documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and
that both that copyright notice and this permission notice appear
in supporting documentation.
********************************************************************/
/*
代码描述 :
功能:NT式驱动的动态加载与卸载.
大部分源码参考了WinIo库, 同时也参考
了<Windows驱动开发技术详解>一书中71页, 同时
代码作者:
姓名 - 张鲁夺, ZHANG Luduo
MSN - zhangluduo@msn.com
Email - zhangluduo@163.com
QQ群 - 34064264, 56918155, 56918241
网站 - http://www.oopfans.com
为所有爱我的人和我爱的人努力!
*/
#include "stdafx.h"
#include "NTDriver.h"
#include <Winsvc.h>
bool InstallDriver(TCHAR* szDriverFileName, TCHAR* szServicesName)
{
SC_HANDLE hSCManager = NULL;
SC_HANDLE hService = NULL;
// Remove any previous instance of the driver
RemoveDriver(szServicesName);
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCManager)
{
hService = CreateService(hSCManager,
szServicesName,
szServicesName,
SERVICE_ALL_ACCESS,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
szDriverFileName,
NULL,
NULL,
NULL,
NULL,
NULL);
CloseServiceHandle(hSCManager);
if (NULL == hService)
return false;
}
else
return false;
CloseServiceHandle(hService);
return true;
}
bool RemoveDriver(TCHAR* szServicesName)
{
SC_HANDLE hSCManager = NULL;
SC_HANDLE hService = NULL;
bool bResult = false;
StopDriver(szServicesName);
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCManager)
{
hService = OpenService(hSCManager, szServicesName, SERVICE_ALL_ACCESS);
CloseServiceHandle(hSCManager);
if (hService)
{
bResult = DeleteService(hService) == 0 ? false : true;
CloseServiceHandle(hService);
}
else
return false;
}
else
return false;
return bResult;
}
bool StartDriver(TCHAR* szServicesName)
{
SC_HANDLE hSCManager = NULL;
SC_HANDLE hService = NULL;
bool bResult = false;
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCManager)
{
hService = OpenService(hSCManager, szServicesName, SERVICE_ALL_ACCESS);
CloseServiceHandle(hSCManager);
if (hService)
{
bResult = StartService(hService, 0, NULL) ||
GetLastError() == ERROR_SERVICE_ALREADY_RUNNING;
CloseServiceHandle(hService);
}
else
return false;
}
else
return false;
return bResult;
}
bool StopDriver(TCHAR* szServicesName)
{
SC_HANDLE hSCManager = NULL;
SC_HANDLE hService = NULL;
bool bResult = false;
SERVICE_STATUS ServiceStatus = { 0 };
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hSCManager)
{
hService = OpenService(hSCManager, szServicesName, SERVICE_ALL_ACCESS);
CloseServiceHandle(hSCManager);
if (hService)
{
bResult = ControlService(hService, SERVICE_CONTROL_STOP,
&ServiceStatus) == 0 ? false : true;
CloseServiceHandle(hService);
}
else
return false;
}
else
return false;
return bResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -