国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 无棣县| 巍山| 衡山县| 方城县| 镇远县| 鄱阳县| 赤峰市| 富蕴县| 万宁市| 偃师市| 河北区| 龙州县| 原平市| 栖霞市| 民县| 九龙县| 敖汉旗| 阳曲县| 汾阳市| 阿克陶县| 白山市| 武邑县| 贵州省| 菏泽市| 囊谦县| 比如县| 库伦旗| 福建省| 晋州市| 秭归县| 乐业县| 乐昌市| 阳江市| 玉屏| 乌拉特中旗| 万年县| 剑川县| 梁河县| 浑源县| 浑源县| 卓资县|