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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? enum.c

?? usbview 為查看本機USB聯(lián)接查看代碼, 更改其中的部分可用于USB的通訊與應(yīng)用
?? C
?? 第 1 頁 / 共 4 頁
字號:
/*++

Copyright (c) 1997-1998 Microsoft Corporation

Module Name:

    ENUM.C

Abstract:

    This source file contains the routines which enumerate the USB bus
    and populate the TreeView control.

    The enumeration process goes like this:

    (1) Enumerate Host Controllers and Root Hubs
    Host controllers currently have symbolic link names of the form HCDx,
    where x starts at 0.  Use CreateFile() to open each host controller
    symbolic link.  Create a node in the TreeView to represent each host
    controller.

    After a host controller has been opened, send the host controller an
    IOCTL_USB_GET_ROOT_HUB_NAME request to get the symbolic link name of
    the root hub that is part of the host controller.

    (2) Enumerate Hubs (Root Hubs and External Hubs)
    Given the name of a hub, use CreateFile() to hub the hub.  Send the
    hub an IOCTL_USB_GET_NODE_INFORMATION request to get info about the
    hub, such as the number of downstream ports.  Create a node in the
    TreeView to represent each hub.

    (3) Enumerate Downstream Ports
    Given an handle to an open hub and the number of downstream ports on
    the hub, send the hub an IOCTL_USB_GET_NODE_CONNECTION_INFORMATION
    request for each downstream port of the hub to get info about the
    device (if any) attached to each port.  If there is a device attached
    to a port, send the hub an IOCTL_USB_GET_NODE_CONNECTION_NAME request
    to get the symbolic link name of the hub attached to the downstream
    port.  If there is a hub attached to the downstream port, recurse to
    step (2).  Create a node in the TreeView to represent each hub port
    and attached device.

Environment:

    user mode

Revision History:

    04-25-97 : created

--*/

//*****************************************************************************
// I N C L U D E S
//*****************************************************************************

#include <windows.h>
#include <basetyps.h>
#include <winioctl.h>
#include <string.h>

#include "usbview.h"

//*****************************************************************************
// D E F I N E S
//*****************************************************************************

#define NUM_HCS_TO_CHECK 10

//*****************************************************************************
// L O C A L    F U N C T I O N    P R O T O T Y P E S
//*****************************************************************************

VOID
EnumerateHub (
    HTREEITEM                           hTreeParent,
    PCHAR                               HubName,
    PUSB_NODE_CONNECTION_INFORMATION    ConnectionInfo,
    PUSB_DESCRIPTOR_REQUEST             ConfigDesc,
    PSTRING_DESCRIPTOR_NODE             StringDescs,
    PCHAR                               DeviceDesc
);

VOID
EnumerateHubPorts (
    HTREEITEM   hTreeParent,
    HANDLE      hHubDevice,
    ULONG       NumPorts
);

PCHAR GetRootHubName (
    HANDLE HostController
);

PCHAR GetExternalHubName (
    HANDLE  Hub,
    ULONG   ConnectionIndex
);

PCHAR GetHCDDriverKeyName (
    HANDLE  HCD
);

PCHAR GetDriverKeyName (
    HANDLE  Hub,
    ULONG   ConnectionIndex
);

PUSB_DESCRIPTOR_REQUEST
GetConfigDescriptor (
    HANDLE  hHubDevice,
    ULONG   ConnectionIndex,
    UCHAR   DescriptorIndex
);

BOOL
AreThereStringDescriptors (
    PUSB_DEVICE_DESCRIPTOR          DeviceDesc,
    PUSB_CONFIGURATION_DESCRIPTOR   ConfigDesc
);

PSTRING_DESCRIPTOR_NODE
GetAllStringDescriptors (
    HANDLE                          hHubDevice,
    ULONG                           ConnectionIndex,
    PUSB_DEVICE_DESCRIPTOR          DeviceDesc,
    PUSB_CONFIGURATION_DESCRIPTOR   ConfigDesc
);

PSTRING_DESCRIPTOR_NODE
GetStringDescriptor (
    HANDLE  hHubDevice,
    ULONG   ConnectionIndex,
    UCHAR   DescriptorIndex,
    USHORT  LanguageID
);

PSTRING_DESCRIPTOR_NODE
GetStringDescriptors (
    HANDLE  hHubDevice,
    ULONG   ConnectionIndex,
    UCHAR   DescriptorIndex,
    ULONG   NumLanguageIDs,
    USHORT  *LanguageIDs,
    PSTRING_DESCRIPTOR_NODE StringDescNodeTail
);

//*****************************************************************************
// G L O B A L S    P R I V A T E    T O    T H I S    F I L E
//*****************************************************************************

PCHAR ConnectionStatuses[] =
{
    "NoDeviceConnected",
    "DeviceConnected",
    "DeviceFailedEnumeration",
    "DeviceGeneralFailure",
    "DeviceCausedOvercurrent",
    "DeviceNotEnoughPower"
};

ULONG TotalDevicesConnected;


//*****************************************************************************
//
// EnumerateHostControllers()
//
// hTreeParent - Handle of the TreeView item under which host controllers
// should be added.
//
//*****************************************************************************

VOID
EnumerateHostControllers (
    HTREEITEM  hTreeParent,
    ULONG     *DevicesConnected
)
{
    char        HCName[16];
    int         HCNum;
    HANDLE      hHCDev;
    HTREEITEM   hHCItem;
    PCHAR       rootHubName;
    PCHAR       leafName;

    TotalDevicesConnected = 0;
    TotalHubs = 0;

    // Iterate over some Host Controller names and try to open them.
    //
    for (HCNum = 0; HCNum < NUM_HCS_TO_CHECK; HCNum++)
    {
        wsprintf(HCName, "\\\\.\\HCD%d", HCNum);

        hHCDev = CreateFile(HCName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);

        // If the handle is valid, then we've successfully opened a Host
        // Controller.  Display some info about the Host Controller itself,
        // then enumerate the Root Hub attached to the Host Controller.
        //
        if (hHCDev != INVALID_HANDLE_VALUE)
        {
            PCHAR driverKeyName, deviceDesc;

            driverKeyName = GetHCDDriverKeyName(hHCDev);

            leafName = HCName + sizeof("\\\\.\\") - sizeof("");

            if (driverKeyName)
            {
                deviceDesc = DriverNameToDeviceDesc(driverKeyName);

                if (deviceDesc)
                {
                    leafName = deviceDesc;
                }

                FREE(driverKeyName);
            }

            hHCItem = AddLeaf(hTreeParent,
                              0,
                              leafName
                             );

            if (hHCItem)
            {
                rootHubName = GetRootHubName(hHCDev);

                if (rootHubName != NULL)
                {
                    EnumerateHub(hHCItem,
                                 rootHubName,
                                 NULL,      // ConnectionInfo
                                 NULL,      // ConfigDesc
                                 NULL,      // StringDescs
                                 "RootHub"  // DeviceDesc
                                );
                }
            }
            CloseHandle(hHCDev);
        }
    }

    *DevicesConnected = TotalDevicesConnected;
}

//*****************************************************************************
//
// EnumerateHub()
//
// hTreeParent - Handle of the TreeView item under which this hub should be
// added.
//
// HubName - Name of this hub.  This pointer is kept so the caller can neither
// free nor reuse this memory.
//
// ConnectionInfo - NULL if this is a root hub, else this is the connection
// info for an external hub.  This pointer is kept so the caller can neither
// free nor reuse this memory.
//
// ConfigDesc - NULL if this is a root hub, else this is the Configuration
// Descriptor for an external hub.  This pointer is kept so the caller can
// neither free nor reuse this memory.
//
//*****************************************************************************

VOID
EnumerateHub (
    HTREEITEM                           hTreeParent,
    PCHAR                               HubName,
    PUSB_NODE_CONNECTION_INFORMATION    ConnectionInfo,
    PUSB_DESCRIPTOR_REQUEST             ConfigDesc,
    PSTRING_DESCRIPTOR_NODE             StringDescs,
    PCHAR                               DeviceDesc
)
{
    HANDLE          hHubDevice;
    HTREEITEM       hItem;
    PCHAR           deviceName;
    BOOL            success;
    ULONG           nBytes;
    PUSBDEVICEINFO  info;
    CHAR            leafName[512]; // XXXXX how big does this have to be?

    // Initialize locals to not allocated state so the error cleanup routine
    // only tries to cleanup things that were successfully allocated.
    //
    info        = NULL;
    hHubDevice  = INVALID_HANDLE_VALUE;

    // Allocate some space for a USBDEVICEINFO structure to hold the
    // hub info, hub name, and connection info pointers.  GPTR zero
    // initializes the structure for us.
    //
    info = (PUSBDEVICEINFO) ALLOC(sizeof(USBDEVICEINFO));

    if (info == NULL)
    {
        OOPS();
        goto EnumerateHubError;
    }

    // Keep copies of the Hub Name, Connection Info, and Configuration
    // Descriptor pointers
    //
    info->HubName = HubName;

    info->ConnectionInfo = ConnectionInfo;

    info->ConfigDesc = ConfigDesc;

    info->StringDescs = StringDescs;


    // Allocate some space for a USB_NODE_INFORMATION structure for this Hub,
    //
    info->HubInfo = (PUSB_NODE_INFORMATION)ALLOC(sizeof(USB_NODE_INFORMATION));

    if (info->HubInfo == NULL)
    {
        OOPS();
        goto EnumerateHubError;
    }

    // Allocate a temp buffer for the full hub device name.
    //
    deviceName = (PCHAR)ALLOC(strlen(HubName) + sizeof("\\\\.\\"));

    if (deviceName == NULL)
    {
        OOPS();
        goto EnumerateHubError;
    }

    // Create the full hub device name
    //
    strcpy(deviceName, "\\\\.\\");
    strcpy(deviceName + sizeof("\\\\.\\") - 1, info->HubName);

    // Try to hub the open device
    //
    hHubDevice = CreateFile(deviceName,
                            GENERIC_WRITE,
                            FILE_SHARE_WRITE,
                            NULL,
                            OPEN_EXISTING,
                            0,
                            NULL);

    // Done with temp buffer for full hub device name
    //
    FREE(deviceName);

    if (hHubDevice == INVALID_HANDLE_VALUE)
    {
        OOPS();
        goto EnumerateHubError;
    }

    //
    // Now query USBHUB for the USB_NODE_INFORMATION structure for this hub.
    // This will tell us the number of downstream ports to enumerate, among
    // other things.
    //
    success = DeviceIoControl(hHubDevice,
                              IOCTL_USB_GET_NODE_INFORMATION,
                              info->HubInfo,
                              sizeof(USB_NODE_INFORMATION),
                              info->HubInfo,
                              sizeof(USB_NODE_INFORMATION),
                              &nBytes,
                              NULL);

    if (!success)
    {
        OOPS();
        goto EnumerateHubError;
    }

    // Build the leaf name from the port number and the device description
    //
    if (ConnectionInfo)
    {
        wsprintf(leafName, "[Port%d] ", ConnectionInfo->ConnectionIndex);
        strcat(leafName, ConnectionStatuses[ConnectionInfo->ConnectionStatus]);
        strcat(leafName, " :  ");
    }
    else
    {
        leafName[0] = 0;
    }

    if (DeviceDesc)
    {

        strcat(leafName, DeviceDesc);
    }
    else
    {
        strcat(leafName, info->HubName);
    }

    // Now add an item to the TreeView with the PUSBDEVICEINFO pointer info
    // as the LPARAM reference value containing everything we know about the
    // hub.
    //
    hItem = AddLeaf(hTreeParent,
                    (LPARAM)info,
                    leafName);

    if (hItem == NULL)
    {
        OOPS();
        goto EnumerateHubError;
    }

    // Now recursively enumrate the ports of this hub.
    //
    EnumerateHubPorts(
        hItem,
        hHubDevice,
        info->HubInfo->u.HubInformation.HubDescriptor.bNumberOfPorts
        );


    CloseHandle(hHubDevice);
    return;

EnumerateHubError:
    //
    // Clean up any stuff that got allocated
    //

    if (hHubDevice != INVALID_HANDLE_VALUE)
    {
        CloseHandle(hHubDevice);
        hHubDevice = INVALID_HANDLE_VALUE;
    }

    if (info != NULL)
    {
        if (info->HubName != NULL)
        {
            FREE(info->HubName);
            info->HubName = NULL;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精选一区二区| 国产精品自拍一区| 日韩欧美成人激情| 成人一级黄色片| 久久er精品视频| 夜夜嗨av一区二区三区网页| 精品日产卡一卡二卡麻豆| 精品国产乱码久久久久久蜜臀| 国产精品久久久久永久免费观看| 欧美色图天堂网| 国产成人小视频| 欧美aaaaa成人免费观看视频| 国产精品久久久久久久久免费桃花| 日韩一区二区视频| 在线中文字幕一区| 丁香激情综合国产| 国产在线一区二区| 日韩黄色小视频| 亚洲国产精品视频| 中文字幕在线观看不卡视频| 久久久美女艺术照精彩视频福利播放| 欧美视频日韩视频| 91丨九色丨国产丨porny| 国产91高潮流白浆在线麻豆| 美女视频一区二区| 免费成人美女在线观看| 亚洲成人综合视频| 亚洲一区在线视频| 亚洲精品欧美在线| 亚洲欧美在线观看| 亚洲视频一区二区在线观看| 欧美国产丝袜视频| 国产欧美一区二区精品性色| 久久一留热品黄| 精品日韩成人av| 精品福利视频一区二区三区| 日韩一二在线观看| 日韩视频一区在线观看| 91精品国产91久久综合桃花 | 成人亚洲一区二区一| 麻豆一区二区三| 另类小说图片综合网| 秋霞午夜鲁丝一区二区老狼| 日本不卡免费在线视频| 蜜臀av一区二区在线观看| 免费成人av在线| 精品一区二区三区视频在线观看| 蜜桃一区二区三区在线| 久久精品国产亚洲a| 韩国在线一区二区| 丁香六月久久综合狠狠色| proumb性欧美在线观看| 99久久精品免费看| 色婷婷久久久亚洲一区二区三区| 色av成人天堂桃色av| 欧美日韩一区中文字幕| 欧美一区二区在线免费观看| 欧美大尺度电影在线| 久久久久久久久免费| 国产精品久久久久aaaa| 亚洲美女在线国产| 日韩av一二三| 国产精品99久久久久久久女警| 成人小视频在线| 在线欧美日韩精品| 日韩一区二区视频| 国产人成一区二区三区影院| 亚洲欧美综合色| 日韩精品亚洲一区| 国产精品一区久久久久| 色综合天天性综合| 国产视频在线观看一区二区三区| 国产精品五月天| 一区二区国产盗摄色噜噜| 免费高清在线视频一区·| 国产99久久久国产精品潘金| 免费欧美在线视频| 日韩一区精品字幕| 国产精品99久久久久久久女警| av电影一区二区| 欧美高清视频一二三区| 精品国产乱码久久久久久牛牛| 中文字幕中文字幕中文字幕亚洲无线| 亚洲国产一区二区三区| 狠狠色丁香久久婷婷综| 91在线免费播放| 日韩情涩欧美日韩视频| 中文字幕在线一区二区三区| 日韩国产欧美在线视频| 成人h版在线观看| 欧美丰满一区二区免费视频| 中文字幕乱码日本亚洲一区二区| 一区二区久久久久久| 国产一区在线不卡| 欧美日韩卡一卡二| 国产精品嫩草影院com| 免费一级片91| 日本高清不卡在线观看| 久久久高清一区二区三区| 国产精品一区2区| 亚洲精品在线免费观看视频| 国产精品天干天干在线综合| 日韩精品一二三区| 91麻豆免费观看| 久久青草欧美一区二区三区| 性欧美大战久久久久久久久| 波多野结衣的一区二区三区| 精品999久久久| 性感美女久久精品| 色视频欧美一区二区三区| 国产视频911| 美女视频一区二区三区| 欧美日韩不卡在线| 亚洲摸摸操操av| 国产成人aaa| wwwwww.欧美系列| 男人操女人的视频在线观看欧美| 日本韩国精品一区二区在线观看| 国产精品私房写真福利视频| 九九视频精品免费| 日韩一区二区三区在线视频| 亚洲成精国产精品女| 色噜噜偷拍精品综合在线| 国产精品免费网站在线观看| 国产黄人亚洲片| 精品福利视频一区二区三区| 美女www一区二区| 欧美人牲a欧美精品| 午夜精品福利一区二区三区蜜桃| 91国产丝袜在线播放| 日韩码欧中文字| 99久久99久久精品免费观看 | 中日韩av电影| 国产在线播精品第三| 精品国产乱码久久久久久老虎| 日本美女一区二区三区| 亚洲女人的天堂| aaa国产一区| 中文字幕制服丝袜成人av| eeuss鲁一区二区三区| 亚洲国产精品黑人久久久| 国产a久久麻豆| 国产精品久久久久久久久久久免费看| 国产精品正在播放| 国产精品久久三区| av一区二区三区| 亚洲六月丁香色婷婷综合久久| 91色婷婷久久久久合中文| 亚洲乱码日产精品bd| 欧美综合亚洲图片综合区| 亚洲在线视频免费观看| 欧美三级中文字幕在线观看| 日韩电影在线一区二区三区| 日韩视频在线你懂得| 国产乱对白刺激视频不卡| 日本一区二区三区四区| 97成人超碰视| 五月天亚洲精品| 欧美精品一区二区三区在线| 国产成人综合自拍| 亚洲欧美视频在线观看视频| 欧美中文字幕不卡| 免费观看91视频大全| 国产午夜精品久久| 色噜噜狠狠成人中文综合 | 麻豆国产欧美一区二区三区| 久久先锋资源网| 99久久精品99国产精品| 午夜精品一区二区三区免费视频| 日韩视频免费观看高清在线视频| 国产精品一区二区三区网站| 成人免费一区二区三区视频 | 欧美成人艳星乳罩| 成人性色生活片免费看爆迷你毛片| 亚洲精品午夜久久久| 日韩欧美美女一区二区三区| 成人性视频网站| 日本va欧美va精品发布| 国产精品视频在线看| 91麻豆精品久久久久蜜臀 | 国产乱码精品一区二区三| 亚洲视频一区在线| 日韩视频一区在线观看| 99国产一区二区三精品乱码| 日本v片在线高清不卡在线观看| 亚洲国产精华液网站w| 精品视频一区二区三区免费| 国产高清不卡二三区| 午夜精品久久久久久久| 国产精品久久久久四虎| 日韩欧美高清在线| 欧亚洲嫩模精品一区三区| 国产.精品.日韩.另类.中文.在线.播放| 伊人一区二区三区| 国产欧美精品一区| 欧美一区二区视频在线观看2020| 成人a区在线观看| 毛片一区二区三区| 亚洲电影在线播放| 日韩一区中文字幕|