青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 64, 文章 - 11, 評論 - 12, 引用 - 0
數據加載中……

操控NT式驅動小工具的源碼

   NT式驅動在操作系統中,被當成一種服務來管理。我們可以在HKLM\system\currentcontrolset\services鍵下查找到所有安裝的NT式驅動的信息,這里也可以看到windows服務的相關信息。安裝NT式驅動時,安裝程序會在這里建立起相關的信息。如果我們手動地來創建這些記錄來安裝驅動也是可以的,不熟悉時還是比較麻煩的,網上也有許多操控NT驅動的工具可供下載。這里我提供操控NT驅動的源碼,用戶可以下下來編譯成控制臺程序或者改成窗體程序都是可以的。
  1//////////////////////////////////////////////////////////////////////////
  2// file InstallNTDriver.cpp
  3//
  4// Copyright (c) 2010 robert xiao. All Rights Reserved. robert.xiao2010@gmail.com
  5// 
  6// Permission to use, copy, modify, and distribute this software and its
  7// documentation for any purpose, without fee, and without a written
  8// agreement, is hereby granted, provided that the above copyright notice, 
  9// this paragraph and the following two paragraphs appear in all copies, 
 10// modifications, and distributions.
 11//
 12//
 13// IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT,
 14// INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST
 15// PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
 16// EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 17//
 18// THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
 19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 20// PARTICULAR PURPOSE. THE SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF
 21// ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS". THE AUTHOR HAS NO OBLIGATION
 22// TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 23//
 24//////////////////////////////////////////////////////////////////////////
 25#pragma once
 26#include <windows.h>  
 27#include <winsvc.h>
 28#include <conio.h>  
 29#include <stdio.h>
 30#include <shlwapi.h>
 31#include <iostream>
 32#include <string>
 33using namespace std;
 34
 35#pragma comment(lib, "shlwapi.lib")
 36
 37#define  WARN_MSG(X) printf X
 38#define  ERROR_MSG(X) printf X
 39#define  MAX_FNAME_LEN 256
 40//////////////////////////////////////////////////////////////////////////
 41// forward declaration.
 42void Quit(){
 43    exit(0);
 44}

 45void InstallMyDriver();
 46void StartMyDevice();
 47void PauseMyDevice();
 48void ResumeMyDevice();
 49void StopMyDevice();
 50void UnstallMyDriver();
 51
 52//////////////////////////////////////////////////////////////////////////
 53// global variable and structure
 54
 55typedef void (* pf)();
 56
 57enum SERVICE_COMMAND_TYPE{SCT_START, SCT_PAUSE, SCT_CONTINUE, SCT_STOP};
 58void _controlServiceImpl(char *szName, SERVICE_COMMAND_TYPE t);
 59
 60struct {
 61    int _nIndex;
 62    char _chMsg[100];
 63    pf _fu;
 64}
g_works[] = {
 65    0"Install NT Driver",                    InstallMyDriver,
 66    1"Start Device.",                        StartMyDevice,
 67    2"Stop Device.",                        StopMyDevice,
 68    3"UnInstall Driver.",                    UnstallMyDriver,
 69    -1"Quit.",                            Quit,
 70}
;
 71
 72static int g_nAmount = sizeof(g_works)/sizeof(g_works[0]);
 73
 74//////////////////////////////////////////////////////////////////////////
 75// message loop
 76
 77void PrintHelp(){
 78    system("cls");
 79    printf("\nplease select a item from follow items");
 80    for (int i = 0; i < g_nAmount; ++i){
 81        printf("\n%-4d: %s", g_works[i]._nIndex, g_works[i]._chMsg);
 82    }

 83    printf("\nEnter your input: ");
 84}

 85bool CheckInput(){
 86    if(cin.fail()){
 87        cin.clear();
 88        char c;
 89        cin >> c;
 90        return false;
 91    }

 92    return true;
 93}

 94
 95bool Dispatch(int nSelect){
 96    if(!CheckInput())
 97        return false;
 98
 99    bool bProduced = false;
100    for (int i = 0; i < g_nAmount; ++i){
101        if(nSelect ==  g_works[i]._nIndex){
102            bProduced = true;
103            g_works[i]._fu();
104            break;
105        }

106    }

107    return bProduced;
108}

109
110void ProcessMessage(){
111    int n;
112    do{
113        PrintHelp();
114        cin>> n;
115        while (!Dispatch(n)){
116            printf("\nEnter a valid item eg.(-1):");
117            cin >> n;
118        }

119        printf("press enter to begin next.");
120        system("pause");
121    }
while(true);
122}

123
124//////////////////////////////////////////////////////////////////////////
125// Entry point.
126int main(int argc, char* argv[]){
127    ProcessMessage();
128    return EXIT_SUCCESS;
129}

130
131//////////////////////////////////////////////////////////////////////////
132// implemention.
133
134bool InputDriverPath(char *szPath, int nLength = MAX_PATH){
135    if(!szPath){
136        ERROR_MSG(("InputDriverPath`s argument is invalid"));
137        return false;
138    }

139    string strTemp;
140    do{
141        printf("Driver binary file:");
142        cin >>strTemp;
143        if(PathFileExistsA(strTemp.c_str())){
144            break;    
145        }

146        printf("You input a invalid file path!\n");
147    }
while (1);
148
149    if(nLength < strTemp.length()){
150        WARN_MSG(("The buffer for file path is too samll"));
151    }

152    strcpy_s(szPath, nLength, strTemp.c_str());
153    return true;
154}

155
156bool InputDriverName(char *szName, int nLen = MAX_FNAME_LEN){
157    if(!szName){
158        ERROR_MSG(("InputDriverName`s argument is invalid"));
159        return false;
160    }

161    string strTemp;
162    do{
163        printf("Driver name:");
164        cin >> strTemp;
165        if(strTemp.size() > 3){
166            break;    
167        }

168        printf("You input a invalid driver name!\n");
169    }
while (1);
170
171    if(nLen < strTemp.size()){
172        ERROR_MSG(("The buffer for file path is too samll"));
173        return false;
174    }

175    strcpy_s(szName,nLen, strTemp.c_str());
176    return true;
177}

178
179DWORD _InstallMyDriver(char *szName, char * szImagePath){
180    // Open scm
181    if(!szName || !szImagePath){
182        ERROR_MSG(("_InstallMyDriver`parameter is invalid.\n"));
183        return EXIT_FAILURE;
184    }

185    SC_HANDLE hMgr = 0;
186    SC_HANDLE hSev = 0;
187    hMgr = OpenSCManager(00, SC_MANAGER_ALL_ACCESS);
188    if(!hMgr){
189        ERROR_MSG(("OpenSCManager() Failed: %d.\n", GetLastError()));
190        return EXIT_FAILURE;
191    }

192
193    // create service.
194    hSev = CreateServiceA(hMgr,
195        szName,
196        szName,
197        SERVICE_ALL_ACCESS,
198        SERVICE_KERNEL_DRIVER,
199        SERVICE_DEMAND_START,
200        SERVICE_ERROR_IGNORE,
201        szImagePath,
202        NULL,
203        NULL,
204        NULL,
205        NULL,
206        NULL);
207    DWORD dwError = EXIT_SUCCESS;
208    if(!hSev){
209        dwError = GetLastError();
210        if(dwError != ERROR_IO_PENDING && dwError != ERROR_SERVICE_EXISTS){
211            ERROR_MSG(("CreateServiceA failed: %d.\n", dwError));
212            goto clear;
213        }

214        hSev = OpenServiceA(hMgr, szName, SERVICE_ALL_ACCESS);
215        if(!hSev){
216            ERROR_MSG(("OpenServiceA failed: %d", GetLastError()));
217            goto clear;
218        }

219        dwError = EXIT_SUCCESS;
220    }

221clear:
222    if(hSev){
223        CloseServiceHandle(hSev);
224    }

225    if(hMgr){
226        CloseServiceHandle(hMgr);
227    }

228    return dwError;
229}

230void InstallMyDriver()
231{
232    // Input file path and name.
233    char szImagePath[MAX_PATH] = {'\0'};
234    if(!InputDriverPath(szImagePath)){
235        return;
236    }

237    char szName[MAX_FNAME_LEN] = {'\0'};
238    if(!InputDriverName(szName)){
239        return;
240    }

241    if(_InstallMyDriver(szName, szImagePath) != EXIT_SUCCESS){
242        ERROR_MSG(("Install driver failed.\n"));
243        return;
244    }

245    printf("Did you want to start the device?(0: yes):");
246    int i;
247    cin >> i;
248    if(i == 0){
249        _controlServiceImpl(szName, SCT_START);
250    }

251}

252
253DWORD _UnstallMyDriver(char *szName){
254    SC_HANDLE hMgr = 0;
255    SC_HANDLE hSev = 0;
256    hMgr = OpenSCManager(00, SC_MANAGER_ALL_ACCESS);
257    if(!hMgr){
258        ERROR_MSG(("OpenSCManager() Failed: %d.\n", GetLastError()));
259        return EXIT_FAILURE;
260    }

261
262    DWORD dwError = EXIT_SUCCESS;
263    hSev = OpenServiceA(hMgr, szName, SERVICE_ALL_ACCESS);
264    if(!hSev){
265        ERROR_MSG(("OpenServiceA failed: %d", GetLastError()));
266        dwError = GetLastError();
267        goto clear;
268    }

269
270    SERVICE_STATUS sta;
271    ControlService(hSev, SERVICE_CONTROL_STOP, &sta);
272    if(!DeleteService(hSev)){
273        dwError = GetLastError();
274        ERROR_MSG(("DeleteService failed:%d", GetLastError()));
275        goto clear;
276    }

277    printf("Uninstall driver successfully.\n");
278clear:
279    if(hSev){
280        CloseServiceHandle(hSev);
281    }

282    if(hMgr){
283        CloseServiceHandle(hMgr);
284    }

285    return dwError;
286
287}

288void UnstallMyDriver()
289{
290    char szName[MAX_FNAME_LEN] = {'\0'};
291    if(!InputDriverName(szName)){
292        return;
293    }

294    _UnstallMyDriver(szName);
295}

296
297bool _IsSameState(SERVICE_COMMAND_TYPE t, DWORD dwState){
298    if(dwState == SERVICE_RUNNING){
299        if(t == SCT_START || t == SCT_CONTINUE){
300            return true;
301        }

302    }

303    else if(dwState != SERVICE_RUNNING){
304        if(t == SCT_STOP){
305            return true;
306        }

307    }

308    else if(dwState == SERVICE_PAUSED){
309        if(t == SCT_PAUSE){
310            return true;
311        }

312    }

313    return false;
314}

315void _controlServiceImpl(char *szName, SERVICE_COMMAND_TYPE t){
316    SC_HANDLE hMgr = 0;
317    SC_HANDLE hSev = 0;
318    hMgr = OpenSCManager(00, SC_MANAGER_ALL_ACCESS);
319    if(!hMgr){
320        ERROR_MSG(("OpenSCManager() Failed: %d.\n", GetLastError()));
321        return ;
322    }

323
324    DWORD dwError = EXIT_SUCCESS;
325    hSev = OpenServiceA(hMgr, szName, SERVICE_ALL_ACCESS);
326    if(!hSev){
327        ERROR_MSG(("OpenServiceA failed: %d", GetLastError()));
328        dwError = GetLastError();
329        goto clear;
330    }

331
332    SERVICE_STATUS sta;
333    if(!QueryServiceStatus(hSev, &sta)){
334        ERROR_MSG(("QueryServiceStatus failed: %d", GetLastError()));
335        goto clear;
336    }

337
338    if(!_IsSameState(t, sta.dwCurrentState)){
339        BOOL bSuccessful = TRUE;
340        switch (t)
341        {
342        case SCT_START:
343            bSuccessful = StartService(hSev, 00);
344            break;
345        case SCT_CONTINUE:
346            bSuccessful = ControlService(hSev, SERVICE_CONTROL_CONTINUE, &sta);
347            break;
348        case SCT_PAUSE:
349            bSuccessful = ControlService(hSev, SERVICE_CONTROL_PAUSE, &sta);
350            break;
351        default:
352            bSuccessful = ControlService(hSev, SERVICE_CONTROL_STOP, &sta);
353            break;            
354        }

355        if(!bSuccessful){
356            ERROR_MSG(("Control Service failed: %d", GetLastError()));
357        }

358        else{
359            printf("Successfully.\n");
360        }

361    }

362    else{
363        printf("The service`s state is same.\n");
364    }

365clear:
366    if(hSev){
367        CloseServiceHandle(hSev);
368    }

369    if(hMgr){
370        CloseServiceHandle(hMgr);
371    }

372    return ;
373}

374
375void _controlService(SERVICE_COMMAND_TYPE t){
376    char szName[MAX_FNAME_LEN] = {'\0'};
377    if(!InputDriverName(szName)){
378        return;
379    }

380    _controlServiceImpl(szName, t);
381}

382void StartMyDevice()
383{
384    _controlService(SCT_START);
385}

386
387void PauseMyDevice()
388{
389    _controlService(SCT_PAUSE);
390}

391
392void ResumeMyDevice()
393{
394    _controlService(SCT_CONTINUE);
395}

396
397void StopMyDevice()
398{
399    _controlService(SCT_STOP);
400}

posted on 2010-04-21 20:08 Robertxiao 閱讀(500) 評論(0)  編輯 收藏 引用 所屬分類: Windows/MFC探索

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99国产欧美久久久精品| 欧美激情影音先锋| 韩日精品中文字幕| 国产精品国产三级国产专播品爱网 | 国产精品嫩草99av在线| 欧美午夜寂寞影院| 国产女主播一区二区| 国内成人精品2018免费看 | 欧美精品一区二区在线观看| 欧美日韩一视频区二区| 国产精品人人爽人人做我的可爱 | 农村妇女精品| 亚洲国产aⅴ天堂久久| 狼人天天伊人久久| 亚洲国产精品第一区二区三区| 亚洲国产三级| 亚洲欧美经典视频| 久久亚洲视频| 欧美亚一区二区| 国内激情久久| 一本久久a久久免费精品不卡| 亚洲欧美日韩专区| 鲁大师影院一区二区三区| 最新中文字幕亚洲| 欧美在线播放| 欧美片在线观看| 国产伊人精品| 亚洲影音一区| 欧美日韩在线播放| 亚洲一区区二区| 美女尤物久久精品| 国产精品欧美日韩一区二区| 亚洲国产99| 欧美影院成年免费版| 亚洲电影免费观看高清| 亚洲欧美一级二级三级| 欧美理论在线| 亚洲国产欧美一区二区三区久久 | 欧美日韩国产高清视频| 激情视频一区二区三区| 亚洲欧美在线免费| 亚洲人成在线观看| 久久久久久9| 国产三区精品| 午夜国产精品视频免费体验区| 亚洲国产一二三| 久久嫩草精品久久久精品一| 国产精品一区二区欧美| 亚洲一级高清| 99精品视频网| 欧美日韩国产bt| 日韩天堂在线观看| 亚洲高清视频的网址| 蜜桃久久精品一区二区| 亚洲第一福利在线观看| 暖暖成人免费视频| 女同一区二区| 日韩特黄影片| 日韩一区二区精品视频| 欧美色区777第一页| 亚洲午夜免费福利视频| 亚洲欧洲一区二区三区| 欧美精品色网| 一区二区三区四区国产| 日韩午夜激情av| 欧美午夜电影完整版| 亚洲伊人观看| 欧美一区二区视频在线观看2020 | 欧美日韩国产二区| 中日韩美女免费视频网址在线观看 | 一区二区三区你懂的| 亚洲美洲欧洲综合国产一区| 欧美欧美天天天天操| 亚洲视屏在线播放| 亚洲综合精品四区| 精品成人一区二区| 亚洲片在线观看| 国产精品国色综合久久| 久久精品2019中文字幕| 久久亚洲电影| 亚洲影音一区| 国产女优一区| 亚洲天堂av综合网| 久久婷婷综合激情| 久久久久九九九九| 亚洲美女av电影| 一区二区三区视频在线看| 国产精品色网| 蜜臀av一级做a爰片久久| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲精品小视频| 亚洲午夜精品一区二区三区他趣 | 国产一区二区三区久久久| 久久久人成影片一区二区三区 | 欧美另类变人与禽xxxxx| 亚洲视频1区| 久久精品在线免费观看| 亚洲麻豆国产自偷在线| 午夜精品在线观看| 亚洲乱码日产精品bd| 亚洲欧美日韩国产另类专区| 亚洲国产精品123| 亚洲视频免费看| 亚洲国产三级网| 亚洲欧美综合网| 日韩亚洲欧美一区| 久久国产免费| 亚洲一区影音先锋| 蜜臀a∨国产成人精品| 欧美一乱一性一交一视频| 欧美成人午夜影院| 久久男人av资源网站| 欧美婷婷久久| 亚洲福利视频网| 国产一区二区成人| 一区二区三区日韩精品| 亚洲黄色三级| 久久精品女人| 久久av资源网站| 欧美午夜视频一区二区| 亚洲黄色三级| 亚洲黄色成人久久久| 久久久噜噜噜久久| 欧美伊人久久| 国产精品一区一区| 亚洲午夜av| 亚洲免费一在线| 欧美日一区二区三区在线观看国产免| 久久视频一区| 一区二区视频欧美| 久久久久久夜| 美女国产一区| 亚洲高清在线观看一区| 久久久人成影片一区二区三区 | 亚洲小说欧美另类社区| 一区二区欧美精品| 欧美日韩精品免费| 亚洲免费电影在线观看| 一区二区三区www| 欧美精品久久久久久久久老牛影院| 狠狠色丁香久久婷婷综合丁香| 亚洲一级在线观看| 欧美一级电影久久| 国产欧美日韩在线视频| 亚洲综合成人在线| 欧美一级片一区| 国产视频一区三区| 欧美在线一二三四区| 久久综合狠狠| 亚洲国产欧美在线人成| 欧美风情在线观看| 一区二区三区www| 欧美在线观看天堂一区二区三区| 国产欧美精品一区二区色综合 | 亚洲精品一线二线三线无人区| 日韩一级二级三级| 国产精品日产欧美久久久久| 亚洲欧美日韩专区| 久久久亚洲精品一区二区三区| 极品少妇一区二区三区精品视频 | 激情久久久久久| 久久视频在线免费观看| 亚洲国产日日夜夜| 先锋影音久久久| 揄拍成人国产精品视频| 欧美黄色免费| 亚洲午夜视频在线观看| 久久在线91| 亚洲天堂第二页| 国产一区二区三区不卡在线观看| 狂野欧美性猛交xxxx巴西| 9久re热视频在线精品| 久久久999精品| 99视频精品在线| 国产一区久久| 欧美日韩一区二区在线观看| 亚洲欧美视频在线观看视频| 亚洲成色777777在线观看影院| 久久女同互慰一区二区三区| 激情小说另类小说亚洲欧美 | 欧美一级视频一区二区| 亚洲国产成人91精品| 欧美午夜精品理论片a级按摩| 久久精品伊人| 亚洲免费视频一区二区| 91久久精品国产91久久| 久久爱www.| 亚洲视频在线一区观看| 在线看欧美视频| 国产日产欧产精品推荐色| 欧美日韩国产不卡| 免费看亚洲片| 久久精品一区二区三区中文字幕| aa日韩免费精品视频一| 欧美高清自拍一区| 久久嫩草精品久久久精品一| 午夜欧美精品| 亚洲摸下面视频| 亚洲图片激情小说| 99re8这里有精品热视频免费|