mysql驱动程序卸载_vc++ 加载,卸载自己的驱动程序

本文介绍了如何使用VC++加载和卸载自定义的MySQL驱动程序。详细步骤包括:通过OpenSCManagerA、CreateServiceA等函数创建并启动驱动服务,然后使用CreateFile访问驱动程序。此外,还提供了停止和卸载驱动的函数实现。
摘要由CSDN通过智能技术生成

用vc加载 自己 的 驱动 程序 主要分为以下几个步骤: 1、加载 驱动 服务 主要要用到以下几个函数 SC_HANDLE WINAPI OpenSCManagerA( __in_optLPCSTRlpMachineName, __in_optLPCSTRlpDatabaseName, __inDWORDdwDesiredAccess ); //创建 驱动 服务 SC_HANDLE WI

用vc++加载自己的驱动程序主要分为以下几个步骤:

1、加载驱动服务

主要要用到以下几个函数

SC_HANDLE

WINAPI

OpenSCManagerA(

__in_opt LPCSTR lpMachineName,

__in_opt LPCSTR lpDatabaseName,

__in DWORD dwDesiredAccess

);

//创建驱动服务

SC_HANDLE

WINAPI

CreateServiceA(

__in SC_HANDLE hSCManager,

__in LPCSTR lpServiceName,

__in_opt LPCSTR lpDisplayName,

__in DWORD dwDesiredAccess,

__in DWORD dwServiceType,

__in DWORD dwStartType,

__in DWORD dwErrorControl,

__in_opt LPCSTR lpBinaryPathName,

__in_opt LPCSTR lpLoadOrderGroup,

__out_opt LPDWORD lpdwTagId,

__in_opt LPCSTR lpDependencies,

__in_opt LPCSTR lpServiceStartName,

__in_opt LPCSTR lpPassword

);

//打开驱动服务

SC_HANDLE

WINAPI

OpenServiceA(

__in SC_HANDLE hSCManager,

__in LPCSTR lpServiceName,

__in DWORD dwDesiredAccess

);

//启动驱动服务

BOOL

WINAPI

StartServiceA(

__in SC_HANDLE hService,

__in DWORD dwNumServiceArgs,

__in_ecount_opt(dwNumServiceArgs)

LPCSTR *lpServiceArgVectors

);

首先调用OpenSCManager函数 建立一个连接到服务控制管理器,然后再调用CreateService创建服务最后调用OpenService和StartService分别打开服务和启动服务。

当服务启动后就可以用CreateFile函数访问驱动程序了代码如下:

1.启动驱动服务程序

//启动驱动服务

voidLoadDriver()

{

SC_HANDLE hSCManager = NULL;

SC_HANDLE hService = NULL;

SC_HANDLE hService1 = NULL;

hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

hService = CreateService(hSCManager,

MYWINRIN0,//这是驱动服务名称 这里为"MyWinRing0" 可以自定义任意名称

MYWINRIN0,//这是驱动服务显示名称,可以自定义任意名称,这里我选择和上面一样

SERVICE_ALL_ACCESS,

SERVICE_KERNEL_DRIVER,

SERVICE_DEMAND_START,

SERVICE_ERROR_NORMAL,

gDriverPath,//驱动存放的路径,这里和应用程序同目录

NULL,

NULL,

NULL,

NULL,

NULL

);

CloseServiceHandle(hService);//上面创建成功后就关闭掉这个句柄

hService1 = OpenService(hSCManager, MYWINRIN0, SERVICE_ALL_ACCESS);//打开上面创建的服务,名字为"MyWinRing0"

intresult=StartService(hService1,0, NULL);//启动服务

CloseServiceHandle(hSCManager);

CloseServiceHandle(hService1);

}

2.打开驱动服务

//驱动服务启动后,打开驱动

BOOL OpenDriver()

{

charmessage[256];

gHandle = CreateFile(

_T("\\\\.\\") OLS_DRIVER_ID,//这个地方的名字必须是驱动程序里面IoCreateDevice函数创建设备是 使用的名字

GENERIC_READ | GENERIC_WRITE,

0,

NULL,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL,

NULL

);

intcode=GetLastError();

if(gHandle == INVALID_HANDLE_VALUE)

{

returnFALSE;

}

returnTRUE;

}

3.停止驱动

//停止驱动

BOOL StopDriver(SC_HANDLE hSCManager,LPCTSTR DriverId)

{

SC_HANDLE hService = NULL;

BOOL rCode = FALSE;

SERVICE_STATUS serviceStatus;

DWORD error = NO_ERROR;

hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS);

if(hService != NULL)

{

rCode = ControlService(hService, SERVICE_CONTROL_STOP, &serviceStatus);

error = GetLastError();

CloseServiceHandle(hService);

}

returnrCode;

}

4.卸载驱动

//卸载驱动

BOOL RemoveDriver(SC_HANDLE hSCManager, LPCTSTR DriverId)

{

SC_HANDLE hService = NULL;

BOOL rCode = FALSE;

hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS);

if(hService == NULL)

{

rCode = TRUE;

}

else

{

rCode = DeleteService(hService);

CloseServiceHandle(hService);

}

returnrCode;

}

完整示例程序下载:http://download.csdn.net/detail/xiaibiancheng/5449887

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值