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

隨筆 - 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>
            亚洲第一福利社区| 国产日韩一区在线| 99re6这里只有精品| 亚洲第一伊人| 亚洲高清视频的网址| 亚洲精品乱码久久久久久蜜桃91 | 午夜精品福利一区二区蜜股av| 日韩亚洲欧美在线观看| 一本色道久久综合精品竹菊 | 欧美激情视频在线播放| 欧美日韩一区二区国产| 国产精品日本欧美一区二区三区| 国产欧美日韩视频一区二区三区| 国产午夜一区二区三区| 亚洲黄色性网站| 亚洲一区视频在线| 麻豆精品精华液| 亚洲肉体裸体xxxx137| 亚洲男人的天堂在线aⅴ视频| 久久精品亚洲| 欧美午夜视频网站| 激情成人av在线| 亚洲无限av看| 欧美大片在线观看| 欧美r片在线| 国产精品久久| 亚洲电影一级黄| 午夜欧美不卡精品aaaaa| 免费h精品视频在线播放| 中日韩高清电影网| 欧美搞黄网站| 黄色精品免费| 新狼窝色av性久久久久久| 亚洲成色www8888| 欧美一区二区三区四区夜夜大片 | 亚洲黄色成人| 午夜精品影院| 亚洲日产国产精品| 久久夜色精品国产亚洲aⅴ| 国产精品欧美日韩| 99精品国产热久久91蜜凸| 欧美中文字幕在线视频| 一本久久a久久免费精品不卡| 久久久亚洲精品一区二区三区| 欧美日韩一区在线观看| 亚洲精品视频在线观看网站| 久久激情网站| 久久久久久9| 一区二区三区日韩精品| 欧美韩日一区二区三区| 在线成人免费观看| 亚洲国产欧美日韩另类综合| 久久黄色网页| 亚洲欧美激情在线视频| 欧美网站在线| 亚洲线精品一区二区三区八戒| 亚洲国产精品激情在线观看| 理论片一区二区在线| 激情五月婷婷综合| 久久久久99| 欧美一区二区在线看| 国产色综合网| 久久久噜噜噜久久久| 久久不射中文字幕| 国产精品亚洲综合天堂夜夜| 亚洲欧美韩国| 亚洲自拍偷拍福利| 国产农村妇女精品| 午夜精品www| 亚洲欧美网站| 国外成人在线| 欧美成人国产va精品日本一级| 午夜一区二区三区在线观看| 国产日韩一区欧美| 久久人体大胆视频| 久久久精品网| 91久久在线播放| 日韩图片一区| 国产精品午夜久久| 午夜一区在线| 欧美在线观看一区| 亚洲摸下面视频| 国内精品视频在线播放| 久久蜜臀精品av| 美国十次了思思久久精品导航| 亚洲人成高清| 一本久久综合亚洲鲁鲁五月天| 国产精品亚洲综合久久| 久久午夜激情| 欧美v日韩v国产v| 亚洲一二三区精品| 久久riav二区三区| 亚洲精选在线观看| 亚洲免费在线视频| 亚洲国产1区| 99精品视频免费全部在线| 国产精品伦一区| 六月婷婷一区| 国产精品av久久久久久麻豆网| 久久久99爱| 欧美激情精品久久久久久免费印度 | 一区二区三区色| 伊人久久大香线| 一本色道88久久加勒比精品| 国内精品一区二区三区| 日韩亚洲一区二区| 精品999网站| 欧美亚洲一区二区在线观看| 亚洲精选在线| 久久亚洲私人国产精品va媚药| 亚洲视频在线观看视频| 久久久久久网| 久久经典综合| 国产精品白丝黑袜喷水久久久| 免费成人黄色av| 国产午夜精品视频| 一本色道久久88亚洲综合88| 亚洲国产日本| 久久精品99久久香蕉国产色戒| 一区二区三区视频在线看| 久久精品国产69国产精品亚洲| 亚洲私人影院| 欧美精品免费看| 亚洲第一精品福利| 国产亚洲欧美日韩日本| 一道本一区二区| 一区二区福利| 欧美精品一区二区三区四区| 美女福利精品视频| 国内一区二区三区| 欧美专区在线| 久久中文字幕一区| 国产在线精品成人一区二区三区 | 午夜精品久久久久久久久久久久久 | 亚洲免费观看| 亚洲精品一区二区三区在线观看 | 亚洲精品在线观| 欧美精品激情在线观看| 亚洲欧美资源在线| 一本大道av伊人久久综合| 欧美专区在线播放| 亚洲一区二区三区精品在线| 尤物九九久久国产精品的特点| 欧美一区二区高清在线观看| 欧美大片在线观看| 欧美精品成人一区二区在线观看 | 免播放器亚洲| 亚洲国产天堂久久综合| 久久久欧美精品| 欧美刺激午夜性久久久久久久| 激情久久久久| 欧美成人三级在线| 99国内精品| 欧美专区亚洲专区| 精品成人国产| 欧美激情亚洲自拍| 一区二区三区欧美在线观看| 新片速递亚洲合集欧美合集| 国产美女精品一区二区三区| 欧美怡红院视频| 欧美激情国产精品| 亚洲一区二区三区免费观看 | 久久国产精品一区二区三区| 国产女主播一区| 老牛嫩草一区二区三区日本| 亚洲区一区二| 亚洲男同1069视频| 黄色免费成人| 欧美精品一级| 亚洲综合国产激情另类一区| 久久免费精品视频| 亚洲蜜桃精久久久久久久| 国产精品久久看| 久久亚洲电影| 夜夜爽www精品| 欧美成人国产| 亚洲欧美综合另类中字| 一区二区三区在线免费视频| 欧美激情一区二区| 性色一区二区| 亚洲精品国产品国语在线app| 香蕉成人啪国产精品视频综合网| 国产综合激情| 国产精品久久久久久久久搜平片| 久久久久久999| 一区二区高清| 亚洲电影欧美电影有声小说| 欧美精品 日韩| 国产日韩欧美视频| 母乳一区在线观看| 性18欧美另类| 亚洲精品乱码视频| 久久在线免费观看| 亚洲欧美日产图| 亚洲另类自拍| 亚洲片区在线| 亚洲人成77777在线观看网| 国产一区二区三区四区老人| 欧美性大战久久久久久久| 农村妇女精品|