• <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  評(píng)論-262  文章-1  trackbacks-0
            一共 6 個(gè)函數(shù),
            RegisterDriver      注冊(cè)驅(qū)動(dòng)到注冊(cè)表.
            UnregisterDriver   從注冊(cè)表注銷(xiāo)驅(qū)動(dòng).
            RunDriver            運(yùn)行驅(qū)動(dòng).
            StopDriver           停止驅(qū)動(dòng)的運(yùn)行.
            ControlDriver       向正在運(yùn)行的驅(qū)動(dòng)發(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 閱讀(393) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            国产91色综合久久免费分享| 人人狠狠综合久久亚洲婷婷| 久久亚洲AV永久无码精品| 精品久久综合1区2区3区激情| 精品99久久aaa一级毛片| 亚洲欧美另类日本久久国产真实乱对白 | 久久久中文字幕日本| 一本一本久久a久久综合精品蜜桃| 久久久久国产精品嫩草影院| 国产精品岛国久久久久| 久久性生大片免费观看性| 东京热TOKYO综合久久精品| 久久久久久久亚洲精品| 久久精品国产99久久久| 久久免费国产精品| 国产精品99精品久久免费| 久久亚洲国产成人影院| 97久久国产露脸精品国产| 国产香蕉97碰碰久久人人| 国产成人精品综合久久久久| 亚洲成色999久久网站| 久久99久久99精品免视看动漫| 国产精品久久久99| 久久精品天天中文字幕人妻 | Xx性欧美肥妇精品久久久久久| 日韩va亚洲va欧美va久久| 四虎国产精品免费久久久| 99久久国语露脸精品国产| 亚洲精品高清国产一线久久| 日韩美女18网站久久精品| 99久久国产综合精品五月天喷水| 精品久久久久中文字幕日本| 欧美日韩中文字幕久久久不卡| 亚洲天堂久久精品| 色综合久久天天综合| 97精品国产97久久久久久免费| 777米奇久久最新地址| 国内精品久久久久影院免费| 精品乱码久久久久久久| 久久国产色AV免费看| 久久久久国产精品熟女影院|