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

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

?? rwbulk.c

?? usb范例代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
                    usage();
            }
        }
    }
}

BOOL
compare_buffs (
    PCHAR   buff1,
    PCHAR   buff2,
    int     length
)
/*++
   Routine Description:

   Called to verify read and write buffers match for loopback test

   Arguments:

   buffers to compare and length

   Return Value:

   TRUE if buffers match, else FALSE

--*/
{
    int ok = 1;

    if (memcmp(buff1, buff2, length))
    {
        ok = 0;
    }

    return ok;
}

#define NPERLN 8

void
dump (
    PUCHAR  b,
    int     len
)
/*++
   Routine Description:

   Called to do formatted ascii dump to console of the io buffer

   Arguments:

   buffer and length

   Return Value:

   none

--*/
{
    ULONG i;
    ULONG longLen = (ULONG)len / sizeof( ULONG );
    PULONG pBuf = (PULONG) b;

    // dump an ordinal ULONG for each sizeof(ULONG)'th byte
    printf("\n****** BEGIN DUMP LEN decimal %d, 0x%x\n", len,len);

    for (i = 0; i < longLen; i++)
    {
        printf("%04X ", *pBuf++);

        if (i % NPERLN == (NPERLN - 1))
        {
            printf("\n");
        }
    }

    if (i % NPERLN != 0)
    {
        printf("\n");
    }
    printf("\n****** END DUMP LEN decimal %d, 0x%x\n", len,len);
}





// Begin, routines for USB configuration dump (Cmdline "rwbulk -u" )


VOID
ShowEndpointDescriptor (
    PUSB_ENDPOINT_DESCRIPTOR    EndpointDesc
)
/*++
Routine Description:

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

Arguments:

    ptr to USB endpoint descriptor,

Return Value:

    none

--*/
{
    printf("--------------------\n");
    printf("Endpoint Descriptor:\n");

    if (USB_ENDPOINT_DIRECTION_IN(EndpointDesc->bEndpointAddress))
    {
        printf("bEndpointAddress:     0x%02X  IN\n",
               EndpointDesc->bEndpointAddress);
    }
    else
    {
        printf("bEndpointAddress:     0x%02X  OUT\n",
               EndpointDesc->bEndpointAddress);
    }

    switch (EndpointDesc->bmAttributes & 0x03)
    {
        case 0x00:
            printf("Transfer Type:     Control\n");
            break;

        case 0x01:
            printf("Transfer Type: Isochronous\n");
            break;

        case 0x02:
            printf("Transfer Type:        Bulk\n");
            break;

        case 0x03:
            printf("Transfer Type:   Interrupt\n");
            break;
    }

    printf("wMaxPacketSize:     0x%04X (%d)\n",
           EndpointDesc->wMaxPacketSize,
           EndpointDesc->wMaxPacketSize);

    printf("bInterval:            0x%02X\n",
           EndpointDesc->bInterval);
}


VOID
ShowInterfaceDescriptor (
    PUSB_INTERFACE_DESCRIPTOR   InterfaceDesc
)
/*++
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---------------------\n");
    printf("Interface Descriptor:\n");

    printf("bInterfaceNumber:     0x%02X\n",
           InterfaceDesc->bInterfaceNumber);

    printf("bAlternateSetting:    0x%02X\n",
           InterfaceDesc->bAlternateSetting);

    printf("bNumEndpoints:        0x%02X\n",
           InterfaceDesc->bNumEndpoints);

    printf("bInterfaceClass:      0x%02X\n",
           InterfaceDesc->bInterfaceClass);

    printf("bInterfaceSubClass:   0x%02X\n",
           InterfaceDesc->bInterfaceSubClass);

    printf("bInterfaceProtocol:   0x%02X\n",
           InterfaceDesc->bInterfaceProtocol);

    printf("iInterface:           0x%02X\n",
           InterfaceDesc->iInterface);

}


VOID
ShowConfigurationDescriptor (
    PUSB_CONFIGURATION_DESCRIPTOR   ConfigDesc
)
/*++
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");
    printf("Configuration Descriptor:\n");

    printf("wTotalLength:       0x%04X\n",
           ConfigDesc->wTotalLength);

    printf("bNumInterfaces:       0x%02X\n",
           ConfigDesc->bNumInterfaces);

    printf("bConfigurationValue:  0x%02X\n",
           ConfigDesc->bConfigurationValue);

    printf("iConfiguration:       0x%02X\n",
           ConfigDesc->iConfiguration);

    printf("bmAttributes:         0x%02X\n",
           ConfigDesc->bmAttributes);

    if (ConfigDesc->bmAttributes & 0x80)
    {
        printf("  Bus Powered\n");
    }

    if (ConfigDesc->bmAttributes & 0x40)
    {
        printf("  Self Powered\n");
    }

    if (ConfigDesc->bmAttributes & 0x20)
    {
        printf("  Remote Wakeup\n");
    }

    printf("MaxPower:             0x%02X (%d Ma)\n",
           ConfigDesc->MaxPower,
           ConfigDesc->MaxPower * 2);

}


VOID
ShowConfigDesc (
    PUSB_CONFIGURATION_DESCRIPTOR   ConfigDesc
)
{
    PUCHAR                  descEnd;
    PUSB_COMMON_DESCRIPTOR  commonDesc;
    BOOLEAN                 ShowUnknown;

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

    commonDesc = (PUSB_COMMON_DESCRIPTOR)ConfigDesc;

    while ((PUCHAR)commonDesc + sizeof(USB_COMMON_DESCRIPTOR) < descEnd &&
           (PUCHAR)commonDesc + commonDesc->bLength <= descEnd)
    {
        ShowUnknown = FALSE;

        switch (commonDesc->bDescriptorType)
        {
            case USB_CONFIGURATION_DESCRIPTOR_TYPE:
                if (commonDesc->bLength != sizeof(USB_CONFIGURATION_DESCRIPTOR))
                {
                    ShowUnknown = TRUE;
                    break;
                }
                ShowConfigurationDescriptor((PUSB_CONFIGURATION_DESCRIPTOR)commonDesc);
                break;

            case USB_INTERFACE_DESCRIPTOR_TYPE:
                if (commonDesc->bLength != sizeof(USB_INTERFACE_DESCRIPTOR))
                {
                    ShowUnknown = TRUE;
                    break;
                }
                ShowInterfaceDescriptor((PUSB_INTERFACE_DESCRIPTOR)commonDesc);
                break;

            case USB_ENDPOINT_DESCRIPTOR_TYPE:
                if (commonDesc->bLength != sizeof(USB_ENDPOINT_DESCRIPTOR))
                {
                    ShowUnknown = TRUE;
                    break;
                }
                ShowEndpointDescriptor((PUSB_ENDPOINT_DESCRIPTOR)commonDesc);
                break;

            default:
                ShowUnknown = TRUE;
                break;
        }

        if (ShowUnknown)
        {
            // ShowUnknownDescriptor(commonDesc);
        }

        (PUCHAR)commonDesc += commonDesc->bLength;
    }
}


void dumpUsbConfig()
/*++
Routine Description:

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

Arguments:

    none

Return Value:

    none

--*/
{
    HANDLE  hDEV;
    ULONG   success;
    int     siz;
    int     nBytes;
    char    buf[4096];

    PUSB_CONFIGURATION_DESCRIPTOR configDesc;

    hDEV = open_dev();

    if (hDEV && hDEV != INVALID_HANDLE_VALUE)
    {
        siz = sizeof(buf);

        nBytes = 0;

        success = DeviceIoControl(hDEV,
                                  IOCTL_BULKUSB_GET_CONFIG_DESCRIPTOR,
                                  buf,
                                  siz,
                                  buf,
                                  siz,
                                  &nBytes,
                                  NULL);

        NOISY(("request complete, success = %d nBytes = %d\n", success, nBytes));

        configDesc = (PUSB_CONFIGURATION_DESCRIPTOR)buf;

        if (success && configDesc->wTotalLength == nBytes)
        {
            ShowConfigDesc(configDesc);
        }

        CloseHandle(hDEV);
    }
}

//  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

--*/

{
    PCHAR pinBuf = NULL;
    PCHAR poutBuf = NULL;
    int nBytesRead = 0, nBytesWrite = 0, nBytes = 0;
    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);
                if (success)
                {
                    printf("<%s> R (%04.4d) : request %06.6d bytes -- %06.6d bytes read\n",
                           inPipe, i, ReadLen, nBytesRead);
                }
                else
                {
                    printf("ReadFile failed with error code %d\n", GetLastError());
                }
                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一区二区三区免费野_久草精品视频
国产亚洲欧美一区在线观看| 日本不卡123| 中文字幕亚洲一区二区av在线 | 在线亚洲一区二区| 91亚洲国产成人精品一区二区三| 成人免费看的视频| 99久久久久免费精品国产| 成人app软件下载大全免费| www.欧美亚洲| 色婷婷综合激情| 精品视频在线视频| 欧美丰满少妇xxxbbb| 日韩视频免费观看高清完整版| 日韩欧美视频在线| 26uuu精品一区二区在线观看| 久久只精品国产| 国产欧美综合在线| 日韩美女久久久| 亚洲成人免费电影| 免费精品99久久国产综合精品| 精品一区精品二区高清| 国产九色精品成人porny| 国产不卡视频在线观看| 97久久超碰国产精品| 欧美日韩精品三区| 日韩一级欧美一级| 久久免费精品国产久精品久久久久| 日本一区二区视频在线| 国产精品国产成人国产三级| 亚洲国产一区二区三区青草影视| 日韩在线一区二区| 国产在线播精品第三| 99国产精品一区| 欧美日韩国产bt| 国产农村妇女毛片精品久久麻豆 | 精品欧美一区二区久久| 国产欧美一区二区精品性色超碰 | 国产精品资源在线| 色婷婷激情一区二区三区| 91麻豆精品国产自产在线观看一区| 精品欧美一区二区在线观看| 亚洲人快播电影网| 五月婷婷激情综合| 国产精品1区2区| 91电影在线观看| 精品99999| 亚洲男人的天堂在线aⅴ视频| 偷拍亚洲欧洲综合| 成人午夜av影视| 777色狠狠一区二区三区| 欧美国产视频在线| 日本欧美一区二区在线观看| 国产91精品一区二区| 在线成人午夜影院| 综合色天天鬼久久鬼色| 久久精品国产一区二区| 97精品电影院| 中文字幕乱码久久午夜不卡| 亚洲一区国产视频| 国产电影一区在线| 欧美色视频一区| 国产精品日日摸夜夜摸av| 青青草97国产精品免费观看| 972aa.com艺术欧美| 久久久亚洲综合| 午夜精品久久久久久久久| 成人免费电影视频| 欧美成人一区二区| 亚洲成人av一区二区| av综合在线播放| 久久色.com| 日韩精品乱码免费| 色婷婷av一区| 国产精品久久久久9999吃药| 精彩视频一区二区三区| 欧美乱熟臀69xxxxxx| 亚洲免费毛片网站| 成人黄色免费短视频| 精品成人一区二区三区| 视频一区欧美精品| 欧美在线一区二区三区| 亚洲欧洲国产专区| 粉嫩欧美一区二区三区高清影视| 欧美一区二区三区播放老司机| 一区二区三区成人在线视频| 99视频精品在线| 国产精品久久久久四虎| 国产69精品一区二区亚洲孕妇| 久久伊人蜜桃av一区二区| 秋霞影院一区二区| 欧美一区二区精品久久911| 亚洲午夜私人影院| 在线中文字幕一区| 亚洲精选在线视频| 色综合网站在线| 亚洲人成网站色在线观看| 成人禁用看黄a在线| 欧美国产日韩在线观看| 成人午夜在线播放| 久久久久久毛片| 高清shemale亚洲人妖| 国产日韩欧美一区二区三区综合| 国产一区二区调教| 久久这里都是精品| 国产成人av福利| 欧美国产日韩一二三区| 成人av在线资源| 亚洲桃色在线一区| 欧美在线三级电影| 亚洲午夜精品网| 91精品国产综合久久精品app| 日本不卡一区二区三区| 91精品国产一区二区三区| 美女视频一区二区三区| 精品av久久707| 亚洲激情五月婷婷| 亚洲成人综合网站| 欧美日韩一级片在线观看| 亚洲第一综合色| 欧美丰满一区二区免费视频| 麻豆传媒一区二区三区| 欧美成人r级一区二区三区| 狠狠网亚洲精品| 久久久久久99久久久精品网站| 成人蜜臀av电影| 亚洲精品国产品国语在线app| 在线精品视频一区二区| 日韩精品国产欧美| 久久午夜电影网| www.亚洲色图.com| 亚洲一区成人在线| 日韩欧美一二区| 成人小视频免费在线观看| 一区二区三区日韩在线观看| 91精品国产欧美一区二区成人| 欧美久久一区二区| 蜜桃一区二区三区四区| 欧美国产一区二区| 欧美日韩三级在线| 国产在线精品视频| 亚洲欧洲精品一区二区三区不卡 | 欧美变态tickle挠乳网站| 国产成人aaa| 亚洲一级二级三级在线免费观看| 精品久久久网站| 99久久免费视频.com| 日韩av电影免费观看高清完整版在线观看| 综合久久给合久久狠狠狠97色| 欧美日韩高清影院| 国产不卡视频在线播放| 亚洲电影欧美电影有声小说| 久久久久一区二区三区四区| 欧美视频在线一区二区三区| 国产电影一区在线| 日韩精品视频网站| 中日韩av电影| 欧美一区二区福利视频| 99在线精品一区二区三区| 日本亚洲视频在线| 亚洲精品乱码久久久久久| 久久久久亚洲蜜桃| 欧美精选一区二区| 91欧美一区二区| 国产一区二区按摩在线观看| 亚洲成人激情综合网| 国产精品亲子伦对白| 日韩午夜av电影| 欧美日韩在线播放| 成人看片黄a免费看在线| 久久精品国产**网站演员| 亚洲bt欧美bt精品| 综合亚洲深深色噜噜狠狠网站| 久久久久久久综合| 欧美无砖专区一中文字| av在线这里只有精品| 国产在线播放一区三区四| 日本欧美一区二区在线观看| 亚洲一区二区欧美激情| 亚洲色图视频免费播放| 国产夜色精品一区二区av| 欧美一区二区视频在线观看| 欧美性猛交xxxx黑人交| 色中色一区二区| 一本大道久久a久久精二百| 91精品国产综合久久精品图片| hitomi一区二区三区精品| 成人av资源下载| 国产老肥熟一区二区三区| 日本不卡一二三| 亚洲国产精品综合小说图片区| 亚洲私人影院在线观看| 国产精品久久久久久久久搜平片| 欧美变态凌虐bdsm| 日韩免费一区二区三区在线播放| 欧美日韩国产另类一区| 欧美日韩黄色影视| 欧美日韩在线三区| 欧美在线免费播放| 日本道精品一区二区三区| 91欧美激情一区二区三区成人|