• <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 閱讀(393) 評論(0)  編輯 收藏 引用
            日本免费久久久久久久网站| 久久A级毛片免费观看| 丁香久久婷婷国产午夜视频| 国产午夜电影久久| 久久精品免费大片国产大片| 亚洲精品久久久www| 亚洲成色WWW久久网站| 国产成人精品久久| 久久人人爽人人爽人人片AV高清 | 日本精品久久久久中文字幕8| 久久AⅤ人妻少妇嫩草影院| 国内精品久久久久影院薰衣草| 国产精品久久久久久搜索| 久久频这里精品99香蕉久| 国产精品久久久久影视不卡| 欧美精品丝袜久久久中文字幕 | 人妻精品久久无码区| 久久精品国产99久久久香蕉 | 99久久www免费人成精品 | 久久国产精品无码网站| 亚洲国产精品久久电影欧美| 久久精品国产WWW456C0M| 精品久久久久久中文字幕| 久久久久亚洲精品日久生情| 久久久久久狠狠丁香| 精品国际久久久久999波多野| 国产精品99久久久久久宅男小说 | 国产精品久久久久久久久软件| 伊人色综合久久| 99精品国产在热久久| 欧美va久久久噜噜噜久久| 久久香综合精品久久伊人| 亚洲精品乱码久久久久久蜜桃| 国产午夜电影久久| 狠狠综合久久综合中文88| 婷婷综合久久中文字幕| 99久久精品免费看国产| 99精品伊人久久久大香线蕉| 国产日韩欧美久久| 人妻无码久久精品| 久久综合九色综合网站|