phychong
驱动牛犊
驱动牛犊
  • 注册日期2002-08-13
  • 最后登录2003-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1456回复:8

如何在程序里启用/停止某个设备呢

楼主#
更多 发布于:2002-10-16 13:56
如何在程序里启用/停止某个设备呢,就象设备管理器里实现的一样。不知道有没有实现该功能的API函数??
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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相关帮助。
Tom_lyd
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-16 14:04
请参考FileMon源代码和SCM API
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于: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;
Tom_lyd
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-16 14:32
SCM不难,看看MSDN就行了。
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
phychong
驱动牛犊
驱动牛犊
  • 注册日期2002-08-13
  • 最后登录2003-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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);
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-10-16 17:54
那是因为你的那个驱动不接受STOP的参数,它拒绝停止,不是你的错
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
gz818
驱动小牛
驱动小牛
  • 注册日期2002-02-26
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-10-21 14:13
请问 但是如何作到向 DDK\\Tools\\Disabler.exe 这样的功能,
它能指定停止任何一个设备。
就是从设备管理器中属性页的禁止功能!
gz818
驱动小牛
驱动小牛
  • 注册日期2002-02-26
  • 最后登录2008-11-15
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-10-21 15:46
刚在论坛上找到的,费时1.5小时, 数百个贴子看过来,真累!

可用以下三
游客

返回顶部