NT式驱动的卸载

NT式驱动的卸载

  •    A、卸载驱动流程
  •    B、内核函数DeleteService
  •    C、内核函数ControlService
  •    D、构建UnLoadSys函数
  •    E、测试并查看调试信息

   一、卸载驱动流程      

 1、用OpenSCManager函数打开 服务控制管理器,取得SCM句柄,如果返回NULL,则结束,否则继续2.//hSCM

 2、用OpenService打开相应的服务,如果返回NULL,则结束,否则继续3.hSerVice

 3、用ControlService停止驱动服务,如果返回NULL,只有重新启动才能,再动态加载。

 4、用DeleteService动态卸载驱动程序,如果返回NULL,则打印出错调试信息,否则打印成功信息。

//卸载驱动程序  
BOOL UnLoadSys( char * szSvrName )  
{
  //一定义所用到的变量
  BOOL bRet = FALSE;
  SC_HANDLE hSCM=NULL;//SCM管理器的句柄,用来存放OpenSCManager的返回值
  SC_HANDLE hService=NULL;//NT驱动程序的服务句柄,用来存放OpenService的返回值
  SERVICE_STATUS SvrSta;

  //二打开SCM管理器
  hSCM = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );  
  if( hSCM == NULL )  
  {
    //带开SCM管理器失败
    TRACE( "OpenSCManager() Faild %d ! \n", GetLastError() );  
    bRet = FALSE;
    goto BeforeLeave;
  }  
  else  
  {
    //打开SCM管理器成功
    TRACE( "OpenSCManager() ok ! \n" );  
  }

  //三打开驱动所对应的服务
  hService = OpenService( hSCM, szSvrName, SERVICE_ALL_ACCESS );  

  if( hService == NULL )  
  {
    //打开驱动所对应的服务失败 退出
    TRACE( "OpenService() Faild %d ! \n", GetLastError() );  
    bRet = FALSE;
    goto BeforeLeave;
  }  
  else  
  {  
    TRACE( "OpenService() ok ! \n" );  //打开驱动所对应的服务 成功
  }  

  //四停止驱动程序,如果停止失败,只有重新启动才能,再动态加载。  
  if( !ControlService( hService, SERVICE_CONTROL_STOP , &SvrSta ) )  
  {  
    TRACE( "用ControlService() 停止驱动程序失败 错误号:%d !\n", GetLastError() );  
  }  
  else  
  {
    //停止驱动程序成功
    TRACE( "用ControlService() 停止驱动程序成功 !\n" );  
  }  

  //五动态卸载驱动服务。  
  if( !DeleteService( hService ) )  //TRUE//FALSE
  {
    //卸载失败
    TRACE( "卸载失败:DeleteSrevice()错误号:%d !\n", GetLastError() );  
  }  
  else  
  {  
    //卸载成功
    TRACE ( "卸载成功 !\n" );  
  }  

  bRet = TRUE;
  
//六 离开前关闭打开的句柄
BeforeLeave:
  if(hService>0)
  {
    CloseServiceHandle(hService);
  }

  if(hSCM>0)
  {
    CloseServiceHandle(hSCM);
  }
  return bRet;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值