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

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

?? system.c

?? Latest USB 802.3, HID printer and mass storage divers from Microsoft for Platform Builder 4.2.
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:  
    system.c
    
Abstract:  
    Device dependant part of the USB Universal Host Controller Driver (UHCD).

Notes: 
--*/
#include <windows.h>
#include <nkintr.h>
#include <ceddk.h>
#include <devload.h>
#include <giisr.h>
#include <uhcdddsi.h>


// Amount of memory to use for HCD buffer
static const DWORD gcTotalAvailablePhysicalMemory = 65536; // 64K
static const DWORD gcHighPriorityPhysicalMemory = 0x4000; // 16K

static HANDLE g_IsrHandle = NULL;

typedef struct _SUhcdPdd
{
    LPVOID lpvMemoryObject;
    LPVOID lpvUhcdMddObject;
    PVOID pvVirtualAddress;                        // DMA buffers as seen by the CPU
    PHYSICAL_ADDRESS LogicalAddress;        // DMA buffers as seen by the DMA controller and bus interfaces
    DMA_ADAPTER_OBJECT AdapterObject;
    TCHAR szDriverRegKey[MAX_PATH];
    PUCHAR ioPortBase;
    DWORD dwSysIntr;
    CRITICAL_SECTION csPdd;                     // serializes access to the PDD object
} SUhcdPdd;

#define UnusedParameter(x)  x = x

/* HcdPdd_DllMain
 * 
 *  DLL Entry point.
 *
 * Return Value:
 */
extern BOOL HcdPdd_DllMain(HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved)
{
    UnusedParameter(hinstDLL);
    UnusedParameter(dwReason);
    UnusedParameter(lpvReserved);

    return TRUE;
}


/* GetRegistryConfig
 *  
 *   Note: Will need to be changed to support multiple instances.
 *
 * Return Value:
 *   TRUE for success, FALSE for error
 */
static BOOL
GetRegistryConfig(
    LPCWSTR RegKeyPath,         // IN - driver registry key path
    DWORD * lpdwBaseAddr,       // OUT - base address
    DWORD * lpdwAddrLen,        // OUT - address range
    DWORD * lpdwIOSpace,        // OUT - 1 if base address describes I/O port, 0 otherwise
    DWORD * lpdwSysIntr,        // OUT - system interrupt number
    PINTERFACE_TYPE lpIfcType,  // OUT - interface type (PCIbus, ISAbus, etc)
    DWORD * lpdwBusNumber,      // OUT - bus number, depends on interface type
    BOOL * bInstallIsr,         // OUT - TRUE if ISR Handler found in registry
    LPWSTR IsrDll,              // OUT - Name of ISR Handler dll
    LPWSTR IsrHandler,          // OUT - Name of ISR Handler routine
    DWORD * Irq                 // OUT - IRQ number, used to hook ISR handler
    )
{
    HKEY hKey;
    DWORD dwData;
    DWORD dwSize;
    DWORD dwType;
    BOOL  fRet=FALSE;
    DWORD dwRet;

    const USHORT cDefaultUhcdPortRange = 0x20;
    const ULONG cHTBAMemorySpace = 0;
    const ULONG cHTBAIOSpace = 1;
    
    // Open key
    dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegKeyPath,0,0,&hKey);
    if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR,(TEXT("!UHCD:GetRegistryConfig RegOpenKeyEx(%s) failed %d\r\n"),
                             RegKeyPath, dwRet));
        return FALSE;
    }

    // Read base address, range from registry and determine IOSpace
    dwSize = sizeof(dwData);
    dwRet = RegQueryValueEx(hKey, DEVLOAD_MEMBASE_VALNAME, 0, &dwType, (PUCHAR)&dwData, &dwSize);
    if (dwRet == ERROR_SUCCESS) {
        *lpdwIOSpace = cHTBAMemorySpace;
        *lpdwBaseAddr = dwData;
        
        dwRet = RegQueryValueEx(hKey, DEVLOAD_MEMLEN_VALNAME, 0, &dwType, (PUCHAR)&dwData, &dwSize);

        if (dwRet == ERROR_SUCCESS) {
            *lpdwAddrLen = dwData;
        } else {
            *lpdwAddrLen = cDefaultUhcdPortRange;
        }
    } else {
        dwRet = RegQueryValueEx(hKey,DEVLOAD_IOBASE_VALNAME,0,&dwType,(PUCHAR)&dwData,&dwSize);
        
        if (dwRet != ERROR_SUCCESS) {
            DEBUGMSG(ZONE_ERROR, (TEXT("!UHCD:GetRegistryConfig Neither %s nor %s were found.\r\n"),
                              DEVLOAD_MEMBASE_VALNAME, DEVLOAD_IOBASE_VALNAME, dwRet));
            goto GetRegistryConfig_exit;
        }

        *lpdwIOSpace = cHTBAIOSpace;
        *lpdwBaseAddr = dwData;

        dwRet = RegQueryValueEx(hKey,DEVLOAD_IOLEN_VALNAME,0,&dwType,(PUCHAR)&dwData,&dwSize);
        
        if (dwRet == ERROR_SUCCESS) {
            *lpdwAddrLen = dwData;
        } else {
            *lpdwAddrLen = cDefaultUhcdPortRange;
        }  
    }
    

    // Read SysIntr from registry
    dwSize = sizeof(dwData);
    dwRet = RegQueryValueEx(hKey,DEVLOAD_SYSINTR_VALNAME,0,&dwType,(PUCHAR)&dwData,&dwSize);
    if (dwRet != ERROR_SUCCESS) {
        DEBUGMSG(ZONE_ERROR, (TEXT("!UHCD:GetRegistryConfig RegQueryValueEx(%s) failed %d\r\n"),
                              DEVLOAD_SYSINTR_VALNAME, dwRet));
        goto GetRegistryConfig_exit;
    }
    *lpdwSysIntr = dwData;

    // Read interface type from registry
    dwSize = sizeof(dwData);
    dwRet = RegQueryValueEx(hKey,DEVLOAD_IFCTYPE_VALNAME,0,&dwType,(PUCHAR)&dwData,&dwSize);
    if (dwRet != ERROR_SUCCESS) {
        // Default value is PCIBus
        *lpIfcType = PCIBus;
    } else {
        *lpIfcType = dwData;
    }

    // Read bus number from registry
    dwSize = sizeof(dwData);
    dwRet = RegQueryValueEx(hKey,DEVLOAD_BUSNUMBER_VALNAME,0,&dwType,(PUCHAR)&dwData,&dwSize);
    if (dwRet != ERROR_SUCCESS) {
        // Default value is 0
        *lpdwBusNumber = 0;
    } else {
        *lpdwBusNumber = dwData;
    }

    // Read installable ISR dll name from registry, if it exists
    dwSize = DEVDLL_LEN * sizeof(WCHAR);
    dwRet = RegQueryValueEx(hKey, DEVLOAD_ISRDLL_VALNAME, 0, &dwType, (PUCHAR)IsrDll, &dwSize);
    if (dwRet == ERROR_SUCCESS) {
        // ISR dll name found, now look for ISR handler routine name
        dwSize = DEVENTRY_LEN * sizeof(WCHAR);
        dwRet = RegQueryValueEx(hKey, DEVLOAD_ISRHANDLER_VALNAME, 0, &dwType, (PUCHAR)IsrHandler, &dwSize);
        if (dwRet == ERROR_SUCCESS) {
            // ISR handler name found, now look for Irq
            dwSize = sizeof(dwData);
            dwRet = RegQueryValueEx(hKey, DEVLOAD_IRQ_VALNAME, 0, &dwType, (PUCHAR)&dwData, &dwSize);
            if (dwRet == ERROR_SUCCESS) {
                *Irq = dwData;
                *bInstallIsr = TRUE;
            } else {
                DEBUGMSG(ZONE_WARNING, (L"!UHCD: Registry values %s and %s found, but no corresponding value %s found\r\n",
                    DEVLOAD_ISRDLL_VALNAME, DEVLOAD_ISRHANDLER_VALNAME, DEVLOAD_IRQ_VALNAME));
            }
        } else {
            DEBUGMSG(ZONE_WARNING, (L"!UHCD: Registry value %s found, but no corresponding value %s found\r\n",
                DEVLOAD_ISRDLL_VALNAME, DEVLOAD_ISRHANDLER_VALNAME));
        }
    }
        
    fRet = TRUE;

GetRegistryConfig_exit:
    RegCloseKey(hKey);
    return fRet;
}   // GetRegistryConfig


/* ConfigureUHCICard
 * 
 */
BOOL
ConfigureUHCICard(
    PUCHAR *pioPortBase,   // IN - contains physical address of register base
                           // OUT- contains virtual address of register base
    DWORD dwAddrLen,
    DWORD dwIOSpace,
    INTERFACE_TYPE IfcType,
    DWORD dwBusNumber
    )
{
    ULONG               inIoSpace = dwIOSpace;
    ULONG               portBase;
    PHYSICAL_ADDRESS    ioPhysicalBase = {0, 0};
    
    portBase = (ULONG)*pioPortBase;
    ioPhysicalBase.LowPart = portBase;

    if (!TransBusAddrToVirtual(IfcType, dwBusNumber, ioPhysicalBase, dwAddrLen, &inIoSpace, (PPVOID)pioPortBase)) {
        DEBUGMSG(ZONE_ERROR, (L"UHCD: Failed TransBusAddrToVirtual\r\n"));
        return FALSE;
    }

    DEBUGMSG(ZONE_INIT, 
             (TEXT("UHCD: ioPhysicalBase 0x%X, IoSpace 0x%X\r\n"),
              ioPhysicalBase.LowPart, inIoSpace));
    DEBUGMSG(ZONE_INIT, 
             (TEXT("UHCD: ioPortBase 0x%X, portBase 0x%X\r\n"),
              *pioPortBase, portBase));

    return TRUE;
}


/* InitializeUHCI
 *
 *  Configure and initialize UHCI card
 *
 * Return Value:
 *  Return TRUE if card could be located and configured, otherwise FALSE
 */
static BOOL 
InitializeUHCI(
    SUhcdPdd * pPddObject,    // IN - Pointer to PDD structure
    LPCWSTR szDriverRegKey)   // IN - Pointer to active registry key string
{
    PUCHAR ioPortBase = NULL;
    DWORD dwAddrLen;
    DWORD dwIOSpace;
    DWORD dwSysIntr;
    INTERFACE_TYPE IfcType;
    DWORD dwBusNumber;
    BOOL InstallIsr = FALSE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品一区四区| 中文字幕日本不卡| 欧美福利视频一区| 欧美一区二区三区喷汁尤物| 久久蜜臀中文字幕| 一区二区三区四区视频精品免费| 亚洲va欧美va国产va天堂影院| 亚洲国产wwwccc36天堂| 一区二区三区中文在线| 色综合久久久久久久久久久| 蜜桃av一区二区在线观看| 狂野欧美性猛交blacked| 懂色中文一区二区在线播放| 欧美日韩国产123区| 中日韩av电影| 乱中年女人伦av一区二区| 日韩精品中文字幕一区二区三区 | 91麻豆国产自产在线观看| 777色狠狠一区二区三区| 亚洲婷婷在线视频| 成人一区二区三区在线观看| 日韩三级免费观看| 亚洲成人激情自拍| 日韩欧美一区中文| 成人av小说网| 国产视频在线观看一区二区三区| 成人18视频在线播放| 亚洲第一搞黄网站| 久久精品在线免费观看| 色噜噜狠狠成人网p站| 中文字幕亚洲综合久久菠萝蜜| 日本韩国视频一区二区| 美女视频黄久久| 中文字幕五月欧美| 日韩欧美一级片| 成人午夜电影久久影院| 同产精品九九九| 欧美蜜桃一区二区三区| 国产一区在线观看麻豆| 日韩欧美国产一二三区| 成人综合激情网| 日韩av不卡在线观看| 91精品国产综合久久小美女| 丁香婷婷综合激情五月色| 天天亚洲美女在线视频| 亚洲国产高清在线| 欧美高清性hdvideosex| 国产成人精品一区二| 国产精品麻豆视频| 欧美v亚洲v综合ⅴ国产v| 激情亚洲综合在线| 国产欧美日韩综合精品一区二区| 国产成人a级片| 日韩av网站在线观看| 亚洲日本成人在线观看| 久久久午夜电影| 欧美一区二区视频网站| 91免费视频网| 成人av片在线观看| 国产一区二区在线电影| 日韩av中文字幕一区二区三区| 伊人色综合久久天天人手人婷| 欧美日韩三级一区| 麻豆成人av在线| 婷婷综合五月天| 一区二区三区资源| 亚洲私人黄色宅男| 中文字幕高清一区| 国产亚洲欧美色| 精品国产精品网麻豆系列| voyeur盗摄精品| 亚洲妇熟xx妇色黄| 高清久久久久久| 黄色日韩网站视频| 美国欧美日韩国产在线播放| 日韩专区在线视频| 欧美国产精品v| 久久久久久久久一| 久久久精品影视| 久久蜜桃香蕉精品一区二区三区| 亚洲精品在线三区| 欧美精品一区二区三区视频 | 91精品欧美一区二区三区综合在| 在线影视一区二区三区| 色香蕉成人二区免费| 91视频一区二区| 色婷婷精品大在线视频 | 国产日韩欧美精品一区| 国产偷v国产偷v亚洲高清| 久久色在线视频| 91豆麻精品91久久久久久| 色偷偷久久一区二区三区| 色狠狠色噜噜噜综合网| 欧美性猛片xxxx免费看久爱| 国产成人亚洲综合色影视| 国产传媒欧美日韩成人| 成人av电影在线观看| 成a人片国产精品| 91麻豆国产自产在线观看| 欧美综合天天夜夜久久| 高清在线观看日韩| 99久久精品国产毛片| 精品系列免费在线观看| 天堂成人免费av电影一区| 蜜臀av一区二区在线观看| 国产美女主播视频一区| 91在线国产观看| 7799精品视频| 国产亚洲精品超碰| 亚洲欧美日韩中文字幕一区二区三区| 久久亚洲免费视频| ㊣最新国产の精品bt伙计久久| 亚洲免费观看在线视频| 日日嗨av一区二区三区四区| 国模套图日韩精品一区二区| 99久久精品免费看国产| 欧美日高清视频| 欧美一卡二卡三卡| 黄色资源网久久资源365| 豆国产96在线|亚洲| 欧洲视频一区二区| 久久一区二区视频| 一区二区三区在线视频免费| 精久久久久久久久久久| 99re热视频精品| 日韩美女视频在线| 亚洲精品va在线观看| 久久99蜜桃精品| 日本韩国精品在线| 久久综合九色综合欧美98| 一区二区在线观看不卡| 国产在线麻豆精品观看| 欧美在线观看一区| 日本一区二区三区高清不卡| 亚洲大型综合色站| 成人h动漫精品| 日韩欧美国产午夜精品| 亚洲一区中文日韩| 亚洲成人免费看| 福利视频网站一区二区三区| 555夜色666亚洲国产免| 亚洲私人黄色宅男| 国产盗摄女厕一区二区三区 | 国产麻豆日韩欧美久久| 欧美日韩中文另类| 国产精品一区免费在线观看| 国产真实乱对白精彩久久| 欧美在线观看视频一区二区 | 日韩无一区二区| 一区二区三区毛片| av综合在线播放| 欧美激情综合在线| 极品少妇xxxx精品少妇| 555www色欧美视频| 亚洲h精品动漫在线观看| 99久久久精品| 国产精品热久久久久夜色精品三区 | 国产传媒日韩欧美成人| 欧美一级在线视频| 天涯成人国产亚洲精品一区av| 色综合天天综合色综合av| 欧美在线免费播放| 伊人色综合久久天天| bt欧美亚洲午夜电影天堂| 国产欧美视频一区二区三区| 国产永久精品大片wwwapp| 日韩视频中午一区| 卡一卡二国产精品| 日韩欧美亚洲国产另类| 免费成人在线网站| 91无套直看片红桃| 成人免费在线视频| 成人一区二区三区视频| 中文字幕av免费专区久久| 国产成人精品亚洲日本在线桃色| 欧美不卡123| 国产一区二区在线免费观看| 精品成人私密视频| 国模一区二区三区白浆| 国产日韩精品久久久| 成人自拍视频在线| 亚洲欧洲一区二区在线播放| 99久久免费国产| 亚洲日本韩国一区| 欧美视频自拍偷拍| 亚洲成av人影院| 日韩视频一区二区三区在线播放| 秋霞av亚洲一区二区三| 日韩欧美一级在线播放| 国产一区二区三区国产| 中文字幕欧美国产| 日本精品免费观看高清观看| 午夜精品福利久久久| 日韩三级电影网址| 高清国产午夜精品久久久久久| 国产精品九色蝌蚪自拍| 国产一区二区三区久久久| 国产精品色哟哟| 欧美在线观看你懂的| 老司机精品视频在线|