• <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>
            隨筆-60  評論-262  文章-1  trackbacks-0
            一共 6 個(gè)函數(shù),
            RegisterDriver      注冊驅(qū)動到注冊表.
            UnregisterDriver   從注冊表注銷驅(qū)動.
            RunDriver            運(yùn)行驅(qū)動.
            StopDriver           停止驅(qū)動的運(yùn)行.
            ControlDriver       向正在運(yùn)行的驅(qū)動發(fā)送 I/O Control 控制碼.
            GetLastErrorDescription   取得上述 5 個(gè)操作時(shí)遭遇到的錯(cuò)誤, 只能取得最近的那個(gè)錯(cuò)誤

            以下是源代碼

            drvmgr.h
            #pragma once

            EXTERN_C BOOL RegisterDriver(LPCTSTR pszDriverName, LPCTSTR pszDriverPath);
            EXTERN_C BOOL UnregisterDriver(LPCTSTR pszDriverName);
            EXTERN_C BOOL RunDriver(LPCTSTR pszDriverName);
            EXTERN_C BOOL StopDriver(LPCTSTR pszDriverName);

            EXTERN_C BOOL ControlDriver(LPCTSTR pszDriverName, DWORD dwCode, 
                               LPVOID lpInBuffer, DWORD nInBufferSize, 
                               LPVOID lpOutBuffer, DWORD nOutBufferSize, 
                               LPDWORD lpBytesReturned);

            EXTERN_C LPCTSTR GetLastErrorDescription();

            drvmgr.c
            #include <windows.h>
            #include 
            <tchar.h>
            #include 
            "drvmgr.h"

            #ifndef _countof
            #define _countof(array) (sizeof(array)/sizeof((array)[0]))
            #endif 


            TCHAR g_acErrorDescription[MAX_PATH
            *10= { 0 };

            EXTERN_C DWORD LastError()
            {
                DWORD dwResult 
            = 0;
                RtlZeroMemory(g_acErrorDescription, 
            sizeof(g_acErrorDescription));
                dwResult 
            = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_MAX_WIDTH_MASK, 
                    NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
                    g_acErrorDescription, _countof(g_acErrorDescription), NULL
                    );
                
            if (dwResult == 0)
                {
                    lstrcpy(g_acErrorDescription, _T(
            "Error number not found."));
                }
                
            return dwResult;
            }

            EXTERN_C LPCTSTR GetLastErrorDescription()
            {
                
            return g_acErrorDescription;
            }

            EXTERN_C BOOL RegisterDriver(LPCTSTR pszDriverName, LPCTSTR pszDriverPath)
            {
                BOOL bResult 
            = FALSE;
                SC_HANDLE hScMgr 
            = NULL;
                SC_HANDLE hDriver 
            = NULL;
                
                hScMgr 
            = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
                LastError();
                
            if (hScMgr)
                {
                    hDriver 
            = CreateService(hScMgr, pszDriverName, pszDriverName, 
                        
            0, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_IGNORE,
                                pszDriverPath, NULL, NULL, NULL, NULL, NULL); 
                    LastError();
                    
            if (hDriver)
                    {
                        CloseServiceHandle(hDriver);
                        bResult 
            = TRUE;
                    }
                    CloseServiceHandle(hScMgr);
                }
                
            return bResult;
            }

            EXTERN_C BOOL UnregisterDriver(LPCTSTR pszDriverName)
            {
                BOOL bResult 
            = FALSE;
                SC_HANDLE hScMgr 
            = NULL;
                SC_HANDLE hDriver 
            = NULL;

                hScMgr 
            = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
                LastError(); 
                
            if (hScMgr)
                {
                    hDriver 
            = OpenService(hScMgr, pszDriverName, DELETE); 
                    LastError(); 
                    
            if (hDriver)
                    {
                        bResult 
            = DeleteService(hDriver); 
                        LastError(); 
                        CloseServiceHandle(hDriver); 
                    } 
                    CloseServiceHandle(hScMgr); 
                }
                
            return bResult;
            }

            EXTERN_C BOOL RunDriver(LPCTSTR pszDriverName)
            {
                BOOL bResult 
            = FALSE;
                SC_HANDLE hScMgr 
            = NULL;
                SC_HANDLE hDriver 
            = NULL;

                hScMgr 
            = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
                LastError();
                
            if (hScMgr)
                {
                    hDriver 
            = OpenService(hScMgr, pszDriverName, SERVICE_START);
                    LastError();
                    
            if (hDriver)
                    {
                        bResult 
            = StartService(hDriver, 0, NULL); 
                        LastError(); 
                        CloseServiceHandle(hDriver);
                    }
                    CloseServiceHandle(hScMgr);
                }
                
            return bResult;
            }

            EXTERN_C BOOL StopDriver(LPCTSTR pszDriverName)
            {
                BOOL bResult 
            = FALSE;
                SC_HANDLE hScMgr 
            = NULL;
                SC_HANDLE hDriver 
            = NULL;
                SERVICE_STATUS sest 
            = { 0 }; 

                hScMgr 
            = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
                LastError();
                
            if (hScMgr)
                {
                    hDriver 
            = OpenService(hScMgr, pszDriverName, SERVICE_STOP);
                    LastError();
                    
            if (hDriver)
                    {
                        bResult 
            = ControlService(hDriver, SERVICE_CONTROL_STOP, &sest);
                        LastError();
                        CloseServiceHandle(hDriver);
                    }
                    CloseServiceHandle(hScMgr);
                }
                
            return bResult;
            }

            EXTERN_C BOOL ControlDriver(LPCTSTR pszDriverName, DWORD dwCode, 
                               LPVOID lpInBuffer, DWORD nInBufferSize, 
                               LPVOID lpOutBuffer, DWORD nOutBufferSize, 
                               LPDWORD lpBytesReturned)
            {
                BOOL bResult 
            = FALSE;
                SC_HANDLE hScMgr 
            = NULL;
                SC_HANDLE hDriver 
            = NULL;

                TCHAR acBuffer[MAX_PATH] 
            = { 0 };
                DWORD dwBytesReturned 
            = 0;
                DWORD dwOutBytes 
            = 0;
                DWORD dwInBytes 
            = 0;
                HANDLE hFile 
            = INVALID_HANDLE_VALUE;

                TCHAR 
            * pszProfix = NULL;

                {
                    DWORD dwVersion 
            = 0
                    DWORD dwMajorVersion 
            = 0;
                    
            //DWORD dwMinorVersion = 0; 
                    
                    dwVersion 
            = GetVersion();
                    
                    
            // Get the Windows version.
                    dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
                    
            //dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
                    
                    
            if (dwMajorVersion >= 5) {
                        pszProfix 
            = _T("\\\\.\\Global\\%s");
                    } 
            else {
                        pszProfix 
            = _T("\\\\.\\%s");
                    }
                }
                wsprintf(acBuffer, pszProfix, pszDriverName);

                hFile 
            = CreateFile(acBuffer, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); 
                LastError();
                
            if (INVALID_HANDLE_VALUE != hFile)
                {
                    bResult 
            = DeviceIoControl(hFile, dwCode, 
                        lpInBuffer, nInBufferSize, 
                        lpOutBuffer, nOutBufferSize, lpBytesReturned, 
                        NULL);
                    LastError();
                    CloseHandle(hFile);
                }

                
            return bResult;
            }


            posted on 2009-07-16 14:08 free2000fly 閱讀(398) 評論(0)  編輯 收藏 引用
            久久国产乱子伦免费精品| 色婷婷狠狠久久综合五月| 久久免费美女视频| 亚洲欧美日韩精品久久亚洲区| 久久人人爽人人爽人人片AV不| 国产高潮国产高潮久久久| 久久99精品久久久久久9蜜桃| 久久精品国产亚洲av麻豆蜜芽| 久久99国产综合精品女同| 手机看片久久高清国产日韩| 久久久久久人妻无码| 一本色道久久88综合日韩精品| 欧美牲交A欧牲交aⅴ久久| 四虎影视久久久免费观看| 久久综合综合久久97色| 亚洲香蕉网久久综合影视| 久久精品一区二区影院| 99久久国产热无码精品免费| 国产99久久久国产精品小说| 国产69精品久久久久9999| 久久狠狠高潮亚洲精品| 日韩久久久久久中文人妻| 久久精品卫校国产小美女| 久久天天躁狠狠躁夜夜2020老熟妇| 久久精品国产69国产精品亚洲| 亚洲中文字幕无码久久综合网| 伊人色综合九久久天天蜜桃| 国产成人综合久久精品尤物| 色综合久久综精品| 一本大道加勒比久久综合| 久久综合狠狠综合久久激情 | 久久777国产线看观看精品| 久久久久国产精品熟女影院| 久久99精品久久只有精品| 精品无码久久久久久午夜| 午夜欧美精品久久久久久久| 午夜天堂精品久久久久| 精品久久久久香蕉网| 亚洲狠狠久久综合一区77777| 精品国产一区二区三区久久蜜臀| 国产AV影片久久久久久|