阅读:1456回复:8
如何在程序里启用/停止某个设备呢
如何在程序里启用/停止某个设备呢,就象设备管理器里实现的一样。不知道有没有实现该功能的API函数??
|
|
沙发#
发布于:2002-10-16 14:00
有,采用SCM中提供的相关服务(API)
BOOL ControlService( SC_HANDLE hService, // handle to service DWORD dwControl, // control code LPSERVICE_STATUS lpServiceStatus // status information ); 相关帮助请查阅MSDN中CreateSerivce相关帮助。 |
|
|
板凳#
发布于:2002-10-16 14:04
请参考FileMon源代码和SCM API
|
|
|
地板#
发布于:2002-10-16 14:08
例如停止服务:
SC_HANDLE schSCManager; schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS ); SC_HANDLE schService; BOOL ret; SERVICE_STATUS serviceStatus; schService = OpenService(SchSCManager, \"L\\\\DosDevices\\\\XXX\" SERVICE_ALL_ACCESS ); if ( schService == NULL ) { return FALSE; } ret = ControlService( schService, SERVICE_CONTROL_STOP, &serviceStatus ); CloseServiceHandle( schService ); return ret; |
|
|
地下室#
发布于:2002-10-16 14:32
SCM不难,看看MSDN就行了。
|
|
|
5楼#
发布于:2002-10-16 17:50
我在停用一个USB设备时没有成功,错误码是ERROR_INVALID_SERVICE_CONTROL,这是怎么回事?
//代码如下 hscm = OpenSCManager( NULL, // local machine NULL, // ServicesActive database SC_MANAGER_ALL_ACCESS); // full access rights schService = OpenService(hscm,strServiceName,SERVICE_ALL_ACCESS); if (schService == NULL ) return ; BOOL ret = ControlService( schService,SERVICE_CONTROL_STOP, &serviceStatus ); DWORD dwError =0 ; if (ret==0 ) { dwError = GetLastError(); } CloseServiceHandle(schService); |
|
6楼#
发布于:2002-10-16 17:54
那是因为你的那个驱动不接受STOP的参数,它拒绝停止,不是你的错
|
|
|
7楼#
发布于:2002-10-21 14:13
请问 但是如何作到向 DDK\\Tools\\Disabler.exe 这样的功能,
它能指定停止任何一个设备。 就是从设备管理器中属性页的禁止功能! |
|
8楼#
发布于:2002-10-21 15:46
刚在论坛上找到的,费时1.5小时, 数百个贴子看过来,真累!
可用以下三 |
|