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

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

?? rwbulk.c

?? <windows驅動開發技術詳解>源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

        PUSB_ENDPOINT_DESCRIPTOR->bDescriptorType or
        PUSB_DEVICE_DESCRIPTOR->bDescriptorType or
        PUSB_INTERFACE_DESCRIPTOR->bDescriptorType or
        PUSB_STRING_DESCRIPTOR->bDescriptorType or
        PUSB_POWER_DESCRIPTOR->bDescriptorType or
        PUSB_CONFIGURATION_DESCRIPTOR->bDescriptorType

Return Value:

    ptr to string

--*/{

        switch(bDescriptorType) {

        case USB_DEVICE_DESCRIPTOR_TYPE:
                return "USB_DEVICE_DESCRIPTOR_TYPE";

        case USB_CONFIGURATION_DESCRIPTOR_TYPE:
                return "USB_CONFIGURATION_DESCRIPTOR_TYPE";
                

        case USB_STRING_DESCRIPTOR_TYPE:
                return "USB_STRING_DESCRIPTOR_TYPE";
                

        case USB_INTERFACE_DESCRIPTOR_TYPE:
                return "USB_INTERFACE_DESCRIPTOR_TYPE";
                

        case USB_ENDPOINT_DESCRIPTOR_TYPE:
                return "USB_ENDPOINT_DESCRIPTOR_TYPE";
                

#ifdef USB_POWER_DESCRIPTOR_TYPE // this is the older definintion which is actually obsolete
    // workaround for temporary bug in 98ddk, older USB100.h file
        case USB_POWER_DESCRIPTOR_TYPE:
                return "USB_POWER_DESCRIPTOR_TYPE";
#endif
                
#ifdef USB_RESERVED_DESCRIPTOR_TYPE  // this is the current version of USB100.h as in NT5DDK

        case USB_RESERVED_DESCRIPTOR_TYPE:
                return "USB_RESERVED_DESCRIPTOR_TYPE";

        case USB_CONFIG_POWER_DESCRIPTOR_TYPE:
                return "USB_CONFIG_POWER_DESCRIPTOR_TYPE";

        case USB_INTERFACE_POWER_DESCRIPTOR_TYPE:
                return "USB_INTERFACE_POWER_DESCRIPTOR_TYPE";
#endif // for current nt5ddk version of USB100.h

        default:
                return "??? UNKNOWN!!"; 
        }
}


char
*usbEndPointTypeString(UCHAR bmAttributes)
/*++
Routine Description:

    Called to get ascii string of endpt descriptor type

Arguments:

        PUSB_ENDPOINT_DESCRIPTOR->bmAttributes

Return Value:

    ptr to string

--*/
{
        UINT typ = bmAttributes & USB_ENDPOINT_TYPE_MASK;


        switch( typ) {
        case USB_ENDPOINT_TYPE_INTERRUPT:
                return "USB_ENDPOINT_TYPE_INTERRUPT";

        case USB_ENDPOINT_TYPE_BULK:
                return "USB_ENDPOINT_TYPE_BULK";        

        case USB_ENDPOINT_TYPE_ISOCHRONOUS:
                return "USB_ENDPOINT_TYPE_ISOCHRONOUS"; 
                
        case USB_ENDPOINT_TYPE_CONTROL:
                return "USB_ENDPOINT_TYPE_CONTROL";     
                
        default:
                return "??? UNKNOWN!!"; 
        }
}


char
*usbConfigAttributesString(UCHAR bmAttributes)
/*++
Routine Description:

    Called to get ascii string of USB_CONFIGURATION_DESCRIPTOR attributes

Arguments:

        PUSB_CONFIGURATION_DESCRIPTOR->bmAttributes

Return Value:

    ptr to string

--*/
{
        UINT typ = bmAttributes & USB_CONFIG_POWERED_MASK;


        switch( typ) {

        case USB_CONFIG_BUS_POWERED:
                return "USB_CONFIG_BUS_POWERED";

        case USB_CONFIG_SELF_POWERED:
                return "USB_CONFIG_SELF_POWERED";
                
        case USB_CONFIG_REMOTE_WAKEUP:
                return "USB_CONFIG_REMOTE_WAKEUP";

                
        default:
                return "??? UNKNOWN!!"; 
        }
}


void
print_USB_CONFIGURATION_DESCRIPTOR(PUSB_CONFIGURATION_DESCRIPTOR cd)
/*++
Routine Description:

    Called to do formatted ascii dump to console of a USB config descriptor

Arguments:

    ptr to USB configuration descriptor

Return Value:

    none

--*/
{
    printf("\n===================\nUSB_CONFIGURATION_DESCRIPTOR\n");

    printf(
    "bLength = 0x%x, decimal %d\n", cd->bLength, cd->bLength
    );

    printf(
    "bDescriptorType = 0x%x ( %s )\n", cd->bDescriptorType, usbDescriptorTypeString( cd->bDescriptorType )
    );

    printf(
    "wTotalLength = 0x%x, decimal %d\n", cd->wTotalLength, cd->wTotalLength
    );

    printf(
    "bNumInterfaces = 0x%x, decimal %d\n", cd->bNumInterfaces, cd->bNumInterfaces
    );

    printf(
    "bConfigurationValue = 0x%x, decimal %d\n", cd->bConfigurationValue, cd->bConfigurationValue
    );

    printf(
    "iConfiguration = 0x%x, decimal %d\n", cd->iConfiguration, cd->iConfiguration
    );

    printf(
    "bmAttributes = 0x%x ( %s )\n", cd->bmAttributes, usbConfigAttributesString( cd->bmAttributes )
    );

    printf(
    "MaxPower = 0x%x, decimal %d\n", cd->MaxPower, cd->MaxPower
    );
}


void
print_USB_INTERFACE_DESCRIPTOR(PUSB_INTERFACE_DESCRIPTOR id, UINT ix)
/*++
Routine Description:

    Called to do formatted ascii dump to console of a USB interface descriptor

Arguments:

    ptr to USB interface descriptor

Return Value:

    none

--*/
{
    printf("\n-----------------------------\nUSB_INTERFACE_DESCRIPTOR #%d\n", ix);


    printf(
    "bLength = 0x%x\n", id->bLength
    );


    printf(
    "bDescriptorType = 0x%x ( %s )\n", id->bDescriptorType, usbDescriptorTypeString( id->bDescriptorType )
    );


    printf(
    "bInterfaceNumber = 0x%x\n", id->bInterfaceNumber
    );
    printf(
    "bAlternateSetting = 0x%x\n", id->bAlternateSetting
    );
    printf(
    "bNumEndpoints = 0x%x\n", id->bNumEndpoints
    );
    printf(
    "bInterfaceClass = 0x%x\n", id->bInterfaceClass
    );
    printf(
    "bInterfaceSubClass = 0x%x\n", id->bInterfaceSubClass
    );
    printf(
    "bInterfaceProtocol = 0x%x\n", id->bInterfaceProtocol
    );
    printf(
    "bInterface = 0x%x\n", id->iInterface
    );
}


void
print_USB_ENDPOINT_DESCRIPTOR(PUSB_ENDPOINT_DESCRIPTOR ed, int i)
/*++
Routine Description:

    Called to do formatted ascii dump to console of a USB endpoint descriptor

Arguments:

    ptr to USB endpoint descriptor,
        index of this endpt in interface desc

Return Value:

    none

--*/
{
    printf(
        "------------------------------\nUSB_ENDPOINT_DESCRIPTOR for Pipe%02d\n", i
        );

    printf(
    "bLength = 0x%x\n", ed->bLength
    );

    printf(
    "bDescriptorType = 0x%x ( %s )\n", ed->bDescriptorType, usbDescriptorTypeString( ed->bDescriptorType )
    );


        if ( USB_ENDPOINT_DIRECTION_IN( ed->bEndpointAddress ) ) {
                printf(
                "bEndpointAddress= 0x%x ( INPUT )\n", ed->bEndpointAddress
                );
        } else {
                printf(
                "bEndpointAddress= 0x%x ( OUTPUT )\n", ed->bEndpointAddress
                );
        }

    printf(
    "bmAttributes= 0x%x ( %s )\n", ed->bmAttributes, usbEndPointTypeString ( ed->bmAttributes )
    );


    printf(
    "wMaxPacketSize= 0x%x, decimal %d\n", ed->wMaxPacketSize, ed->wMaxPacketSize
    );
    printf(
    "bInterval = 0x%x, decimal %d\n", ed->bInterval, ed->bInterval
    );
}

void
rw_dev( HANDLE hDEV )
/*++
Routine Description:

    Called to do formatted ascii dump to console of  USB
    configuration, interface, and endpoint descriptors
    (Cmdline "rwbulk -u" )

Arguments:

    handle to device

Return Value:

    none

--*/
{
        UINT success;
        int siz, nBytes;
        char buf[256];
    PUSB_CONFIGURATION_DESCRIPTOR cd;
    PUSB_INTERFACE_DESCRIPTOR id;
    PUSB_ENDPOINT_DESCRIPTOR ed;

        siz = sizeof(buf);

        if (hDEV == INVALID_HANDLE_VALUE) {
                NOISY(("DEV not open"));
                return;
        }
        
        success = DeviceIoControl(hDEV,
                        IOCTL_BULKUSB_GET_CONFIG_DESCRIPTOR,
                        buf,
                        siz,
                        buf,
                        siz,
                        &nBytes,
                        NULL);

        NOISY(("request complete, success = %d nBytes = %d\n", success, nBytes));
        
        if (success) {
        ULONG i;
                UINT  j, n;
        char *pch;

        pch = buf;
                n = 0;

        cd = (PUSB_CONFIGURATION_DESCRIPTOR) pch;

        print_USB_CONFIGURATION_DESCRIPTOR( cd );

        pch += cd->bLength;

        do {

            id = (PUSB_INTERFACE_DESCRIPTOR) pch;

            print_USB_INTERFACE_DESCRIPTOR(id, n++);

            pch += id->bLength;
            for (j=0; j<id->bNumEndpoints; j++) {

                ed = (PUSB_ENDPOINT_DESCRIPTOR) pch;

                print_USB_ENDPOINT_DESCRIPTOR(ed,j);

                pch += ed->bLength;
            }
            i = (ULONG)(pch - buf);
        } while (i<cd->wTotalLength);

        }
        
        return;

}


int  dumpUsbConfig()
/*++
Routine Description:

    Called to do formatted ascii dump to console of  USB
    configuration, interface, and endpoint descriptors
    (Cmdline "rwbulk -u" )

Arguments:

    none

Return Value:

    none

--*/
{

        HANDLE hDEV = open_dev();

        if ( hDEV )
        {
                rw_dev( hDEV );
                CloseHandle(hDEV);
        }

        return 0;
}
//  End, routines for USB configuration and pipe info dump  (Cmdline "rwbulk -u" )



int _cdecl main(
    int argc,
        char *argv[])
/*++
Routine Description:

    Entry point to rwbulk.exe
    Parses cmdline, performs user-requested tests

Arguments:

    argc, argv  standard console  'c' app arguments

Return Value:

    Zero

--*/

{
    char *pinBuf = NULL, *poutBuf = NULL;
    int nBytesRead, nBytesWrite, nBytes;
        ULONG i, j;
    int ok;
    UINT success;
    HANDLE hRead = INVALID_HANDLE_VALUE, hWrite = INVALID_HANDLE_VALUE;
        char buf[1024];
        clock_t start, finish;
        ULONG totalBytes = 0L;
        double seconds;
        ULONG fail = 0L;

    parse(argc, argv );

        // dump USB configuation and pipe info
        if( fDumpUsbConfig ) {
                dumpUsbConfig();
        }


        // doing a read, write, or both test
        if ((fRead) || (fWrite)) {

            if (fRead) {
            //
            // open the output file
            //
                        if ( fDumpReadData ) { // round size to sizeof ULONG for readable dumping
                                while( ReadLen % sizeof( ULONG ) )
                                                ReadLen++;
                        }

            hRead = open_file( inPipe);
        
                pinBuf = malloc(ReadLen);

            }

            if (fWrite) {

                        if ( fDumpReadData ) { // round size to sizeof ULONG for readable dumping
                                while( WriteLen % sizeof( ULONG ) )
                                                WriteLen++;
                        }

                hWrite = open_file( outPipe);
                poutBuf = malloc(WriteLen);
            }


        for (i=0; i<IterationCount; i++) {

            if (fWrite && poutBuf && hWrite != INVALID_HANDLE_VALUE) {

                                PULONG pOut = (PULONG) poutBuf;
                                ULONG  numLongs = WriteLen / sizeof( ULONG );
                //
                // put some data in the output buffer
                //

                for (j=0; j<numLongs; j++) {
                    *(pOut+j) = j;
                }

                //
                // send the write
                //

                    WriteFile(hWrite,
                              poutBuf,
                              WriteLen,
                              &nBytesWrite,
                              NULL);

                    printf("<%s> W (%04.4d) : request %06.6d bytes -- %06.6d bytes written\n",
                            outPipe, i, WriteLen, nBytesWrite);
                assert(nBytesWrite == WriteLen);
                }

                if (fRead && pinBuf) {

                    success = ReadFile(hRead,
                                  pinBuf,
                              ReadLen,
                                  &nBytesRead,
                                  NULL);

                    printf("<%s> R (%04.4d) : request %06.6d bytes -- %06.6d bytes read\n",
                        inPipe, i, ReadLen, nBytesRead);

                if (fWrite) {

                    //
                    // validate the input buffer against what
                    // we sent to the 82930 (loopback test)
                    //

                    ok = compare_buffs(pinBuf, poutBuf,  nBytesRead);

                                        if( fDumpReadData ) {
                                                printf("Dumping read buffer\n");
                                                dump( pinBuf, nBytesRead );     
                                                printf("Dumping write buffer\n");
                                                dump( poutBuf, nBytesRead );

                                        }

                    assert(ok);

                                        if(ok != 1)
                                                fail++;

                    assert(ReadLen == WriteLen);
                    assert(nBytesRead == ReadLen);
                    assert(nBytesWrite == WriteLen);
                }
                }
        
        }


        if (pinBuf) {
            free(pinBuf);
        }

        if (poutBuf) {
            free(poutBuf);
        }


                // close devices if needed
                if(hRead != INVALID_HANDLE_VALUE)
                        CloseHandle(hRead);
                if(hWrite != INVALID_HANDLE_VALUE)
                        CloseHandle(hWrite);

    }           

        return 0;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲风情在线资源站| 奇米影视一区二区三区| 欧美一区二区三区日韩视频| 粉嫩蜜臀av国产精品网站| 亚洲成人av一区| 中文字幕精品综合| 欧美一级理论片| 色天天综合色天天久久| 成人在线综合网| 狠狠狠色丁香婷婷综合久久五月| 亚洲视频精选在线| 国产日产欧美一区二区视频| 欧美一区二区三区啪啪| 欧美吻胸吃奶大尺度电影| 不卡一区中文字幕| 国产麻豆一精品一av一免费 | 精品88久久久久88久久久| 91久久精品一区二区三区| 懂色一区二区三区免费观看| 另类小说综合欧美亚洲| 亚洲不卡在线观看| 亚洲午夜在线视频| 亚洲综合色婷婷| 亚洲精品高清在线观看| 亚洲天堂精品在线观看| 国产精品嫩草99a| 欧美国产综合色视频| 久久老女人爱爱| 久久久久久亚洲综合| 欧美精品一区二区在线观看| 欧美电影免费观看高清完整版在 | 国产.精品.日韩.另类.中文.在线.播放| 日韩精品高清不卡| 亚洲一区二区偷拍精品| 一区二区三区成人在线视频| 一区二区三区不卡视频| 亚洲精品少妇30p| 亚洲黄色免费电影| 亚洲亚洲人成综合网络| 亚洲国产精品久久人人爱蜜臀 | 欧美国产一区视频在线观看| 亚洲国产精品黑人久久久| 欧美激情中文字幕| 中文字幕不卡一区| 中文字幕一区二区三区视频| ...xxx性欧美| 一区二区欧美精品| 亚洲一区二区三区中文字幕| 亚洲国产综合视频在线观看| 亚洲成a人片在线观看中文| 午夜激情久久久| 视频一区在线播放| 久久99国产精品久久99果冻传媒| 狠狠色狠狠色综合日日91app| 国产乱子伦一区二区三区国色天香| 国内精品伊人久久久久影院对白| 狠狠狠色丁香婷婷综合久久五月| 国产东北露脸精品视频| 99久久精品免费看| 欧美日免费三级在线| 欧美日韩二区三区| 欧美mv日韩mv| 国产精品久久久久久久浪潮网站| 亚洲精品高清视频在线观看| 视频一区国产视频| 国产大陆a不卡| 色菇凉天天综合网| 日韩欧美一区二区视频| 久久精品欧美日韩| 亚洲综合免费观看高清完整版在线 | 中文字幕日韩av资源站| 亚洲无线码一区二区三区| 美女脱光内衣内裤视频久久影院| 国产成人av影院| 欧美性生活一区| 久久亚洲欧美国产精品乐播| 亚洲人成7777| 麻豆精品国产传媒mv男同| 国产成人在线观看| 欧美日本一区二区三区| 久久先锋影音av| 亚洲人亚洲人成电影网站色| 全部av―极品视觉盛宴亚洲| 成人精品国产福利| 制服丝袜中文字幕亚洲| 国产精品嫩草99a| 免费看日韩精品| 色哟哟精品一区| 日韩视频一区二区三区在线播放| 国产精品久久久久婷婷二区次| 五月婷婷欧美视频| 岛国精品在线播放| 日韩午夜在线影院| 亚洲综合男人的天堂| 国产精品99精品久久免费| 欧美精品 日韩| 最新国产精品久久精品| 狠狠色丁香久久婷婷综合_中 | 日本视频一区二区| 99精品偷自拍| 久久精品一级爱片| 免费在线观看视频一区| 色综合久久88色综合天天6 | 亚洲三级免费观看| 国产精一品亚洲二区在线视频| 欧美亚洲一区二区三区四区| 国产精品天美传媒沈樵| 韩国在线一区二区| 欧美疯狂性受xxxxx喷水图片| 中文字幕不卡的av| 国产美女av一区二区三区| 日韩一区二区三区免费观看| 亚洲一区二区三区在线播放| av在线播放成人| 国产色一区二区| 国产在线精品视频| 日韩免费在线观看| 天天色 色综合| 欧美色老头old∨ideo| 亚洲卡通欧美制服中文| 99久精品国产| 国产精品福利一区二区| 国产精品小仙女| 久久久精品tv| 国产一区二区三区免费看| 精品蜜桃在线看| 精品写真视频在线观看| 亚洲精品一区二区三区影院| 久久成人免费网| 日韩精品一区二区三区在线观看| 日欧美一区二区| 91精品国产乱码| 日本伊人色综合网| 69久久夜色精品国产69蝌蚪网| 亚洲成在人线在线播放| 欧美浪妇xxxx高跟鞋交| 日韩电影在线观看一区| 51久久夜色精品国产麻豆| 奇米影视一区二区三区| 日韩欧美一区二区免费| 久久精品国产77777蜜臀| 欧美第一区第二区| 国产精品1区2区| 国产精品久久久久一区二区三区| av一本久道久久综合久久鬼色| 亚洲日本在线a| 欧美自拍偷拍午夜视频| 日本一区中文字幕| 日韩精品在线一区二区| 国产成人在线观看免费网站| 综合欧美亚洲日本| 一本久久综合亚洲鲁鲁五月天| 亚洲激情男女视频| 在线成人高清不卡| 狠狠色丁香婷综合久久| 国产精品伦理一区二区| 91福利精品视频| 日本va欧美va欧美va精品| 久久综合色之久久综合| 国产成都精品91一区二区三| 亚洲免费在线观看| 欧美放荡的少妇| 国产一区二区伦理片| 亚洲人成精品久久久久| 欧美猛男gaygay网站| 国产一区二区三区四区在线观看| 国产精品国产三级国产有无不卡 | 日本一区二区成人| 日本久久一区二区| 免费成人av在线播放| 国产午夜三级一区二区三| 色一情一乱一乱一91av| 日韩av电影天堂| 国产精品视频在线看| 欧洲国内综合视频| 国产一本一道久久香蕉| 一区二区三区四区不卡在线| 日韩欧美成人一区二区| 91在线免费视频观看| 日韩国产在线观看| 中文字幕一区在线观看视频| 日韩一级免费一区| 91在线国产观看| 蜜桃视频一区二区| 亚洲欧美日韩中文播放| 欧美va亚洲va香蕉在线| 91麻豆成人久久精品二区三区| 卡一卡二国产精品| 亚洲美女在线国产| 2023国产精品自拍| 欧美视频一二三区| 国产v综合v亚洲欧| 日本成人在线网站| 亚洲伊人色欲综合网| 国产欧美日韩精品a在线观看| 7777精品伊人久久久大香线蕉 | 欧美天堂亚洲电影院在线播放| 国产伦精品一区二区三区视频青涩 | 欧美喷水一区二区| 99九九99九九九视频精品|