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

隨筆 - 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| 亚洲网站在线播放| 久久久夜色精品亚洲| 最新国产乱人伦偷精品免费网站 | 欧美风情在线| 欧美日韩国产区| 国产日本欧美视频| 亚洲啪啪91| 欧美制服丝袜第一页| 亚洲第一中文字幕| 午夜老司机精品| 欧美了一区在线观看| 国产亚洲成av人片在线观看桃 | 国产精品久久久久久久久免费樱桃 | 一个色综合av| 久久久蜜桃精品| 日韩视频免费观看高清完整版| 欧美一区二区三区另类| 欧美成人dvd在线视频| 国产区二精品视| 亚洲天堂久久| 亚洲精品视频啊美女在线直播| 久久精品国产精品亚洲综合| 欧美午夜精品久久久| 亚洲精品国产精品乱码不99| 麻豆久久精品| 欧美在线观看一二区| 国产久一道中文一区| 亚洲午夜小视频| 亚洲经典三级| 久久久久一区二区| 亚洲校园激情| 国产精品成人免费| 一本一本久久a久久精品综合妖精| 麻豆精品传媒视频| 欧美在线免费视屏| 国产亚洲成av人在线观看导航| 亚洲一区免费看| aa日韩免费精品视频一| 欧美日韩精品一区| 99国产精品私拍| 亚洲人成在线观看| 欧美激情a∨在线视频播放| 亚洲精品男同| 99这里有精品| 国产精品视频网址| 欧美亚洲综合网| 欧美一区二区三区久久精品| 国内精品久久久久久久影视麻豆| 久久精品国产91精品亚洲| 午夜欧美精品| 一区二区三区在线免费视频| 麻豆国产精品777777在线| 久久一二三区| 日韩一区二区精品| 亚洲性线免费观看视频成熟| 国产精品尤物| 美女图片一区二区| 欧美高清在线| 亚洲欧美在线aaa| 欧美一区亚洲| 亚洲精品中文字幕在线| 亚洲人成精品久久久久| 国产精品国产三级国产专播精品人| 亚洲一本视频| 久久国产精品网站| 日韩一区二区精品视频| 一区二区三区免费网站| 国产一区二区三区网站| 亚洲第一页在线| 国产精品久久久一本精品| 久久亚洲私人国产精品va| 欧美国产先锋| 久久精品色图| 欧美精品久久久久久| 亚洲在线第一页| 鲁大师成人一区二区三区| 亚洲在线网站| 欧美国产第一页| 久久精品道一区二区三区| 欧美精品电影| 美乳少妇欧美精品| 国产精品视频网站| 亚洲三级视频在线观看| 国内外成人免费激情在线视频网站 | 久久精品亚洲乱码伦伦中文| 亚洲精品一区二| 欧美在线免费观看视频| 亚洲无线视频| 欧美成在线视频| 黄色综合网站| 亚洲免费成人| 黄色一区二区在线| 亚洲愉拍自拍另类高清精品| 亚洲精品久久久久久久久久久| 午夜精品三级视频福利| 亚洲深夜福利视频| 免费91麻豆精品国产自产在线观看| 午夜精品久久久久久久久久久久| 美女主播视频一区| 久久久久久久一区| 国产精品手机视频| 999亚洲国产精| 亚洲国产免费| 久久久亚洲高清| 久久女同精品一区二区| 国产精品专区h在线观看| 一本高清dvd不卡在线观看| 亚洲蜜桃精久久久久久久| 久久久www成人免费精品| 久久电影一区| 国产色产综合色产在线视频| 亚洲天堂网在线观看| 亚洲综合99| 国产精品爽爽ⅴa在线观看| 99国产精品99久久久久久粉嫩| 亚洲精品无人区| 欧美国产欧美亚州国产日韩mv天天看完整| 久久天天躁狠狠躁夜夜av| 国内一区二区在线视频观看| 久久国产日韩欧美| 米奇777超碰欧美日韩亚洲| 狠狠v欧美v日韩v亚洲ⅴ| 久久久综合精品| 欧美成人一区在线| 亚洲精品视频免费在线观看| 欧美大片18| 亚洲剧情一区二区| 亚洲男女自偷自拍| 国产午夜精品福利| 久久久久久亚洲精品杨幂换脸| 免费成人美女女| 亚洲精品中文字幕有码专区| 欧美日韩亚洲一区二区三区| 亚洲午夜久久久久久尤物 | 一级成人国产| 午夜综合激情| 韩日午夜在线资源一区二区| 久久亚洲电影| 99视频热这里只有精品免费| 校园春色综合网| 精品电影在线观看| 欧美激情一二三区| 亚洲一二三级电影| 久久综合色一综合色88| 亚洲日韩中文字幕在线播放| 欧美日韩精品国产| 欧美亚洲一区二区在线| 欧美大胆a视频| 亚洲尤物精选| 在线免费日韩片| 国产精品久久久久999| 久久色在线观看| 亚洲手机成人高清视频| 欧美高清视频免费观看| 亚洲欧美日韩在线| 最新国产成人在线观看| 国产精品久久久一区二区三区 | 国产精品―色哟哟| 亚洲三级毛片| 久久国产精品网站| 日韩视频精品在线观看| 国产亚洲免费的视频看| 欧美日韩日韩| 久热精品视频| 先锋影音国产精品| 日韩视频一区二区三区在线播放| 亚洲欧美日韩成人高清在线一区| 影音先锋日韩精品| 国产精品入口夜色视频大尺度| 欧美国产免费| 麻豆成人91精品二区三区| 午夜免费在线观看精品视频| 91久久国产精品91久久性色| 久久久久成人网| 亚洲欧美中文另类| 99精品国产在热久久| 在线观看视频欧美| 国产日韩一区二区三区在线播放| 欧美片网站免费| 免费成年人欧美视频| 久久精品99国产精品酒店日本| 99国产精品一区|