• <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 個函數,
            RegisterDriver      注冊驅動到注冊表.
            UnregisterDriver   從注冊表注銷驅動.
            RunDriver            運行驅動.
            StopDriver           停止驅動的運行.
            ControlDriver       向正在運行的驅動發送 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 閱讀(398) 評論(0)  編輯 收藏 引用
            欧美黑人激情性久久| 国产免费久久精品丫丫| 久久精品免费全国观看国产| 青青草国产精品久久久久| 久久99国产乱子伦精品免费| 午夜精品久久久久久毛片| 久久久久久久97| 亚洲精品无码久久久久sm| 99久久99久久精品国产片果冻 | 久久久黄色大片| 要久久爱在线免费观看| 久久这里的只有是精品23| 影音先锋女人AV鲁色资源网久久| 亚洲国产另类久久久精品| 人妻精品久久无码专区精东影业| 久久91综合国产91久久精品| 免费观看久久精彩视频| 国产免费久久精品99久久| 欧美亚洲国产精品久久久久| 亚洲精品乱码久久久久久| 久久91精品国产91久久麻豆| 久久久久99精品成人片| 久久精品无码一区二区WWW| 精品久久人妻av中文字幕| 99久久国产主播综合精品| 久久夜色撩人精品国产小说| 久久久亚洲AV波多野结衣| 91久久精品无码一区二区毛片| 久久久久九九精品影院| 久久无码人妻一区二区三区午夜 | 久久久黄片| 久久99国产乱子伦精品免费| 欧美午夜精品久久久久久浪潮| 漂亮人妻被黑人久久精品| 精品久久久久久无码中文野结衣| 精品国产日韩久久亚洲| 国产精品免费看久久久香蕉| 97精品依人久久久大香线蕉97| 93精91精品国产综合久久香蕉| 一本久久a久久精品亚洲| 国产精品日韩深夜福利久久|