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

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

?? enum.cpp

?? 可以檢測到插入到USB的設備的插入或者拔出
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
    if (hHubDevice != INVALID_HANDLE_VALUE)
    {
        CloseHandle(hHubDevice);
        hHubDevice = INVALID_HANDLE_VALUE;
    }

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

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

        FREE(info);
        info = NULL;
    }

    if (ConnectionInfo)
    {
        FREE(ConnectionInfo);
    }

    if (ConfigDesc)
    {
        FREE(ConfigDesc);
    }

    if (StringDescs != NULL)
    {
        PSTRING_DESCRIPTOR_NODE Next;

        do {

            Next = StringDescs->Next;
            FREE(StringDescs);
            StringDescs = Next;

        } while (StringDescs != NULL);
    }

}

//*****************************************************************************
//
// EnumerateHubPorts()
//
// hTreeParent - Handle of the TreeView item under which the hub port should
// be added.
//
// hHubDevice - Handle of the hub device to enumerate.
//
// NumPorts - Number of ports on the hub.
//
//*****************************************************************************

VOID
EnumerateHubPorts (
    HANDLE      hHubDevice,
    ULONG       NumPorts
)
{
    //HTREEITEM   hItem;
    ULONG       index;
    BOOL        success;

    PUSB_NODE_CONNECTION_INFORMATION    connectionInfo;
    PUSB_DESCRIPTOR_REQUEST             configDesc;
    PSTRING_DESCRIPTOR_NODE             stringDescs;
    PUSBDEVICEINFO                      info;

    PCHAR driverKeyName;
    PCHAR deviceDesc;
    CHAR  leafName[512]; // XXXXX how big does this have to be?


    // Loop over all ports of the hub.
    //
    // Port indices are 1 based, not 0 based.
    //
    for (index=1; index <= NumPorts; index++)
    {
        ULONG nBytes;

        // Allocate space to hold the connection info for this port.
        // For now, allocate it big enough to hold info for 30 pipes.
        //
        // Endpoint numbers are 0-15.  Endpoint number 0 is the standard
        // control endpoint which is not explicitly listed in the Configuration
        // Descriptor.  There can be an IN endpoint and an OUT endpoint at
        // endpoint numbers 1-15 so there can be a maximum of 30 endpoints
        // per device configuration.
        //
        // Should probably size this dynamically at some point.
        //
        nBytes = sizeof(USB_NODE_CONNECTION_INFORMATION) +
                 sizeof(USB_PIPE_INFO) * 30;

        connectionInfo = (PUSB_NODE_CONNECTION_INFORMATION)ALLOC(nBytes);

        if (connectionInfo == NULL)
        {
            OOPS();
            break;
        }

        //
        // Now query USBHUB for the USB_NODE_CONNECTION_INFORMATION structure
        // for this port.  This will tell us if a device is attached to this
        // port, among other things.
        //
        connectionInfo->ConnectionIndex = index;

        success = DeviceIoControl(hHubDevice,
                                  IOCTL_USB_GET_NODE_CONNECTION_INFORMATION,
                                  connectionInfo,
                                  nBytes,
                                  connectionInfo,
                                  nBytes,
                                  &nBytes,
                                  NULL);

        if (!success)
        {
            FREE(connectionInfo);
            continue;
        }

        // Update the count of connected devices
        //
        if (connectionInfo->ConnectionStatus == DeviceConnected)
        {
            TotalDevicesConnected++;
        }

        if (connectionInfo->DeviceIsHub)
        {
            TotalHubs++;
        }


        // If there is a device connected, get the Device Description
        //
        deviceDesc = NULL;
/*
        if (connectionInfo->ConnectionStatus != NoDeviceConnected)
        {
            driverKeyName = GetDriverKeyName(hHubDevice,
                                             index);

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

                FREE(driverKeyName);
            }
        }


        // If there is a device connected to the port, try to retrieve the
        // Configuration Descriptor from the device.
        //
        if (gDoConfigDesc &&
            connectionInfo->ConnectionStatus == DeviceConnected)
        {
            configDesc = GetConfigDescriptor(hHubDevice,
                                             index,
                                             0);
        }
        else
        {
            configDesc = NULL;
        }

        if (configDesc != NULL &&
            AreThereStringDescriptors(&connectionInfo->DeviceDescriptor,
                                      (PUSB_CONFIGURATION_DESCRIPTOR)(configDesc+1)))
        {
            stringDescs = GetAllStringDescriptors(
                              hHubDevice,
                              index,
                              &connectionInfo->DeviceDescriptor,
                              (PUSB_CONFIGURATION_DESCRIPTOR)(configDesc+1));
        }
        else
        {
            stringDescs = NULL;
        }
*/

        // If the device connected to the port is an external hub, get the
        // name of the external hub and recursively enumerate it.
        //
        if (connectionInfo->DeviceIsHub)
        {
            PCHAR extHubName;

            extHubName = GetExternalHubName(hHubDevice,
                                            index);

            if (extHubName != NULL)
            {
                EnumerateHub(extHubName,
                             connectionInfo,
                             configDesc,
                             stringDescs,
                             deviceDesc);

                // On to the next port
                //
                continue;
            }
        }


        // 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();
            if (configDesc != NULL)
            {
                FREE(configDesc);
            }
            FREE(connectionInfo);
            break;
        }

        info->ConnectionInfo = connectionInfo;
        //info->ConfigDesc = configDesc;
        //info->StringDescs = stringDescs;
        wsprintf(leafName, "[Port%d] ", index);
        strcat(leafName, ConnectionStatuses[connectionInfo->ConnectionStatus]);

        if (deviceDesc)
        {
            strcat(leafName, " :  ");
            strcat(leafName, deviceDesc);
        }

		AddLeaf((LPARAM)info, leafName);
    }
}


//*****************************************************************************
//
// WideStrToMultiStr()
//
//*****************************************************************************

PCHAR WideStrToMultiStr (PWCHAR WideStr)
{
    ULONG nBytes;
    PCHAR MultiStr;

    // Get the length of the converted string
    //
    nBytes = WideCharToMultiByte(
                 CP_ACP,
                 0,
                 WideStr,
                 -1,
                 NULL,
                 0,
                 NULL,
                 NULL);

    if (nBytes == 0)
    {
        return NULL;
    }

    // Allocate space to hold the converted string
    //
    MultiStr = (char *)ALLOC(nBytes);

    if (MultiStr == NULL)
    {
        return NULL;
    }

    // Convert the string
    //
    nBytes = WideCharToMultiByte(
                 CP_ACP,
                 0,
                 WideStr,
                 -1,
                 MultiStr,
                 nBytes,
                 NULL,
                 NULL);

    if (nBytes == 0)
    {
        FREE(MultiStr);
        return NULL;
    }

    return MultiStr;
}


//*****************************************************************************
//
// GetRootHubName()
//
//*****************************************************************************

PCHAR GetRootHubName (
    HANDLE HostController
)
{
    BOOL                success;
    ULONG               nBytes;
    USB_ROOT_HUB_NAME   rootHubName;
    PUSB_ROOT_HUB_NAME  rootHubNameW;
    PCHAR               rootHubNameA;

    rootHubNameW = NULL;
    rootHubNameA = NULL;

    // Get the length of the name of the Root Hub attached to the
    // Host Controller
    //
    success = DeviceIoControl(HostController,
                              IOCTL_USB_GET_ROOT_HUB_NAME,
                              0,
                              0,
                              &rootHubName,
                              sizeof(rootHubName),
                              &nBytes,
                              NULL);

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

    // Allocate space to hold the Root Hub name
    //
    nBytes = rootHubName.ActualLength;

    rootHubNameW = (struct _USB_ROOT_HUB_NAME *)ALLOC(nBytes);

    if (rootHubNameW == NULL)
    {
        OOPS();
        goto GetRootHubNameError;
    }

    // Get the name of the Root Hub attached to the Host Controller
    //
    success = DeviceIoControl(HostController,
                              IOCTL_USB_GET_ROOT_HUB_NAME,
                              NULL,
                              0,
                              rootHubNameW,
                              nBytes,
                              &nBytes,
                              NULL);

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

    // Convert the Root Hub name
    //
    rootHubNameA = WideStrToMultiStr(rootHubNameW->RootHubName);

    // All done, free the uncoverted Root Hub name and return the
    // converted Root Hub name
    //
    FREE(rootHubNameW);

    return rootHubNameA;


GetRootHubNameError:
    // There was an error, free anything that was allocated
    //
    if (rootHubNameW != NULL)
    {
        FREE(rootHubNameW);
        rootHubNameW = NULL;
    }

    return NULL;
}


//*****************************************************************************
//
// GetExternalHubName()
//
//*****************************************************************************

PCHAR GetExternalHubName (
    HANDLE  Hub,
    ULONG   ConnectionIndex
)
{
    BOOL                        success;
    ULONG                       nBytes;
    USB_NODE_CONNECTION_NAME    extHubName;
    PUSB_NODE_CONNECTION_NAME   extHubNameW;
    PCHAR                       extHubNameA;

    extHubNameW = NULL;
    extHubNameA = NULL;

    // Get the length of the name of the external hub attached to the
    // specified port.
    //
    extHubName.ConnectionIndex = ConnectionIndex;

    success = DeviceIoControl(Hub,
                              IOCTL_USB_GET_NODE_CONNECTION_NAME,
                              &extHubName,
                              sizeof(extHubName),
                              &extHubName,
                              sizeof(extHubName),
                              &nBytes,
                              NULL);

    if (!success)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品777| 视频一区在线视频| 亚洲二区在线视频| 国产在线国偷精品产拍免费yy | 国产一区二区久久| 欧美伊人久久久久久午夜久久久久| 日韩精品一区二区三区视频在线观看| 中文字幕日韩一区二区| 久草在线在线精品观看| 精品视频在线免费观看| 亚洲色图欧洲色图婷婷| 成人免费视频视频| 2014亚洲片线观看视频免费| 天堂久久一区二区三区| 日本精品裸体写真集在线观看| 久久综合丝袜日本网| 美女网站视频久久| 91精品国产综合久久婷婷香蕉 | 久久久影院官网| 青青草伊人久久| 欧美日本视频在线| 亚洲一区二区在线免费观看视频 | 欧美日韩另类一区| 亚洲九九爱视频| 91麻豆福利精品推荐| 国产日韩欧美在线一区| 国产精品一区二区视频| 久久久久久久久久久久久久久99| 日韩av一级片| 日韩视频免费观看高清完整版在线观看| 一区二区三区蜜桃网| 色播五月激情综合网| 亚洲欧洲成人自拍| 色呦呦国产精品| 亚洲嫩草精品久久| 欧美性猛交xxxx黑人交| 亚洲国产日韩一区二区| 欧美日韩1234| 捆绑紧缚一区二区三区视频| 日韩欧美一区二区免费| 国产一区二区三区日韩| 国产视频一区在线播放| 成人小视频免费观看| 亚洲欧美一区二区三区久本道91| 96av麻豆蜜桃一区二区| 亚洲国产精品久久艾草纯爱| 欧美日本在线播放| 国模无码大尺度一区二区三区| 国产校园另类小说区| av不卡免费电影| 午夜精品福利一区二区三区av | 国产精品综合一区二区三区| 国产女同性恋一区二区| 99国产精品久久久久久久久久| 成人欧美一区二区三区视频网页| 91老司机福利 在线| 午夜成人免费视频| 久久久久一区二区三区四区| eeuss国产一区二区三区| 午夜精品一区在线观看| 日韩欧美一二区| av在线不卡免费看| 毛片基地黄久久久久久天堂| 欧美国产禁国产网站cc| 欧美视频自拍偷拍| 国产激情91久久精品导航| 亚洲免费观看高清| 日韩精品一区二区在线| 97精品国产露脸对白| 日韩va欧美va亚洲va久久| 国产拍揄自揄精品视频麻豆| 欧美三级蜜桃2在线观看| 国产一区欧美一区| 午夜视频在线观看一区二区| 久久久欧美精品sm网站| 欧美日韩三级一区二区| 国产成人午夜精品影院观看视频| 亚洲一级电影视频| 欧美韩国一区二区| 91精品欧美一区二区三区综合在| 99在线精品免费| 狠狠色狠狠色综合系列| 亚洲超碰97人人做人人爱| 欧美经典一区二区| 日韩色在线观看| 欧美视频一区在线| eeuss影院一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 亚洲精品一二三区| 国产精品五月天| 精品国产免费一区二区三区四区| 欧美日韩国产综合一区二区| 成人免费福利片| 九九九久久久精品| 三级一区在线视频先锋| 亚洲黄色av一区| 国产精品久久久久久久久果冻传媒 | 日韩欧美一级片| 欧美少妇性性性| 91小视频免费观看| 成人免费看视频| 国产成人一区在线| 国产曰批免费观看久久久| 蜜臀久久99精品久久久久宅男| 一区二区三区精品在线观看| 1024精品合集| 最近日韩中文字幕| 亚洲欧美一区二区在线观看| 国产精品视频九色porn| 国产视频在线观看一区二区三区 | 久久精品国产成人一区二区三区 | 一级精品视频在线观看宜春院| 国产精品毛片久久久久久| 国产欧美视频一区二区| 久久久久国产精品厨房| 国产亚洲欧美色| 国产精品污网站| 国产精品美女久久久久久久网站| 国产色综合久久| 国产精品青草综合久久久久99| 国产欧美一二三区| 国产精品成人免费在线| 亚洲视频综合在线| 亚洲综合图片区| 亚洲成人av一区二区| 日韩成人伦理电影在线观看| 日本视频中文字幕一区二区三区| 日韩二区三区四区| 狠狠色2019综合网| 不卡高清视频专区| 在线免费观看不卡av| 91精品国产欧美一区二区18| 欧美一区二区三区思思人| 日韩欧美国产一区二区三区 | 26uuu久久综合| 国产精品不卡在线观看| 亚洲精品亚洲人成人网在线播放| 亚洲午夜私人影院| 日韩av一区二区三区四区| 国产一区亚洲一区| 91麻豆精东视频| 日韩免费看网站| 亚洲欧洲日韩一区二区三区| 亚洲一区二区三区三| 老司机午夜精品99久久| 成人av电影在线| 欧美日本一区二区| 国产亚洲一二三区| 午夜av区久久| 成人久久视频在线观看| 欧美日本精品一区二区三区| 国产视频亚洲色图| 亚洲成a人片在线不卡一二三区| 激情欧美一区二区三区在线观看| 99久久99久久精品免费观看| 7777精品伊人久久久大香线蕉 | 国产女人aaa级久久久级 | 日韩美女视频一区二区| 日本成人在线不卡视频| 99视频在线观看一区三区| 欧美一区二区三区影视| 亚洲品质自拍视频| 激情伊人五月天久久综合| 欧美性大战xxxxx久久久| 久久久精品综合| 日本欧美一区二区| aaa欧美色吧激情视频| 欧美zozozo| 亚洲成人在线免费| 99久久国产综合色|国产精品| 日韩欧美高清在线| 亚洲一区二区成人在线观看| eeuss鲁片一区二区三区| 精品日韩欧美在线| 日韩精品免费专区| 在线观看三级视频欧美| 国产精品蜜臀在线观看| 精品一区二区成人精品| 51精品视频一区二区三区| 亚洲女爱视频在线| 99re热这里只有精品免费视频| 精品美女在线播放| 日本三级亚洲精品| 欧美日韩精品福利| 亚洲综合精品自拍| 91麻豆免费视频| 亚洲手机成人高清视频| 成人午夜电影久久影院| 久久久一区二区三区| 精品一区二区三区免费视频| 日韩欧美激情四射| 蜜臀久久99精品久久久久久9 | 精品国产污污免费网站入口 | 亚洲成在人线免费| 欧美午夜不卡在线观看免费| 亚洲日本va午夜在线电影| 成+人+亚洲+综合天堂| 亚洲欧洲日产国产综合网| 捆绑调教美女网站视频一区| 成人性生交大片免费|