• <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 個函數(shù),
            RegisterDriver      注冊驅(qū)動到注冊表.
            UnregisterDriver   從注冊表注銷驅(qū)動.
            RunDriver            運行驅(qū)動.
            StopDriver           停止驅(qū)動的運行.
            ControlDriver       向正在運行的驅(qū)動發(fā)送 I/O Control 控制碼.
            GetLastErrorDescription   取得上述 5 個操作時遭遇到的錯誤, 只能取得最近的那個錯誤

            以下是源代碼

            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 閱讀(390) 評論(0)  編輯 收藏 引用
            韩国免费A级毛片久久| 狠狠色丁香久久婷婷综合图片| 久久亚洲精品中文字幕| 精品久久久久久成人AV| 精品国产乱码久久久久久浪潮| 日韩十八禁一区二区久久| 久久国产精品成人影院| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久久黄色大片| 久久精品中文无码资源站 | 99久久精品国产麻豆| 精品久久久久久无码人妻热| 国产A级毛片久久久精品毛片| 久久99精品国产| 久久香综合精品久久伊人| 久久精品国产免费一区| 久久人人爽人人爽人人爽 | 亚洲欧美一区二区三区久久| 久久综合狠狠综合久久综合88| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久天天躁狠狠躁夜夜2020| 国产精品久久久久久福利漫画| 久久久国产视频| 久久精品无码专区免费| 久久精品国产亚洲麻豆| 久久亚洲精品无码AV红樱桃| 久久久久亚洲AV无码观看| 国产日韩欧美久久| 久久久久久久99精品免费观看| 日韩人妻无码一区二区三区久久| 午夜视频久久久久一区 | 色诱久久av| 久久精品成人欧美大片| 久久被窝电影亚洲爽爽爽| 精品国产VA久久久久久久冰| 亚洲国产另类久久久精品小说 | 久久国产精品国产自线拍免费| 中文无码久久精品| 77777亚洲午夜久久多人| 久久久国产99久久国产一| 2021国内久久精品|