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

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

?? enum.c

?? usbview 為查看本機USB聯接查看代碼, 更改其中的部分可用于USB的通訊與應用
?? C
?? 第 1 頁 / 共 4 頁
字號:
    commonDesc = (PUSB_COMMON_DESCRIPTOR)ConfigDesc;

    while ((PUCHAR)commonDesc + sizeof(USB_COMMON_DESCRIPTOR) < descEnd &&
           (PUCHAR)commonDesc + commonDesc->bLength <= descEnd)
    {
        switch (commonDesc->bDescriptorType)
        {
            case USB_CONFIGURATION_DESCRIPTOR_TYPE:
                if (commonDesc->bLength != sizeof(USB_CONFIGURATION_DESCRIPTOR))
                {
                    OOPS();
                    break;
                }
                if (((PUSB_CONFIGURATION_DESCRIPTOR)commonDesc)->iConfiguration)
                {
                    return TRUE;
                }
                (PUCHAR)commonDesc += commonDesc->bLength;
                continue;

            case USB_INTERFACE_DESCRIPTOR_TYPE:
                if (commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR) &&
                    commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR2))
                {
                    OOPS();
                    break;
                }
                if (((PUSB_INTERFACE_DESCRIPTOR)commonDesc)->iInterface)
                {
                    return TRUE;
                }
                (PUCHAR)commonDesc += commonDesc->bLength;
                continue;

            default:
                (PUCHAR)commonDesc += commonDesc->bLength;
                continue;
        }
        break;
    }

    return FALSE;
}


//*****************************************************************************
//
// GetAllStringDescriptors()
//
// hHubDevice - Handle of the hub device containing the port from which the
// String Descriptors will be requested.
//
// ConnectionIndex - Identifies the port on the hub to which a device is
// attached from which the String Descriptors will be requested.
//
// DeviceDesc - Device Descriptor for which String Descriptors should be
// requested.
//
// ConfigDesc - Configuration Descriptor (also containing Interface Descriptor)
// for which String Descriptors should be requested.
//
//*****************************************************************************

PSTRING_DESCRIPTOR_NODE
GetAllStringDescriptors (
    HANDLE                          hHubDevice,
    ULONG                           ConnectionIndex,
    PUSB_DEVICE_DESCRIPTOR          DeviceDesc,
    PUSB_CONFIGURATION_DESCRIPTOR   ConfigDesc
)
{
    PSTRING_DESCRIPTOR_NODE supportedLanguagesString;
    PSTRING_DESCRIPTOR_NODE stringDescNodeTail;
    ULONG                   numLanguageIDs;
    USHORT                  *languageIDs;

    PUCHAR                  descEnd;
    PUSB_COMMON_DESCRIPTOR  commonDesc;

    //
    // Get the array of supported Language IDs, which is returned
    // in String Descriptor 0
    //
    supportedLanguagesString = GetStringDescriptor(hHubDevice,
                                                   ConnectionIndex,
                                                   0,
                                                   0);

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

    numLanguageIDs = (supportedLanguagesString->StringDescriptor->bLength - 2) / 2;

    languageIDs = &supportedLanguagesString->StringDescriptor->bString[0];

    stringDescNodeTail = supportedLanguagesString;

    //
    // Get the Device Descriptor strings
    //

    if (DeviceDesc->iManufacturer)
    {
        stringDescNodeTail = GetStringDescriptors(hHubDevice,
                                                  ConnectionIndex,
                                                  DeviceDesc->iManufacturer,
                                                  numLanguageIDs,
                                                  languageIDs,
                                                  stringDescNodeTail);
    }

    if (DeviceDesc->iProduct)
    {
        stringDescNodeTail = GetStringDescriptors(hHubDevice,
                                                  ConnectionIndex,
                                                  DeviceDesc->iProduct,
                                                  numLanguageIDs,
                                                  languageIDs,
                                                  stringDescNodeTail);
    }

    if (DeviceDesc->iSerialNumber)
    {
        stringDescNodeTail = GetStringDescriptors(hHubDevice,
                                                  ConnectionIndex,
                                                  DeviceDesc->iSerialNumber,
                                                  numLanguageIDs,
                                                  languageIDs,
                                                  stringDescNodeTail);
    }


    //
    // Get the Configuration and Interface Descriptor strings
    //

    descEnd = (PUCHAR)ConfigDesc + ConfigDesc->wTotalLength;

    commonDesc = (PUSB_COMMON_DESCRIPTOR)ConfigDesc;

    while ((PUCHAR)commonDesc + sizeof(USB_COMMON_DESCRIPTOR) < descEnd &&
           (PUCHAR)commonDesc + commonDesc->bLength <= descEnd)
    {
        switch (commonDesc->bDescriptorType)
        {
            case USB_CONFIGURATION_DESCRIPTOR_TYPE:
                if (commonDesc->bLength != sizeof(USB_CONFIGURATION_DESCRIPTOR))
                {
                    OOPS();
                    break;
                }
                if (((PUSB_CONFIGURATION_DESCRIPTOR)commonDesc)->iConfiguration)
                {
                    stringDescNodeTail = GetStringDescriptors(
                                             hHubDevice,
                                             ConnectionIndex,
                                             ((PUSB_CONFIGURATION_DESCRIPTOR)commonDesc)->iConfiguration,
                                             numLanguageIDs,
                                             languageIDs,
                                             stringDescNodeTail);
                }
                (PUCHAR)commonDesc += commonDesc->bLength;
                continue;

            case USB_INTERFACE_DESCRIPTOR_TYPE:
                if (commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR) &&
                    commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR2))
                {
                    OOPS();
                    break;
                }
                if (((PUSB_INTERFACE_DESCRIPTOR)commonDesc)->iInterface)
                {
                    stringDescNodeTail = GetStringDescriptors(
                                             hHubDevice,
                                             ConnectionIndex,
                                             ((PUSB_INTERFACE_DESCRIPTOR)commonDesc)->iInterface,
                                             numLanguageIDs,
                                             languageIDs,
                                             stringDescNodeTail);
                }
                (PUCHAR)commonDesc += commonDesc->bLength;
                continue;

            default:
                (PUCHAR)commonDesc += commonDesc->bLength;
                continue;
        }
        break;
    }

    return supportedLanguagesString;
}


//*****************************************************************************
//
// GetStringDescriptor()
//
// hHubDevice - Handle of the hub device containing the port from which the
// String Descriptor will be requested.
//
// ConnectionIndex - Identifies the port on the hub to which a device is
// attached from which the String Descriptor will be requested.
//
// DescriptorIndex - String Descriptor index.
//
// LanguageID - Language in which the string should be requested.
//
//*****************************************************************************

PSTRING_DESCRIPTOR_NODE
GetStringDescriptor (
    HANDLE  hHubDevice,
    ULONG   ConnectionIndex,
    UCHAR   DescriptorIndex,
    USHORT  LanguageID
)
{
    BOOL    success;
    ULONG   nBytes;
    ULONG   nBytesReturned;

    UCHAR   stringDescReqBuf[sizeof(USB_DESCRIPTOR_REQUEST) +
                             MAXIMUM_USB_STRING_LENGTH];

    PUSB_DESCRIPTOR_REQUEST stringDescReq;
    PUSB_STRING_DESCRIPTOR  stringDesc;
    PSTRING_DESCRIPTOR_NODE stringDescNode;

    nBytes = sizeof(stringDescReqBuf);

    stringDescReq = (PUSB_DESCRIPTOR_REQUEST)stringDescReqBuf;
    stringDesc = (PUSB_STRING_DESCRIPTOR)(stringDescReq+1);

    // Zero fill the entire request structure
    //
    memset(stringDescReq, 0, nBytes);

    // Indicate the port from which the descriptor will be requested
    //
    stringDescReq->ConnectionIndex = ConnectionIndex;

    //
    // USBHUB uses URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE to process this
    // IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION request.
    //
    // USBD will automatically initialize these fields:
    //     bmRequest = 0x80
    //     bRequest  = 0x06
    //
    // We must inititialize these fields:
    //     wValue    = Descriptor Type (high) and Descriptor Index (low byte)
    //     wIndex    = Zero (or Language ID for String Descriptors)
    //     wLength   = Length of descriptor buffer
    //
    stringDescReq->SetupPacket.wValue = (USB_STRING_DESCRIPTOR_TYPE << 8)
                                        | DescriptorIndex;

    stringDescReq->SetupPacket.wIndex = LanguageID;

    stringDescReq->SetupPacket.wLength = (USHORT)(nBytes - sizeof(USB_DESCRIPTOR_REQUEST));

    // Now issue the get descriptor request.
    //
    success = DeviceIoControl(hHubDevice,
                              IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION,
                              stringDescReq,
                              nBytes,
                              stringDescReq,
                              nBytes,
                              &nBytesReturned,
                              NULL);

    //
    // Do some sanity checks on the return from the get descriptor request.
    //

    if (!success)
    {
        OOPS();
        return NULL;
    }

    if (nBytesReturned < 2)
    {
        OOPS();
        return NULL;
    }

    if (stringDesc->bDescriptorType != USB_STRING_DESCRIPTOR_TYPE)
    {
        OOPS();
        return NULL;
    }

    if (stringDesc->bLength != nBytesReturned - sizeof(USB_DESCRIPTOR_REQUEST))
    {
        OOPS();
        return NULL;
    }

    if (stringDesc->bLength % 2 != 0)
    {
        OOPS();
        return NULL;
    }

    //
    // Looks good, allocate some (zero filled) space for the string descriptor
    // node and copy the string descriptor to it.
    //

    stringDescNode = (PSTRING_DESCRIPTOR_NODE)ALLOC(sizeof(STRING_DESCRIPTOR_NODE) +
                                                    stringDesc->bLength);

    if (stringDescNode == NULL)
    {
        OOPS();
        return NULL;
    }

    stringDescNode->DescriptorIndex = DescriptorIndex;
    stringDescNode->LanguageID = LanguageID;

    memcpy(stringDescNode->StringDescriptor,
           stringDesc,
           stringDesc->bLength);

    return stringDescNode;
}


//*****************************************************************************
//
// GetStringDescriptors()
//
// hHubDevice - Handle of the hub device containing the port from which the
// String Descriptor will be requested.
//
// ConnectionIndex - Identifies the port on the hub to which a device is
// attached from which the String Descriptor will be requested.
//
// DescriptorIndex - String Descriptor index.
//
// NumLanguageIDs -  Number of languages in which the string should be
// requested.
//
// LanguageIDs - Languages in which the string should be requested.
//
//*****************************************************************************

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

    for (i=0; i<NumLanguageIDs; i++)
    {
        StringDescNodeTail->Next = GetStringDescriptor(hHubDevice,
                                                       ConnectionIndex,
                                                       DescriptorIndex,
                                                       *LanguageIDs);

        if (StringDescNodeTail->Next)
        {
            StringDescNodeTail = StringDescNodeTail->Next;
        }

        LanguageIDs++;
    }

    return StringDescNodeTail;
}

//*****************************************************************************
//
// CleanupItem()
//
//*****************************************************************************

VOID
CleanupItem (
    HWND      hTreeWnd,
    HTREEITEM hTreeItem
)
{
    TV_ITEM         tvi;
    PUSBDEVICEINFO  info;

    tvi.mask = TVIF_HANDLE | TVIF_PARAM;
    tvi.hItem = hTreeItem;

    TreeView_GetItem(hTreeWnd,
                     &tvi);

    info = (PUSBDEVICEINFO)tvi.lParam;

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

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

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

        if (info->StringDescs != NULL)
        {
            PSTRING_DESCRIPTOR_NODE Next;

            do {

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

            } while (info->StringDescs != NULL);
        }

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

        FREE(info);
        info = NULL;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区免费在线播放| 欧美美女网站色| 欧美这里有精品| 欧美tickling挠脚心丨vk| 中文字幕av不卡| 天天操天天干天天综合网| 成人在线综合网站| 欧美一区二区三区视频免费播放 | 丝袜美腿亚洲一区| 丁香另类激情小说| 26uuu精品一区二区| 亚洲成人动漫精品| 97精品久久久久中文字幕| 精品国产免费久久| 亚洲成av人片| 色激情天天射综合网| 中文字幕欧美日韩一区| 精品一区二区在线视频| 在线91免费看| 亚洲精品国产无天堂网2021| 国产高清亚洲一区| 日韩欧美的一区二区| 午夜久久久久久久久久一区二区| 成人av资源在线观看| 国产亚洲午夜高清国产拍精品| 五月天丁香久久| 在线观看视频一区二区| 最好看的中文字幕久久| 成人av电影免费观看| 中文成人av在线| 国产风韵犹存在线视精品| 日韩小视频在线观看专区| 日欧美一区二区| 欧美午夜精品久久久| 夜夜亚洲天天久久| 在线一区二区视频| 亚洲一区二区三区视频在线| 在线观看日韩毛片| 一区二区三区国产精华| 色婷婷av一区| 一区二区国产视频| 欧美在线三级电影| 香蕉成人啪国产精品视频综合网| 精品视频色一区| 亚洲成人av在线电影| 欧美精品免费视频| 日本亚洲天堂网| 69堂成人精品免费视频| 理论片日本一区| 日韩精品一区二区三区四区 | 樱桃国产成人精品视频| 91黄视频在线| 丝袜美腿亚洲综合| 日韩欧美不卡在线观看视频| 久久99精品国产麻豆婷婷| 久久久久国产精品麻豆| 99国产欧美另类久久久精品| 一区二区三区小说| 777a∨成人精品桃花网| 国产乱人伦精品一区二区在线观看| 久久精品一区八戒影视| 99riav久久精品riav| 亚洲成人av福利| 久久久久9999亚洲精品| 91麻豆高清视频| 三级不卡在线观看| 国产视频亚洲色图| 欧美亚洲禁片免费| 国产在线精品免费av| 亚洲欧洲成人av每日更新| 欧美日韩aaa| 国产福利不卡视频| 肉肉av福利一精品导航| 国产精品无遮挡| 欧美电影一区二区| 不卡的av中国片| 日产精品久久久久久久性色| 国产精品美女视频| 91成人免费在线| 91一区二区在线观看| 亚洲福利一二三区| 中文字幕国产一区| 成人深夜福利app| www.一区二区| 日韩精彩视频在线观看| 日韩免费观看2025年上映的电影| 成人欧美一区二区三区1314| 亚洲另类春色国产| 久久精品国产亚洲aⅴ| 91精品国产色综合久久不卡蜜臀| 欧美成人国产一区二区| 亚洲麻豆国产自偷在线| 婷婷综合在线观看| 欧美成人bangbros| 五月婷婷综合在线| 99久久精品国产导航| 亚洲国产精品一区二区久久| 911精品产国品一二三产区| 成人综合激情网| 奇米影视在线99精品| 久久蜜桃av一区精品变态类天堂| 欧美视频一区在线| 日本福利一区二区| 精品视频在线免费| 91精品国产91久久综合桃花| 欧美怡红院视频| 欧美va天堂va视频va在线| 久久精品无码一区二区三区| 亚洲国产激情av| 日韩免费一区二区| 在线观看欧美黄色| av激情亚洲男人天堂| 9人人澡人人爽人人精品| 久久99精品国产麻豆不卡| 午夜久久久久久| 亚洲第一福利视频在线| 亚洲欧洲国产日韩| 日本一区二区电影| 欧美一级xxx| 99re这里只有精品视频首页| 日本三级亚洲精品| 欧美韩国日本不卡| 日韩精品亚洲一区二区三区免费| 欧美理论电影在线| 韩国av一区二区三区四区| 国产午夜精品一区二区三区视频| 亚洲人成网站在线| 99久久99久久免费精品蜜臀| 亚洲乱码一区二区三区在线观看| 在线免费观看日本一区| 亚洲一区二区三区四区在线免费观看| 日本电影欧美片| 亚洲综合一区二区| 亚洲免费观看高清完整版在线观看| 综合久久国产九一剧情麻豆| 亚洲精品国产精品乱码不99| 午夜伦理一区二区| 亚洲精品第一国产综合野| 蜜臀久久99精品久久久久久9 | 色女孩综合影院| 欧美日韩在线免费视频| 久久综合久久99| 免费高清不卡av| 成人天堂资源www在线| 成人aaaa免费全部观看| 欧美午夜精品一区二区蜜桃| 色婷婷综合久久久| 欧美性高清videossexo| 日韩午夜小视频| 久久伊人蜜桃av一区二区| 久久精品视频免费观看| 亚洲色图20p| 国产欧美日韩久久| 精品国产网站在线观看| 激情小说亚洲一区| 国产精品影视在线| 成人免费黄色在线| 欧美性大战久久| 91.xcao| 欧美tickling挠脚心丨vk| 91麻豆精品国产91久久久久久| 久久久久久一二三区| 中文字幕不卡在线| 亚洲激情六月丁香| 蜜桃91丨九色丨蝌蚪91桃色| 美女mm1313爽爽久久久蜜臀| 国产一区二区免费在线| 91首页免费视频| 在线不卡欧美精品一区二区三区| 337p亚洲精品色噜噜| 亚洲人123区| 秋霞午夜鲁丝一区二区老狼| 国产成人精品aa毛片| 日本韩国欧美在线| 欧美日本一道本在线视频| 久久综合九色综合97_久久久| 最新国产成人在线观看| 毛片av中文字幕一区二区| 国产电影精品久久禁18| 欧美一区二区三区日韩| 国产精品欧美一区二区三区| 亚洲成人精品在线观看| 成人一区二区三区视频在线观看| 91精品国产色综合久久不卡蜜臀| 欧美激情资源网| 天堂蜜桃91精品| 99久久精品情趣| 国产女人18毛片水真多成人如厕| 亚洲宅男天堂在线观看无病毒| 精品在线你懂的| 成人免费va视频| 日韩女优av电影| 亚洲高清久久久| 93久久精品日日躁夜夜躁欧美| 精品精品国产高清一毛片一天堂| 亚洲综合一二区| 成人精品亚洲人成在线| 精品国产成人在线影院| 天天射综合影视| www.日本不卡|