亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bkldrvapi.cpp

?? 6410BSP3
?? CPP
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
//
//------------------------------------------------------------------------------
//
//  File: bkldrvapi.c
//
//  Backlight driver source code
//
#include <windows.h>
#include <pm.h>
#include <devload.h>
#include "BKLPDD.h"
#include "bkli.h"


static VOID FreeContext(BKL_MDD_INFO *pBKLinfo)
{
    if(pBKLinfo)
    {
        if(pBKLinfo->hBklThread)
        {
            // Thread has begun - wait for it to finish
            pBKLinfo->fExit = TRUE;
            SetEvent(pBKLinfo->hExitEvent);
            WaitForSingleObject(pBKLinfo->hBklThread, INFINITE);
            CloseHandle(pBKLinfo->hBklThread);
        }
        
        if(pBKLinfo->hExitEvent)
        {
            CloseHandle(pBKLinfo->hExitEvent);
        }
        
        if(pBKLinfo->dwPddContext)
        {
            BacklightDeInit(pBKLinfo->dwPddContext);
        }

        if (pBKLinfo->hCoreDll) 
        {
            FreeLibrary(pBKLinfo->hCoreDll);
        }
            

        LocalFree(pBKLinfo);
    }
}


/* 
    pContext [in]: Pointer to a string containing the registry path to the active key 
    for the stream interface driver

    lpvBusContext [in]: Potentially process-mapped pointer passed as the fourth parameter to ActivateDeviceEx. 
    If this driver was loaded through legacy mechanisms, then lpvBusContext is zero.    
*/
extern "C" DWORD BKL_Init(
  LPCTSTR pContext, 
  LPCVOID lpvBusContext
)
{   
    DWORD context = 0;
    HANDLE hBklThread = NULL;
    DWORD dwStatus, dwSize, dwType;
    HKEY hkDevice = NULL;
    BKL_MDD_INFO *pBKLinfo = NULL;
    
    DEBUGMSG(ZONE_BACKLIGHT, (TEXT("+BKL_Init() context %s.\r\n"), pContext));


    // Allocate enough storage for this instance of our backlight
    pBKLinfo = (BKL_MDD_INFO *)LocalAlloc(LPTR, sizeof(BKL_MDD_INFO));
    if (pBKLinfo == NULL)
    {
        RETAILMSG(ZONE_ERROR, (L"ERROR: BKL_Init: "
            L"Failed allocate BKL_MDD_INFO device structure\r\n" ));
        goto error;
    }


    // get device name from registry
    dwStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, pContext, 0, 0, &hkDevice);
    if(dwStatus != ERROR_SUCCESS) 
    {
        RETAILMSG(ZONE_ERROR, (TEXT("BLK_Init: OpenDeviceKey failed with %u\r\n"), dwStatus));
        goto error;
    }
    dwSize = sizeof(pBKLinfo->szName);
    dwStatus = RegQueryValueEx(hkDevice, DEVLOAD_DEVNAME_VALNAME, NULL, &dwType, (LPBYTE)pBKLinfo->szName, &dwSize);
    if(dwStatus != ERROR_SUCCESS)
    {
        RETAILMSG(ZONE_ERROR, (TEXT("BLK_Init: RegQueryValueEx failed with %u\r\n"), dwStatus));
        goto error;

    }
    RegCloseKey(hkDevice);
    hkDevice = NULL;


    // create exit event to be set by deinit:
    pBKLinfo->hExitEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    if(NULL == pBKLinfo->hExitEvent)
    {
        RETAILMSG(ZONE_ERROR, (TEXT("BLK_Init: OpenDeviceKey failed with %u\r\n"), dwStatus));
        goto error;
    }

    pBKLinfo->hCoreDll = LoadLibrary(TEXT("coredll.dll"));
    if (NULL != pBKLinfo->hCoreDll) {
        pBKLinfo->pfnGetSystemPowerStatusEx2 = (PFN_GetSystemPowerStatusEx2)
            GetProcAddress(pBKLinfo->hCoreDll, TEXT("GetSystemPowerStatusEx2"));
        if (!pBKLinfo->pfnGetSystemPowerStatusEx2) {
            DEBUGMSG(ZONE_WARN,  (TEXT("GetProcAddress failed for GetSystemPowerStatusEx2. Assuming always on AC power.\r\n")));
        }
    }

    pBKLinfo->dwPddContext = BacklightInit(pContext, lpvBusContext, &(pBKLinfo->dwCurState));

    // if there are no user settings for this, we act as if they are selected:
    pBKLinfo->fBatteryTapOn = TRUE;
    pBKLinfo->fExternalTapOn = TRUE;

    // in case there is no setting for this:
    pBKLinfo->dwBattTimeout = 0;
    pBKLinfo->dwACTimeout = 0;

    //create thread to wait for reg / power source changes:
    pBKLinfo->hBklThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)fnBackLightThread, pBKLinfo, 0, NULL);
    if(NULL == pBKLinfo->hBklThread)
    {
        RETAILMSG(ZONE_ERROR, (TEXT("BLK_Init: OpenDeviceKey failed with %u\r\n"), dwStatus));
        goto error;
    }

    DEBUGMSG(ZONE_BACKLIGHT, (TEXT("-BKL_Init().\r\n")));

    return (DWORD) pBKLinfo;

error:
    if(hkDevice)
    {
        RegCloseKey(hkDevice);
    }

    FreeContext(pBKLinfo);    

    return 0;

}

//------------------------------------------------------------------------------

extern "C" BOOL BKL_Deinit(DWORD dwContext)
{
    BKL_MDD_INFO *pBKLinfo = NULL;
    DEBUGMSG(ZONE_BACKLIGHT, (TEXT("BKL_Deinit().\r\n")));

    // Verify our context
    if(! dwContext)
    {
        RETAILMSG(ZONE_ERROR, (L"ERROR: BKL_Deinit: "
            L"Incorrect context paramer\r\n" ));

        return FALSE;
    }

    pBKLinfo = (BKL_MDD_INFO *) dwContext;

    FreeContext(pBKLinfo);
    
    return TRUE;
}

//------------------------------------------------------------------------------

extern "C" DWORD BKL_Open(DWORD dwClientContext, DWORD dwAccess, DWORD dwShareMode)
{
    DEBUGMSG(ZONE_BACKLIGHT, (TEXT("BKL_Open().\r\n")));
    return dwClientContext;
}

//------------------------------------------------------------------------------

extern "C" BOOL BKL_Close(DWORD dwOpenContext)
{
    DEBUGMSG(ZONE_BACKLIGHT, (TEXT("BKL_Close().\r\n")));
    return (dwOpenContext != 0);
}

//------------------------------------------------------------------------------

extern "C" void BKL_PowerUp(DWORD dwOpenContext)
{
    DEBUGMSG(ZONE_BACKLIGHT, (TEXT("BKL_PowerUp().\r\n")));
    return;
}

//------------------------------------------------------------------------------

extern "C" void BKL_PowerDown(DWORD dwOpenContext)
{
    DEBUGMSG(ZONE_BACKLIGHT, (TEXT("BKL_PowerDown().\r\n")));
    return;
}
//------------------------------------------------------------------------------

extern "C" BOOL BKL_IOControl(DWORD dwOpenContext, DWORD dwIoControlCode, LPBYTE lpInBuf, 
                   DWORD nInBufSize, LPBYTE lpOutBuf, DWORD nOutBufSize, 
                   LPDWORD lpBytesReturned)
{
    DWORD dwErr = ERROR_INVALID_PARAMETER;
    BKL_MDD_INFO *pBKLinfo = NULL;
    
    DEBUGMSG(ZONE_BACKLIGHT,(TEXT("BKL_IOControl IOCTL code = %d\r\n"), dwIoControlCode));

    //if caller is not kernel mode, do not allow setting power state
    if (GetDirectCallerProcessId() != GetCurrentProcessId()){
        return ERROR_ACCESS_DENIED;
    }

    // Verify context
    if(! dwOpenContext)
    {
        RETAILMSG(ZONE_ERROR, (L"ERROR: BKL_IoControl: "
            L"Incorrect context paramer\r\n" ));

        return FALSE;
    }

    pBKLinfo = (BKL_MDD_INFO *) dwOpenContext;

    switch (dwIoControlCode) 
    {
        case IOCTL_POWER_CAPABILITIES:  
            DEBUGMSG(ZONE_BACKLIGHT, (TEXT("BKL: IOCTL_POWER_CAPABILITIES\r\n")));
            if (lpOutBuf && nOutBufSize >= sizeof (POWER_CAPABILITIES) && lpBytesReturned) 
            {
                __try 
                {
                    PPOWER_CAPABILITIES PowerCaps = (PPOWER_CAPABILITIES)lpOutBuf;

                    memset(PowerCaps, 0, sizeof(*PowerCaps));
                    PowerCaps->DeviceDx = BacklightGetSupportedStates();
                    *lpBytesReturned = sizeof(*PowerCaps);

                    pBKLinfo->ucSupportedStatesMask = PowerCaps->DeviceDx;

                    ASSERT(pBKLinfo->ucSupportedStatesMask < 0x20);
                    
                    dwErr = ERROR_SUCCESS;
                }
                __except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
                        EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
                {
                    DEBUGMSG(ZONE_BACKLIGHT, (TEXT("exception in ioctl\r\n")));
                }
            }

            break;

        case IOCTL_POWER_QUERY: // determines whether changing power state is feasible
                DEBUGMSG(ZONE_BACKLIGHT,(TEXT("BKL: Received IOCTL_POWER_QUERY\r\n")));
                if (lpOutBuf && nOutBufSize >= sizeof(CEDEVICE_POWER_STATE)) 
                {
                    // Return a good status on any valid query, since we are always ready to
                    // change power states (if asked for state we don't support, we move to next highest, eg D3->D4).
                    __try 
                    {
                        CEDEVICE_POWER_STATE ReqDx = *(PCEDEVICE_POWER_STATE)lpOutBuf;

                        if (VALID_DX(ReqDx)) 
                        {
                            // This is a valid Dx state so return a good status.
                            dwErr = ERROR_SUCCESS;
                        }

                        DEBUGMSG(ZONE_BACKLIGHT, (TEXT("BKL: IOCTL_POWER_QUERY %s\r\n"), dwErr == ERROR_SUCCESS ? (TEXT("succeeded")) : (TEXT("failed")) ));
                    }
                    __except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
                            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
                    {
                        DEBUGMSG(ZONE_BACKLIGHT, (TEXT("Exception in ioctl\r\n")));
                    }
                }
                break;

            break;

        case IOCTL_POWER_SET: // requests a change from one device power state to another
                DEBUGMSG(ZONE_BACKLIGHT,(TEXT("BKL: Received IOCTL_POWER_SET\r\n")));
                if (lpOutBuf && nOutBufSize >= sizeof(CEDEVICE_POWER_STATE)) 
                {
                    __try 
                    {
                        CEDEVICE_POWER_STATE ReqDx = *(PCEDEVICE_POWER_STATE)lpOutBuf;

                        DEBUGMSG(ZONE_BACKLIGHT, (TEXT("IOCTL_POWER_SET request to D%u \r\n"), ReqDx));
                        if (VALID_DX(ReqDx)) 
                        {
                            CEDEVICE_POWER_STATE SupportedDx = ReqDx;
                            
                            // figure out which state to ask driver to go to:
                            if(GetBestSupportedState(pBKLinfo, ReqDx, &SupportedDx))
                            {       
                                BOOL fRet;
                                
                                fRet = BackLightSetState(pBKLinfo->dwPddContext, SupportedDx);

                                // above should always succeed
                                ASSERT(fRet);
                                pBKLinfo->dwCurState=SupportedDx;
                                
                                // tell pm which state we went to:
                                *(PCEDEVICE_POWER_STATE) lpOutBuf = SupportedDx;
                                *lpBytesReturned = sizeof(CEDEVICE_POWER_STATE);

                                dwErr = ERROR_SUCCESS;
                                DEBUGMSG(ZONE_BACKLIGHT, (TEXT("IOCTL_POWER_SET to D%u \r\n"), ReqDx));
                                
                            }
                            else
                            {
                                DEBUGMSG(ZONE_BACKLIGHT, (TEXT("Unsupported state request D%u\r\n"), ReqDx));
                            }
                        }
                        else 
                        {
                            DEBUGMSG(ZONE_BACKLIGHT, (TEXT("Invalid state request D%u\r\n"), ReqDx));
                        }
                    }
                    __except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
                            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
                    {
                        DEBUGMSG(ZONE_BACKLIGHT, (TEXT("Exception in ioctl\r\n")));
                    }
                }
                break;

        case IOCTL_POWER_GET: // gets the current device power state
               DEBUGMSG(ZONE_BACKLIGHT,(TEXT("BKL: Received IOCTL_POWER_GET\r\n")));
                if (lpOutBuf != NULL && nOutBufSize >= sizeof(CEDEVICE_POWER_STATE)) 
                {
                    __try 
                    {
                        CEDEVICE_POWER_STATE   CurrentDx;   

                        CurrentDx = pBKLinfo->dwCurState; 
                        *(PCEDEVICE_POWER_STATE)lpOutBuf = CurrentDx;  

                        dwErr = ERROR_SUCCESS;

                        DEBUGMSG(ZONE_BACKLIGHT, (TEXT("IOCTL_POWER_GET: passing back %u\r\n"), CurrentDx));  
                    }
                    __except(GetExceptionCode()==STATUS_ACCESS_VIOLATION ?
                            EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
                    {
                        DEBUGMSG(ZONE_BACKLIGHT, (TEXT("Exception in ioctl\r\n")));
                    }
                }

            break;
        
        default:     
            dwErr = BacklightIOControl(pBKLinfo->dwPddContext, dwIoControlCode, lpInBuf, 
                               nInBufSize, lpOutBuf, nOutBufSize, 
                               lpBytesReturned);
            DEBUGMSG(ZONE_BACKLIGHT,(TEXT("%s: Unsupported IOCTL code %u\r\n"), dwIoControlCode));
            break;
    }

    SetLastError(dwErr);
    if(dwErr != ERROR_SUCCESS) 
    {
        return FALSE;
    } 
    else 
    {
       return TRUE;
    }

}


//------------------------------------------------------------------------------

BOOL WINAPI DllMain(HANDLE hinstDll, ULONG Reason, LPVOID Reserved)
{
    switch(Reason) {
    case DLL_PROCESS_ATTACH:
        DEBUGREGISTER((HMODULE)hinstDll);
        DEBUGMSG(ZONE_BACKLIGHT, (TEXT("DllMain(): dll attach.\r\n")));
        // don't need thread attach/detach messages
        DisableThreadLibraryCalls ((HMODULE)hinstDll);    
        break;
        
    case DLL_PROCESS_DETACH:
        DEBUGMSG(ZONE_BACKLIGHT, (TEXT("DllMain(): dll detach.\r\n")));
        break;
    }
    return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲最新在线观看| 北条麻妃国产九九精品视频| 韩国欧美国产一区| 色狠狠色狠狠综合| 国产午夜精品一区二区三区四区| 亚洲午夜久久久久久久久久久 | 欧美tk丨vk视频| 亚洲欧美日韩电影| 国产黄人亚洲片| 日韩一区二区高清| 日韩中文字幕91| 欧美自拍偷拍一区| 亚洲精品欧美激情| 国产99久久久精品| 久久天天做天天爱综合色| 日韩电影免费一区| 欧美日韩一区中文字幕| 亚洲人成网站影音先锋播放| 丁香桃色午夜亚洲一区二区三区| 日韩一区二区在线播放| 午夜亚洲国产au精品一区二区| 色综合久久综合网欧美综合网| 中文字幕不卡在线| 国产 欧美在线| 久久夜色精品一区| 国产精一区二区三区| 日韩欧美国产一区二区在线播放| 日韩和的一区二区| 91精品国产综合久久精品app | 欧美性受xxxx| 夜夜精品视频一区二区 | 日韩欧美www| 狠狠色狠狠色综合日日91app| 日韩久久久久久| 麻豆91精品91久久久的内涵| 欧美成人伊人久久综合网| 久久精品国产在热久久| 日韩久久精品一区| 国产精选一区二区三区| 久久久99久久| 成人激情午夜影院| 亚洲精品国产a| 欧美精品久久久久久久多人混战| 日韩不卡一区二区| 精品欧美一区二区三区精品久久| 美女网站色91| 日本一区二区免费在线| 99久久久精品| 香蕉加勒比综合久久| 日韩一区二区电影| 国产福利91精品| 亚洲品质自拍视频| 在线播放中文一区| 国产经典欧美精品| 亚洲女同女同女同女同女同69| 欧美性高清videossexo| 久久精品国产亚洲aⅴ| 久久精品夜色噜噜亚洲a∨| 不卡影院免费观看| 午夜久久久影院| 精品国产乱码久久久久久久| av在线播放成人| 首页亚洲欧美制服丝腿| 久久免费看少妇高潮| 日本久久一区二区三区| 日本成人中文字幕| 国产精品二区一区二区aⅴ污介绍| 欧美午夜理伦三级在线观看| 捆绑紧缚一区二区三区视频| 综合在线观看色| 日韩精品一区二区三区视频| 99久久精品免费观看| 免费精品视频在线| 亚洲日韩欧美一区二区在线| 精品国产伦一区二区三区观看方式| 99精品久久只有精品| 蜜臀va亚洲va欧美va天堂| 国产精品久久免费看| 欧美成人一区二区三区| 欧美亚洲自拍偷拍| 成人手机电影网| 久久99精品久久久| 亚洲欧美电影一区二区| 国产性色一区二区| 91精品国产色综合久久不卡电影| www.爱久久.com| 国模冰冰炮一区二区| 偷拍日韩校园综合在线| 中文字幕一区二区三区在线播放 | 高清成人免费视频| 男女性色大片免费观看一区二区| 亚洲欧美日韩国产综合| 日本一区二区不卡视频| 日韩亚洲欧美综合| 欧美午夜理伦三级在线观看| 成人污污视频在线观看| 国产一区二区91| 美女爽到高潮91| 日韩在线一区二区三区| 亚洲国产va精品久久久不卡综合| 中文字幕日本不卡| 中文字幕av一区二区三区免费看| 欧美sm美女调教| 日韩视频免费观看高清在线视频| 欧美精品v国产精品v日韩精品 | 成人av在线网站| 丰满少妇在线播放bd日韩电影| 国产一区二区三区视频在线播放| 99久久伊人网影院| 黄色小说综合网站| 精品一区二区三区免费播放| 另类人妖一区二区av| 日本少妇一区二区| 另类小说视频一区二区| 久久国产尿小便嘘嘘尿| 久久国产精品免费| 国产麻豆精品theporn| 国产精品18久久久久久vr| 国产91高潮流白浆在线麻豆| 成人网页在线观看| 91免费国产视频网站| 在线精品观看国产| 7777精品伊人久久久大香线蕉经典版下载 | 午夜欧美在线一二页| 五月婷婷另类国产| 麻豆精品在线视频| 国产一区啦啦啦在线观看| 精品亚洲欧美一区| 国产成人精品免费看| 91视频免费看| 欧美三级电影在线看| 欧美一二区视频| 国产喂奶挤奶一区二区三区| 国产精品不卡在线| 亚洲精品大片www| 视频在线观看一区二区三区| 美女视频黄 久久| 成人一区二区三区在线观看| 91官网在线免费观看| 欧美一级爆毛片| 国产精品色在线观看| 亚洲成人精品一区二区| 九九精品一区二区| av电影在线不卡| 这里只有精品免费| 国产欧美精品一区二区色综合| 夜色激情一区二区| 国产真实乱对白精彩久久| 9i看片成人免费高清| 91精品国产综合久久精品| 国产精品无遮挡| 日韩精品久久理论片| 国产99精品在线观看| 精品婷婷伊人一区三区三| 久久综合九色综合欧美98| 亚洲美女偷拍久久| 国内精品免费**视频| 在线看国产日韩| 国产欧美日韩精品一区| 日韩av一区二| 色欧美片视频在线观看| 欧美不卡视频一区| 亚洲综合一区在线| 国产suv精品一区二区6| 欧美日韩电影一区| 亚洲少妇30p| 国产成人在线免费观看| 欧美日韩一区中文字幕| 国产精品第五页| 国产成人亚洲综合a∨婷婷图片| 欧美另类videos死尸| 亚洲激情中文1区| 99麻豆久久久国产精品免费 | 国产乱色国产精品免费视频| 欧美日免费三级在线| 国产精品久久国产精麻豆99网站| 日本欧美一区二区在线观看| 色呦呦一区二区三区| 国产精品久久久久久久久久久免费看 | 久久精品国产77777蜜臀| 色偷偷88欧美精品久久久| 久久精品欧美日韩精品| 久久99国产精品免费| 91精品国产免费久久综合| 亚洲综合色婷婷| 色综合一区二区三区| 国产精品福利av| 不卡的电影网站| 国产精品久久久久一区| 丁香五精品蜜臀久久久久99网站 | 一区二区三区欧美| 成人av在线播放网址| 国产精品欧美久久久久一区二区 | 精品一区二区三区视频| 宅男噜噜噜66一区二区66| 天天做天天摸天天爽国产一区 | 国产一区二区三区美女| 精品国产污网站| 国产精品99久久久| 国产色婷婷亚洲99精品小说|