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

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

?? enum.cpp

?? 可以檢測到插入到USB的設備的插入或者拔出
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
#include "stdafx.h"
#include <usbioctl.h>
#include "usbview.h"

extern CPtrArray g_Usb;

PCHAR DriverNameToDeviceDesc (PCHAR DriverName);
void AddLeaf (LPARAM    lParam, LPTSTR    lpszText);

/*++

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 (
    PCHAR                               HubName,
    PUSB_NODE_CONNECTION_INFORMATION    ConnectionInfo,
    PUSB_DESCRIPTOR_REQUEST             ConfigDesc,
    PSTRING_DESCRIPTOR_NODE             StringDescs,
    PCHAR                               DeviceDesc

);

VOID
EnumerateHubPorts (
    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 (ULONG     *DevicesConnected)
{
    char        HCName[16];
    int         HCNum;
    HANDLE      hHCDev;
    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);
            }
			*/

            AddLeaf(0, leafName);

            rootHubName = GetRootHubName(hHCDev);

            if (rootHubName != NULL)
            {
                EnumerateHub(
                             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 (
    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.
    //
    AddLeaf((LPARAM)info, leafName);

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

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


    CloseHandle(hHubDevice);
    return;

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区香蕉蜜桃| 国产精华液一区二区三区| 日韩欧美的一区| 成人性视频网站| 日本欧美一区二区在线观看| 国产精品伦一区二区三级视频| 3atv一区二区三区| 97aⅴ精品视频一二三区| 另类中文字幕网| 亚洲午夜影视影院在线观看| 国产精品久久久久毛片软件| 日韩欧美在线网站| 欧美视频在线不卡| 99久久精品情趣| 国产成人精品综合在线观看| 强制捆绑调教一区二区| 亚洲综合另类小说| 自拍视频在线观看一区二区| 久久奇米777| 日韩女优av电影| 欧美日本在线播放| 在线精品视频一区二区三四| 成人福利电影精品一区二区在线观看| 免费观看30秒视频久久| 亚洲国产精品麻豆| 亚洲综合另类小说| 亚洲精品视频免费看| 国产精品久久久久久久久图文区 | 欧美激情中文不卡| 2欧美一区二区三区在线观看视频| 欧美男女性生活在线直播观看| 一本久久精品一区二区| 99久久精品国产网站| 成人激情黄色小说| 成人午夜在线视频| va亚洲va日韩不卡在线观看| 成人av影视在线观看| 99久久伊人网影院| av网站一区二区三区| 北岛玲一区二区三区四区| 国产精品一品二品| 国产精品一二三四| 国产成人在线色| 波多野结衣一区二区三区 | 美日韩一区二区| 奇米色一区二区| 日韩精品免费专区| 蜜桃一区二区三区四区| 麻豆国产一区二区| 国产资源精品在线观看| 国产一区二区三区香蕉| 国产成人日日夜夜| 91在线丨porny丨国产| 91麻豆福利精品推荐| 色婷婷久久综合| 欧美图区在线视频| 91精品国产综合久久久蜜臀粉嫩 | 亚洲美腿欧美偷拍| 亚洲美女免费视频| 午夜婷婷国产麻豆精品| 日本中文在线一区| 极品销魂美女一区二区三区| 国产精品99久久久久久宅男| 成人国产一区二区三区精品| 91农村精品一区二区在线| 欧美午夜片在线看| 欧美一区二区精品久久911| 欧美mv日韩mv亚洲| 亚洲国产精品99久久久久久久久| 中文字幕在线不卡一区二区三区| 亚洲自拍偷拍网站| 蜜桃视频一区二区三区| 国产成人亚洲精品青草天美| 色婷婷精品久久二区二区蜜臀av | 日本精品裸体写真集在线观看 | 97久久人人超碰| 欧美日韩一级片网站| 久久色在线视频| 亚洲精品日产精品乱码不卡| 日韩高清不卡一区二区| 国产精品亚洲综合一区在线观看| 91香蕉国产在线观看软件| 欧美老肥妇做.爰bbww| 久久久99精品免费观看不卡| 亚洲精品成人少妇| 久色婷婷小香蕉久久| 91在线观看下载| 日韩欧美亚洲一区二区| 亚洲日本中文字幕区| 久久精品99久久久| 91欧美激情一区二区三区成人| 日韩欧美综合一区| 亚洲图片激情小说| 久久99精品久久久久久久久久久久| 波多野结衣视频一区| 日韩视频在线观看一区二区| 中文字幕一区二区三| 久久97超碰国产精品超碰| 在线精品观看国产| 国产日韩综合av| 日韩成人av影视| 色综合天天在线| 久久精品在线免费观看| 青草av.久久免费一区| 在线免费视频一区二区| 中文字幕不卡三区| 久久精品国产亚洲aⅴ| 欧美性生交片4| 国产精品视频一二三| 精品一区精品二区高清| 欧美绝品在线观看成人午夜影视| 亚洲欧洲国产日韩| 岛国av在线一区| 26uuu色噜噜精品一区二区| 亚洲成人1区2区| 在线观看一区二区精品视频| 国产精品久久久久国产精品日日 | 欧美浪妇xxxx高跟鞋交| 一区二区国产盗摄色噜噜| 高清国产一区二区三区| 亚洲精品一区二区三区影院| 欧美日韩一区小说| 亚洲美女视频在线| 91视频免费看| 亚洲欧洲成人自拍| 99国产精品一区| 国产精品国产成人国产三级| 国产麻豆精品在线观看| 精品国产一区二区在线观看| 日韩高清不卡在线| 56国语精品自产拍在线观看| 亚洲国产日韩精品| 欧美撒尿777hd撒尿| 亚洲国产精品影院| 欧美日韩精品一区二区三区蜜桃| 一区二区三区日韩欧美精品| 一本在线高清不卡dvd| 国产精品初高中害羞小美女文| 成人av免费在线播放| 国产精品成人免费精品自在线观看| av一区二区久久| 亚洲综合在线视频| 欧美丰满嫩嫩电影| 蜜臀av国产精品久久久久| 日韩美女天天操| 国产成人精品一区二| 中文字幕一区视频| 色悠悠久久综合| 亚洲国产精品久久久久婷婷884| 日本电影亚洲天堂一区| 亚洲自拍欧美精品| 91精品国产aⅴ一区二区| 青青草国产精品97视觉盛宴| 2023国产精品| 成人免费视频国产在线观看| 亚洲天堂精品在线观看| 欧美伊人久久久久久久久影院 | 亚洲精品日日夜夜| 欧美精品日韩精品| 国内精品国产三级国产a久久| 国产日韩精品久久久| 91麻豆国产精品久久| 天堂久久一区二区三区| 精品少妇一区二区三区在线播放| 国产成人免费视频| 一区二区欧美视频| 欧美一二三区精品| 成人午夜伦理影院| 亚洲午夜久久久久| 久久亚洲精品小早川怜子| 成人自拍视频在线观看| 亚洲一二三区不卡| 久久久一区二区三区捆绑**| 91女神在线视频| 久草热8精品视频在线观看| 成人免费在线观看入口| 777午夜精品视频在线播放| 国产69精品久久久久毛片| 亚洲激情网站免费观看| 精品久久久久av影院| 99国产精品99久久久久久| 日韩电影在线一区| 亚洲欧洲av另类| 欧美一区二区女人| 色综合天天综合狠狠| 精品影院一区二区久久久| 亚洲一区二区高清| 国产日韩三级在线| 7777精品伊人久久久大香线蕉超级流畅| 国内精品在线播放| 亚洲国产一区二区三区| 国产精品影视在线观看| 亚洲国产视频a| 欧美国产综合一区二区| 日韩欧美亚洲一区二区| 欧美视频在线播放| 99麻豆久久久国产精品免费| 韩国一区二区三区| 五月天精品一区二区三区| 亚洲欧洲一区二区在线播放|