国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

應(yīng)用層 加載驅(qū)動 和 卸載驅(qū)動代碼

2019-11-14 11:31:21
字體:
供稿:網(wǎng)友
BOOL LoadDriver(char* lpszDriverName,char* lpszDriverPath){    char szDriverImagePath[256] = {0};    //得到完整的驅(qū)動路徑    GetFullPathName(lpszDriverPath, 256, szDriverImagePath, NULL);    BOOL bRet = FALSE;    SC_HANDLE hServiceMgr=NULL;//SCM管理器的句柄    SC_HANDLE hServiceDDK=NULL;//NT驅(qū)動程序的服務(wù)句柄    //打開服務(wù)控制管理器    hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_access );    if( hServiceMgr == NULL )      {        //OpenSCManager失敗        PRintf( "OpenSCManager() Faild %d ! /n", GetLastError() );        bRet = FALSE;        goto BeforeLeave;    }    else    {        //OpenSCManager成功        printf( "OpenSCManager() ok ! /n" );      }    //創(chuàng)建驅(qū)動所對應(yīng)的服務(wù)    hServiceDDK = CreateService( hServiceMgr,        lpszDriverName, //驅(qū)動程序的在注冊表中的名字          lpszDriverName, // 注冊表驅(qū)動程序的 DisplayName 值          SERVICE_ALL_ACCESS, // 加載驅(qū)動程序的訪問權(quán)限          SERVICE_KERNEL_DRIVER,// 表示加載的服務(wù)是驅(qū)動程序          SERVICE_DEMAND_START, // 注冊表驅(qū)動程序的 Start 值          SERVICE_ERROR_IGNORE, // 注冊表驅(qū)動程序的 ErrorControl 值          szDriverImagePath, // 注冊表驅(qū)動程序的 ImagePath 值          NULL,  //GroupOrder HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/GroupOrderList        NULL,          NULL,          NULL,          NULL);      DWord dwRtn;    //判斷服務(wù)是否失敗    if( hServiceDDK == NULL )      {          dwRtn = GetLastError();        if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS )          {              //由于其他原因創(chuàng)建服務(wù)失敗            printf( "CrateService() Faild %d ! /n", dwRtn );              bRet = FALSE;            goto BeforeLeave;        }          else          {            //服務(wù)創(chuàng)建失敗,是由于服務(wù)已經(jīng)創(chuàng)立過            printf( "CrateService() Faild Service is ERROR_IO_PENDING or ERROR_SERVICE_EXISTS! /n" );          }        // 驅(qū)動程序已經(jīng)加載,只需要打開          hServiceDDK = OpenService( hServiceMgr, lpszDriverName, SERVICE_ALL_ACCESS );          if( hServiceDDK == NULL )          {            //如果打開服務(wù)也失敗,則意味錯誤            dwRtn = GetLastError();              printf( "OpenService() Faild %d ! /n", dwRtn );              bRet = FALSE;            goto BeforeLeave;        }          else         {            printf( "OpenService() ok ! /n" );        }    }      else      {        printf( "CrateService() ok ! /n" );    }    //開啟此項服務(wù)    bRet= StartService( hServiceDDK, NULL, NULL );      if( !bRet )      {          DWORD dwRtn = GetLastError();          if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_ALREADY_RUNNING )          {              printf( "StartService() Faild %d ! /n", dwRtn );              bRet = FALSE;            goto BeforeLeave;        }          else          {              if( dwRtn == ERROR_IO_PENDING )              {                  //設(shè)備被掛住                printf( "StartService() Faild ERROR_IO_PENDING ! /n");                bRet = FALSE;                goto BeforeLeave;            }              else              {                  //服務(wù)已經(jīng)開啟                printf( "StartService() Faild ERROR_SERVICE_ALREADY_RUNNING ! /n");                bRet = TRUE;                goto BeforeLeave;            }          }      }    bRet = TRUE;//離開前關(guān)閉句柄BeforeLeave:    if(hServiceDDK)    {        CloseServiceHandle(hServiceDDK);    }    if(hServiceMgr)    {        CloseServiceHandle(hServiceMgr);    }    return bRet;}//卸載驅(qū)動程序BOOL UnloadDriver( char * szSvrName )  {    BOOL bRet = FALSE;    SC_HANDLE hServiceMgr=NULL;//SCM管理器的句柄    SC_HANDLE hServiceDDK=NULL;//NT驅(qū)動程序的服務(wù)句柄    SERVICE_STATUS SvrSta;    //打開SCM管理器    hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );      if( hServiceMgr == NULL )      {        //帶開SCM管理器失敗        printf( "OpenSCManager() Faild %d ! /n", GetLastError() );          bRet = FALSE;        goto BeforeLeave;    }      else      {        //帶開SCM管理器失敗成功        printf( "OpenSCManager() ok ! /n" );      }    //打開驅(qū)動所對應(yīng)的服務(wù)    hServiceDDK = OpenService( hServiceMgr, szSvrName, SERVICE_ALL_ACCESS );      if( hServiceDDK == NULL )      {        //打開驅(qū)動所對應(yīng)的服務(wù)失敗        printf( "OpenService() Faild %d ! /n", GetLastError() );          bRet = FALSE;        goto BeforeLeave;    }      else      {          printf( "OpenService() ok ! /n" );      }      //停止驅(qū)動程序,如果停止失敗,只有重新啟動才能,再動態(tài)加載。      if( !ControlService( hServiceDDK, SERVICE_CONTROL_STOP , &SvrSta ) )      {          printf( "ControlService() Faild %d !/n", GetLastError() );      }      else      {        //打開驅(qū)動所對應(yīng)的失敗        printf( "ControlService() ok !/n" );      }      //動態(tài)卸載驅(qū)動程序。      if( !DeleteService( hServiceDDK ) )      {        //卸載失敗        printf( "DeleteSrevice() Faild %d !/n", GetLastError() );      }      else      {          //卸載成功        printf( "DelServer:deleteSrevice() ok !/n" );      }      bRet = TRUE;BeforeLeave://離開前關(guān)閉打開的句柄    if(hServiceDDK)    {        CloseServiceHandle(hServiceDDK);    }    if(hServiceMgr)    {        CloseServiceHandle(hServiceMgr);    }    return bRet;    }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 湖北省| 松溪县| 乐清市| 观塘区| 罗定市| 海安县| 和顺县| 阿合奇县| 南投市| 文山县| 嵩明县| 黎城县| 安福县| 瓦房店市| 井研县| 通山县| 休宁县| 灵台县| 东港市| 鱼台县| 高邮市| 齐齐哈尔市| 二手房| 岳池县| 罗田县| 方山县| 磐安县| 三河市| 黑水县| 高唐县| 法库县| 宜宾县| 河北省| 新乡县| 巴彦淖尔市| 贵溪市| 尉氏县| 嘉祥县| 敦煌市| 文登市| 尚义县|