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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? usbfx2lk_devctrl.cpp

?? VisualC++寫(xiě)的一個(gè)USB的驅(qū)動(dòng)程序。
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
                status = STATUS_INVALID_PARAMETER;
                bytesReturned = 0;
                break;

            }

            if (inputBufferLength < sizeof(USBFX2_PIPE_ENUM)) {

                //
                // Let the user know how big the buffer was
                //  supposed to be
                //
                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User's input buffer is too small for this IOCTL, expecting a USBFX2_PIPE_ENUM\n"));

                status = STATUS_BUFFER_TOO_SMALL;
                bytesReturned = sizeof(USBFX2_PIPE_ENUM);
                break;

            }

            //
            // This is a METHOD_BUFFERED request
            //
            whichPipe = *(PUSBFX2_PIPE_ENUM)Irp->AssociatedIrp.SystemBuffer;

            //
            // Post the IRP off to the reset pipe code. 
            //  This request may pend while the device powers up,
            //  so just return whatever SubmitResetPipe
            //  returns to us and don't touch the IRP
            //
            status = SubmitResetPipe(devExt, Irp, whichPipe);

            OsrTracePrint(TRACE_LEVEL_INFORMATION,OSRDBG_SELECTIVE_SUSPEND,
               ("UsbFx2LkDeviceControl: SubmitResetPipe returned "\
                                                "0x%x (%s). Exiting...\n",
                status,OsrNtStatusToString(status)));

            return status;

        }
        case IOCTL_OSRUSBFX2_GET_DEVICE_DESCRIPTOR: {

            PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL;

            //
            // This IOCTL doesn't use an input
            //  buffer. Make sure that the caller knows that
            //  and is playing by the rules.
            //
            if (inputBufferLength) {

                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User passed an input buffer - Incorrect usage for this IOCTL\n"));

                status = STATUS_INVALID_PARAMETER;
                bytesReturned = 0;
                break;

            }

            //
            // Make sure the caller's output buffer is large enough
            //  to hold the device descriptor
            //
            if (outputBufferLength < sizeof(USB_DEVICE_DESCRIPTOR)) {

                //
                // Let the user know how big the buffer was
                //  supposed to be
                //
                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User's output buffer is too small for this IOCTL\n"));

                status = STATUS_BUFFER_TOO_SMALL;
                bytesReturned = sizeof(USB_DEVICE_DESCRIPTOR);
                break;

            }

            //
            // This is a METHOD_BUFFERED request
            //
            deviceDescriptor = (PUSB_DEVICE_DESCRIPTOR)Irp->AssociatedIrp.SystemBuffer;

            //
            // Get our device's descriptor and return it to the user
            // 
            status = GetDeviceDescriptor(devExt, deviceDescriptor, &bytesReturned);

            break;
        }
        case IOCTL_OSRUSBFX2_GET_CONFIGURATION_DESCRIPTOR: {

            PUSB_CONFIGURATION_DESCRIPTOR configDescriptor = NULL;

            //
            // This IOCTL doesn't use an input
            //  buffer. Make sure that the caller knows that
            //  and is playing by the rules.
            //
            if (inputBufferLength) {

                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User passed an input buffer - Incorrect usage for this IOCTL\n"));

                status = STATUS_INVALID_PARAMETER;
                bytesReturned = 0;
                break;

            }

            //
            // Make sure the caller's output buffer is large enough
            //  to hold the configuration descriptor
            //
            if (outputBufferLength < sizeof(USB_CONFIGURATION_DESCRIPTOR)) {

                //
                // Let the user know how big the buffer was
                //  supposed to be
                //
                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User's output buffer is too small for this IOCTL\n"));

                status = STATUS_BUFFER_TOO_SMALL;
                bytesReturned = sizeof(USB_CONFIGURATION_DESCRIPTOR);
                break;

            }

            //
            // This is a METHOD_BUFFERED request
            //
            configDescriptor = (PUSB_CONFIGURATION_DESCRIPTOR)Irp->AssociatedIrp.SystemBuffer;

            //
            // Get our device's configuration descriptor and return it 
            //  to the user
            // 
            status = GetConfigurationDescriptor(devExt, configDescriptor, &bytesReturned);

            break;
        }
        case IOCTL_OSRUSBFX2_GET_INTERFACE_INFORMATION: {

            PUSBD_INTERFACE_INFORMATION interfaceDescriptor = NULL;

            //
            // This IOCTL doesn't use an input
            //  buffer. Make sure that the caller knows that
            //  and is playing by the rules.
            //
            if (inputBufferLength) {

                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User passed an input buffer - Incorrect usage for this IOCTL\n"));

                status = STATUS_INVALID_PARAMETER;
                bytesReturned = 0;
                break;

            }

            //
            // Make sure the caller's output buffer is large enough
            //  to hold the configuration descriptor
            //
            if (outputBufferLength < devExt->UsbInterface->Length) {

                //
                // Let the user know how big the buffer was
                //  supposed to be
                //
                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User's output buffer is too small for this IOCTL\n"));

                status = STATUS_BUFFER_TOO_SMALL;
                bytesReturned = devExt->UsbInterface->Length;
                break;

            }

            //
            // This is a METHOD_BUFFERED request
            //
            interfaceDescriptor = (PUSBD_INTERFACE_INFORMATION)Irp->AssociatedIrp.SystemBuffer;

            //
            // Get our device's configuration descriptor and return it 
            //  to the user
            // 
            status = GetInterfaceInformation(devExt, interfaceDescriptor, &bytesReturned);

            break;
        }
        case IOCTL_OSRUSBFX2_GET_PIPE_INFORMATION: {

            PUSBD_PIPE_INFORMATION pipeInfo = NULL;
            USBFX2_PIPE_ENUM whichPipe;

            //
            // Make sure the caller's output buffer is large enough
            //  to hold the pipe info
            //
            if (outputBufferLength < sizeof(USBD_PIPE_INFORMATION)) {

                //
                // Let the user know how big the buffer was
                //  supposed to be
                //
                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User's output buffer is too small for this IOCTL, expecting a USBD_PIPE_INFORMATION\n"));

                status = STATUS_BUFFER_TOO_SMALL;
                bytesReturned = sizeof(USBD_PIPE_INFORMATION);
                break;

            }

            if (inputBufferLength < sizeof(USBFX2_PIPE_ENUM)) {

                //
                // Let the user know how big the buffer was
                //  supposed to be
                //
                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User's input buffer is too small for this IOCTL, expecting a USBFX2_PIPE_ENUM\n"));

                status = STATUS_BUFFER_TOO_SMALL;
                bytesReturned = sizeof(USBFX2_PIPE_ENUM);
                break;

            }

            //
            // For METHOD_BUFFERED requests, the input buffer is the
            //  same as the output buffer. We need to first use the buffer
            //  as an input buffer and capture our USBFX2_PIPE_ENUM
            //
            whichPipe = *(PUSBFX2_PIPE_ENUM)Irp->AssociatedIrp.SystemBuffer;

            //
            // Now we can go ahead and use the buffer as an output buffer
            // 
            pipeInfo = (PUSBD_PIPE_INFORMATION)Irp->AssociatedIrp.SystemBuffer;

            //
            // Return information about this pipe to the user
            //
            status = GetPipeInformation(devExt, whichPipe, pipeInfo, &bytesReturned);

            break;
        }
        case IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE: {
  
            //
            // This IOCTL doesn't use an input
            //  buffer. Make sure that the caller knows that
            //  and is playing by the rules.
            //
            if (inputBufferLength) {

                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User passed an input buffer - Incorrect usage for this IOCTL\n"));

                status = STATUS_INVALID_PARAMETER;
                bytesReturned = 0;
                break;

            }

            //
            // Make sure the caller's output buffer is large enough
            //  to hold the configuration descriptor
            //
            if (!outputBufferLength || 
                (outputBufferLength > devExt->InterruptPipe->PipeInformation.MaximumTransferSize)) {

                //
                // Let the user know how big the buffer was
                //  supposed to be
                //
                OsrTracePrint(TRACE_LEVEL_ERROR,OSRDBG_IOCTL_INFO, 
                    ("UsbFx2LkDeviceControl: User's output buffer is too small for this IOCTL\n"));

                status = STATUS_BUFFER_TOO_SMALL;
                bytesReturned = sizeof(UCHAR);
                break;

            }

            //
            // Post the IRP off to the get interrupt data code. 
            //  This request may pend for an indefinite amount of 
            //  time, so just return whatever SubmitInterruptDataRequest
            //  returns to us and don't touch the IRP
            //
            status = SubmitInterruptDataRequest(devExt, Irp);

            OsrTracePrint(TRACE_LEVEL_INFORMATION,OSRDBG_SELECTIVE_SUSPEND,
               ("UsbFx2LkDeviceControl: SubmitInterruptDataRequest returned "\
                                                    "0x%x (%s). Exiting...\n",
                status,OsrNtStatusToString(status)));

            return status;

        }
        default: {

            OsrTracePrint(TRACE_LEVEL_VERBOSE,OSRDBG_IOCTL_INFO,("UsbFx2LkDeviceControl: Passing on unknown IOCTL\n"));

            //
            // The default action is to just pass the IRP
            //  down to the lower driver. Maybe HE handles it...
            //
            IoSkipCurrentIrpStackLocation(Irp);
            status = IoCallDriver(devExt->DeviceToSendIrpsTo, Irp);

            //
            // We're done with this request
            //
            OsrDecrementOutstandingIoCount(devExt,__FILE__,__LINE__);

            return status;
        }

    }

    OsrTracePrint(TRACE_LEVEL_INFORMATION,OSRDBG_IOCTL_INFO, 
        ("UsbFx2LkDeviceControl: Completing IRP: 0x%p, Status: 0x%x, BytesReturned: 0x%x\n", 
        Irp, status, bytesReturned));


    //
    // Complete the IRP appropriately
    //
    Irp->IoStatus.Status = status;
    Irp->IoStatus.Information = bytesReturned;
    IoCompleteRequest(Irp,IO_NO_INCREMENT);

    //
    // We're done with this request
    //
    OsrDecrementOutstandingIoCount(devExt,__FILE__,__LINE__);

    OsrTracePrint(TRACE_LEVEL_VERBOSE,OSRDBG_IOCTL_INFO,("UsbFx2LkDeviceControl: Exit\n"));

    return status;
}


///////////////////////////////////////////////////////////////////////////////
//
// IoctlToString
//
//  Takes the IOCTL passed in and tries to match it up with
//   one of our supported IOCTLs. If there's a match, returns
//   a string to be used for debugging purposes.
//
//
//  INPUTS:
//
//      Ioctl  -  An IOCTL value
//
//  OUTPUTS:
//
//      None
//
//  RETURNS:
//
//      A string containing the manifest oonstant name of the
//      IOCTL if there is one. "Unknown" otherwiese
//
//  IRQL:
//
//      IRQL == Any
//
//  CONTEXT:
//
//      Any
//
//  NOTES:
//
///////////////////////////////////////////////////////////////////////////////
LPCSTR IoctlToString(ULONG Ioctl) 
{
    switch (Ioctl) {

        case IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY:
            return "IOCTL_OSRUSBFX2_GET_BAR_GRAPH_DISPLAY";

        case IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY:
            return "IOCTL_OSRUSBFX2_SET_BAR_GRAPH_DISPLAY";

        case IOCTL_OSRUSBFX2_READ_SWITCHES:
            return "IOCTL_OSRUSBFX2_READ_SWITCHES";

        case IOCTL_OSRUSBFX2_RESET_PIPE:
            return "IOCTL_OSRUSBFX2_RESET_PIPE";

        case IOCTL_OSRUSBFX2_GET_DEVICE_DESCRIPTOR:
            return "IOCTL_OSRUSBFX2_GET_DEVICE_DESCRIPTOR";

        case IOCTL_OSRUSBFX2_GET_CONFIGURATION_DESCRIPTOR:
            return "IOCTL_OSRUSBFX2_GET_CONFIGURATION_DESCRIPTOR";

        case IOCTL_OSRUSBFX2_GET_PIPE_INFORMATION:
            return "IOCTL_OSRUSBFX2_GET_PIPE_INFORMATION";

        case IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY:
            return "IOCTL_OSRUSBFX2_GET_7_SEGMENT_DISPLAY";

        case IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY:
            return "IOCTL_OSRUSBFX2_SET_7_SEGMENT_DISPLAY";

        case IOCTL_OSRUSBFX2_GET_INTERFACE_INFORMATION:
            return "IOCTL_OSRUSBFX2_GET_INTERFACE_INFORMATION";

        case IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE:
            return "IOCTL_OSRUSBFX2_GET_INTERRUPT_MESSAGE";

        default:
            break;
    }

    return "Unknown IOCTL";
}



?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品嫩草影院av蜜臀| 国产乱理伦片在线观看夜一区| 国产精品黄色在线观看| 亚洲激情综合网| 久久久国际精品| 久久久久久久久蜜桃| 精品久久久久久最新网址| 56国语精品自产拍在线观看| 欧美性猛片xxxx免费看久爱| 一本一道久久a久久精品| 99精品黄色片免费大全| 91啪亚洲精品| 在线观看日产精品| 欧美日韩国产乱码电影| 欧美精品一级二级| 日韩三级视频在线看| 精品国一区二区三区| www亚洲一区| 国产精品青草久久| 专区另类欧美日韩| 亚洲与欧洲av电影| 日韩电影在线观看网站| 免费成人在线网站| 国产中文字幕精品| 大陆成人av片| 在线观看国产91| 欧美一区二区三区四区在线观看| 日韩视频在线你懂得| 精品99一区二区| 国产精品美日韩| 一区二区三区国产| 午夜视频在线观看一区二区 | 国模冰冰炮一区二区| 韩国理伦片一区二区三区在线播放| 国产在线精品免费| 成人国产精品免费网站| 色婷婷综合中文久久一本| 欧美日韩二区三区| ww亚洲ww在线观看国产| 中文字幕综合网| 亚洲影院免费观看| 久久精品国产秦先生| 成人免费毛片嘿嘿连载视频| 色诱亚洲精品久久久久久| 在线不卡免费欧美| 国产欧美日韩视频一区二区| 亚洲欧美福利一区二区| 日韩av电影免费观看高清完整版 | 中文字幕一区免费在线观看| 亚洲一区二区av在线| 免费成人av在线| 成人禁用看黄a在线| 欧美影院一区二区三区| 精品国产欧美一区二区| 亚洲人成网站色在线观看| 日本不卡一二三| 99久久精品国产导航| 91精品国产丝袜白色高跟鞋| 国产精品成人免费在线| 日韩电影免费在线观看网站| 成人免费看视频| 在线不卡一区二区| 亚洲视频每日更新| 激情五月播播久久久精品| 色爱区综合激月婷婷| 亚洲国产精品欧美一二99 | 欧美一级淫片007| 亚洲视频一二三区| 久久99久久精品| 欧美视频一区二| 日本一区二区不卡视频| 奇米色777欧美一区二区| 色丁香久综合在线久综合在线观看| 欧美精品一区男女天堂| 午夜视频在线观看一区二区 | 在线观看网站黄不卡| 国产日韩欧美综合一区| 丝袜美腿成人在线| 在线免费一区三区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 北条麻妃国产九九精品视频| 日韩一区二区精品| 亚洲国产精品综合小说图片区| av一区二区三区四区| 久久日一线二线三线suv| 丝袜美腿高跟呻吟高潮一区| 在线看国产一区| 亚洲欧美一区二区三区孕妇| 国产在线观看一区二区| 日韩免费一区二区三区在线播放| 亚洲精品国产a| 91亚洲精品久久久蜜桃网站| 国产清纯白嫩初高生在线观看91| 蜜桃视频第一区免费观看| 欧美这里有精品| 亚洲欧洲精品天堂一级| 懂色av一区二区三区免费看| 久久久久九九视频| 国产一区二区三区日韩| 日韩欧美国产wwwww| 日韩福利电影在线观看| 国产精品国产馆在线真实露脸| 国产麻豆一精品一av一免费| 欧美精品一区在线观看| 激情综合色综合久久| 精品成人在线观看| 久久国产夜色精品鲁鲁99| 在线播放一区二区三区| 亚洲成人自拍偷拍| 欧美人牲a欧美精品| 天天影视涩香欲综合网| 欧美理论片在线| 日精品一区二区| 91麻豆精品国产91久久久 | 亚洲精品免费看| 在线免费亚洲电影| 亚洲第一会所有码转帖| 91精品国产免费| 另类小说图片综合网| 久久久久久97三级| 成人中文字幕合集| 最新中文字幕一区二区三区| av资源网一区| 伊人开心综合网| 884aa四虎影成人精品一区| 日韩电影免费在线看| 欧美精品一区二区三区很污很色的| 久久99久久久欧美国产| 久久精子c满五个校花| 成人激情动漫在线观看| 亚洲手机成人高清视频| 欧美日韩三级一区二区| 麻豆国产一区二区| 中文在线一区二区| 色视频一区二区| 日韩av中文字幕一区二区| 26uuu精品一区二区在线观看| 成人在线视频首页| 亚洲一区视频在线| 欧美不卡视频一区| youjizz久久| 午夜精品久久久久| 久久久久久久综合| 91国内精品野花午夜精品| 天天色图综合网| 久久久青草青青国产亚洲免观| av亚洲精华国产精华| 天天影视色香欲综合网老头| 久久久久久亚洲综合影院红桃| 99免费精品视频| 三级影片在线观看欧美日韩一区二区| 精品国产第一区二区三区观看体验 | 午夜久久久久久| 久久女同互慰一区二区三区| 91久久精品一区二区二区| 免费日本视频一区| 中文字幕一区二区三区在线观看| 欧美日韩色一区| 成人美女视频在线观看| 天天操天天干天天综合网| 久久精品视频免费观看| 欧美视频三区在线播放| 国产福利一区二区三区视频 | 色诱亚洲精品久久久久久| 精品综合免费视频观看| 樱花草国产18久久久久| 久久这里只有精品视频网| 欧美在线不卡一区| 高清shemale亚洲人妖| 石原莉奈在线亚洲三区| 成人免费一区二区三区视频| 欧美刺激脚交jootjob| 91国偷自产一区二区三区成为亚洲经典| 黄色资源网久久资源365| 一级日本不卡的影视| 久久久久久**毛片大全| 91精品国产美女浴室洗澡无遮挡| 91一区一区三区| 岛国精品在线观看| 捆绑紧缚一区二区三区视频| 亚洲黄色小说网站| 日本一区二区三区高清不卡| 日韩欧美国产麻豆| 欧美精品欧美精品系列| 91免费观看国产| 大桥未久av一区二区三区中文| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲精品v日韩精品| 亚洲欧洲精品一区二区三区不卡| 久久久噜噜噜久噜久久综合| 制服丝袜中文字幕一区| 欧美性一区二区| 色av成人天堂桃色av| 成人高清免费观看| 国产精品系列在线播放| 精品一区二区国语对白| 丝袜诱惑制服诱惑色一区在线观看| 亚洲免费观看高清完整版在线观看| 国产精品剧情在线亚洲| 中文在线免费一区三区高中清不卡|