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

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

?? ioctl.c

?? Libusb-win32 is a library that allows userspace application to access USB devices on Windows opera
?? C
字號:
/* LIBUSB-WIN32, Generic Windows USB Library * Copyright (c) 2002-2005 Stephan Meyer <ste_meyer@web.de> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "libusb_driver.h"NTSTATUS dispatch_ioctl(libusb_device_t *dev, IRP *irp){  int ret = 0;  NTSTATUS status = STATUS_SUCCESS;  IO_STACK_LOCATION *stack_location = IoGetCurrentIrpStackLocation(irp);  ULONG control_code =    stack_location->Parameters.DeviceIoControl.IoControlCode;  ULONG input_buffer_length    = stack_location->Parameters.DeviceIoControl.InputBufferLength;  ULONG output_buffer_length    = stack_location->Parameters.DeviceIoControl.OutputBufferLength;  ULONG transfer_buffer_length    = stack_location->Parameters.DeviceIoControl.OutputBufferLength;  libusb_request *request = (libusb_request *)irp->AssociatedIrp.SystemBuffer;  char *output_buffer = (char *)irp->AssociatedIrp.SystemBuffer;  char *input_buffer = (char *)irp->AssociatedIrp.SystemBuffer;  MDL *transfer_buffer_mdl = irp->MdlAddress;  status = remove_lock_acquire(dev);  if(!NT_SUCCESS(status))    {       status = complete_irp(irp, status, 0);      remove_lock_release(dev);      return status;    }  if(!request || input_buffer_length < sizeof(libusb_request)     || input_buffer_length > LIBUSB_MAX_READ_WRITE     || output_buffer_length > LIBUSB_MAX_READ_WRITE     || transfer_buffer_length > LIBUSB_MAX_READ_WRITE)    {       DEBUG_ERROR("dispatch_ioctl(): invalid input or output buffer\n");      status = complete_irp(irp, STATUS_INVALID_PARAMETER, 0);      remove_lock_release(dev);      return status;    }  DEBUG_PRINT_NL();  switch(control_code)     {         case LIBUSB_IOCTL_SET_CONFIGURATION:      status = set_configuration(dev, request->configuration.configuration,                                 request->timeout);      break;          case LIBUSB_IOCTL_GET_CONFIGURATION:            if(!output_buffer || output_buffer_length < 1)        {          DEBUG_ERROR("dispatch_ioctl(), get_configuration: invalid output "                      "buffer");          status = STATUS_INVALID_PARAMETER;          break;        }      status = get_configuration(dev, output_buffer, &ret, request->timeout);      break;    case LIBUSB_IOCTL_SET_INTERFACE:      status = set_interface(dev, request->interface.interface,                             request->interface.altsetting, request->timeout);      break;    case LIBUSB_IOCTL_GET_INTERFACE:      if(!output_buffer || output_buffer_length < 1)        {          DEBUG_ERROR("dispatch_ioctl(), get_interface: invalid output "                      "buffer");          status =  STATUS_INVALID_PARAMETER;          break;        }      status = get_interface(dev, request->interface.interface,                             output_buffer, &ret, request->timeout);      break;    case LIBUSB_IOCTL_SET_FEATURE:      status = set_feature(dev, request->feature.recipient,                           request->feature.index, request->feature.feature,                           request->timeout);            break;    case LIBUSB_IOCTL_CLEAR_FEATURE:      status = clear_feature(dev, request->feature.recipient,                             request->feature.index, request->feature.feature,                             request->timeout);            break;    case LIBUSB_IOCTL_GET_STATUS:      if(!output_buffer || output_buffer_length < 2)        {          DEBUG_ERROR("dispatch_ioctl(), get_status: invalid output buffer");          status = STATUS_INVALID_PARAMETER;          break;        }      status = get_status(dev, request->status.recipient,                          request->status.index, output_buffer,                          &ret, request->timeout);      break;    case LIBUSB_IOCTL_SET_DESCRIPTOR:      if(input_buffer_length <= sizeof(libusb_request))        {          DEBUG_ERROR("dispatch_ioctl(), set_descriptor: invalid input "                      "buffer");          status = STATUS_INVALID_PARAMETER;          break;        }            status = set_descriptor(dev,                               input_buffer + sizeof(libusb_request),                               input_buffer_length - sizeof(libusb_request),                               request->descriptor.type,                              request->descriptor.recipient,                              request->descriptor.index,                              request->descriptor.language_id,                               &ret, request->timeout);            break;    case LIBUSB_IOCTL_GET_DESCRIPTOR:      if(!output_buffer || !output_buffer_length)        {          DEBUG_ERROR("dispatch_ioctl(), get_descriptor: invalid output "                      "buffer");          status = STATUS_INVALID_PARAMETER;          break;        }      status = get_descriptor(dev, output_buffer,                               output_buffer_length,                              request->descriptor.type,                              request->descriptor.recipient,                              request->descriptor.index,                              request->descriptor.language_id,                               &ret, request->timeout);            break;          case LIBUSB_IOCTL_INTERRUPT_OR_BULK_READ:      if(!transfer_buffer_mdl)        {          DEBUG_ERROR("dispatch_ioctl(), bulk_int_read: invalid transfer "                      "buffer");          status = STATUS_INVALID_PARAMETER;          break;        }      return transfer(dev, irp,                      USBD_TRANSFER_DIRECTION_IN,                      URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER,                      request->endpoint.endpoint,                      request->endpoint.packet_size,                      transfer_buffer_mdl,                       transfer_buffer_length);    case LIBUSB_IOCTL_INTERRUPT_OR_BULK_WRITE:      /* we don't check 'transfer_buffer_mdl' here because it might be NULL */      /* if the DLL requests to send a zero-length packet */      return transfer(dev, irp,                      USBD_TRANSFER_DIRECTION_OUT,                      URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER,                      request->endpoint.endpoint,                      request->endpoint.packet_size,                      transfer_buffer_mdl,                       transfer_buffer_length);    case LIBUSB_IOCTL_VENDOR_READ:      if(output_buffer_length && !output_buffer)        {          DEBUG_ERROR("dispatch_ioctl(), vendor_read: invalid output buffer");          status = STATUS_INVALID_PARAMETER;          break;        }      status = vendor_class_request(dev,                                    request->vendor.type,                                     request->vendor.recipient,                                    request->vendor.request,                                    request->vendor.value,                                    request->vendor.index,                                    output_buffer,                                    output_buffer_length,                                    USBD_TRANSFER_DIRECTION_IN,                                    &ret, request->timeout);      break;    case LIBUSB_IOCTL_VENDOR_WRITE:            status =         vendor_class_request(dev,                             request->vendor.type,                              request->vendor.recipient,                             request->vendor.request,                             request->vendor.value,                             request->vendor.index,                             input_buffer_length == sizeof(libusb_request) ?                             NULL : input_buffer + sizeof(libusb_request),                             input_buffer_length - sizeof(libusb_request),                             USBD_TRANSFER_DIRECTION_OUT,                              &ret, request->timeout);      break;    case LIBUSB_IOCTL_RESET_ENDPOINT:      status = reset_endpoint(dev, request->endpoint.endpoint,                              request->timeout);      break;          case LIBUSB_IOCTL_ABORT_ENDPOINT:	       status = abort_endpoint(dev, request->endpoint.endpoint,                              request->timeout);      break;    case LIBUSB_IOCTL_RESET_DEVICE:             status = reset_device(dev, request->timeout);      break;    case LIBUSB_IOCTL_SET_DEBUG_LEVEL:      DEBUG_SET_LEVEL(request->debug.level);      break;    case LIBUSB_IOCTL_GET_VERSION:      if(!request || output_buffer_length < sizeof(libusb_request))        {          DEBUG_ERROR("dispatch_ioctl(), get_version: invalid output buffer");          status = STATUS_INVALID_PARAMETER;          break;        }      request->version.major = VERSION_MAJOR;      request->version.minor = VERSION_MINOR;      request->version.micro = VERSION_MICRO;      request->version.nano  = VERSION_NANO;      ret = sizeof(libusb_request);      break;    case LIBUSB_IOCTL_CLAIM_INTERFACE:      status = claim_interface(dev, request->interface.interface);      break;    case LIBUSB_IOCTL_RELEASE_INTERFACE:      status = release_interface(dev, request->interface.interface);      break;    case LIBUSB_IOCTL_ISOCHRONOUS_READ:      if(!transfer_buffer_mdl)        {          DEBUG_ERROR("dispatch_ioctl(), isochronous_read: invalid transfer "                      "buffer");          status = STATUS_INVALID_PARAMETER;          break;        }      return transfer(dev, irp, USBD_TRANSFER_DIRECTION_IN,                      URB_FUNCTION_ISOCH_TRANSFER, request->endpoint.endpoint,                      request->endpoint.packet_size, transfer_buffer_mdl,                       transfer_buffer_length);    case LIBUSB_IOCTL_ISOCHRONOUS_WRITE:      if(!transfer_buffer_mdl)        {          DEBUG_ERROR("dispatch_ioctl(), isochronous_write: invalid transfer "                      "buffer");          status = STATUS_INVALID_PARAMETER;          break;        }      return transfer(dev, irp, USBD_TRANSFER_DIRECTION_OUT,                      URB_FUNCTION_ISOCH_TRANSFER, request->endpoint.endpoint,                      request->endpoint.packet_size, transfer_buffer_mdl,                       transfer_buffer_length);    default:            status = STATUS_INVALID_PARAMETER;    }  status = complete_irp(irp, status, ret);    remove_lock_release(dev);  return status;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产福利国产秒拍| 成人激情电影免费在线观看| 欧美午夜精品久久久久久超碰 | 97国产一区二区| 国产日韩欧美亚洲| 精品亚洲porn| 91麻豆精品国产| 石原莉奈在线亚洲二区| 欧美日韩在线三级| 午夜久久电影网| 欧美三日本三级三级在线播放| 亚洲视频免费在线观看| 99久久婷婷国产| 国产精品国产成人国产三级| 成人国产精品免费观看动漫| 中文字幕第一页久久| 国产99精品国产| 国产亚洲成av人在线观看导航| 国内精品久久久久影院一蜜桃| 91精品婷婷国产综合久久| 日韩成人免费电影| 制服丝袜亚洲色图| 美洲天堂一区二卡三卡四卡视频| 欧美一级国产精品| 精品一区二区精品| 久久色.com| 懂色中文一区二区在线播放| 国产精品美女久久久久久2018| 波多野洁衣一区| 亚洲图片激情小说| 欧美主播一区二区三区美女| 亚洲成a人v欧美综合天堂下载| 欧美日韩的一区二区| 日韩成人av影视| 精品久久久久久久久久久久久久久| 精品影视av免费| 国产日韩欧美不卡在线| a级高清视频欧美日韩| 一区二区三区四区中文字幕| 欧美视频一区二区| 日本成人在线视频网站| 日韩欧美久久久| 国产精品一区二区在线看| 韩国一区二区三区| 久久影院视频免费| bt7086福利一区国产| 亚洲一区二区三区不卡国产欧美| 在线播放日韩导航| 韩日欧美一区二区三区| 国产精品成人在线观看| 欧美日韩一级黄| 久草精品在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 91美女片黄在线观看91美女| 亚洲va欧美va国产va天堂影院| 欧美一区二区三级| 国产成人啪免费观看软件| 亚洲男同性恋视频| 日韩一区二区在线播放| 大陆成人av片| 亚洲国产精品久久人人爱蜜臀| 欧美不卡视频一区| 不卡视频一二三| 午夜精品久久久久久久蜜桃app| 精品美女在线观看| 91性感美女视频| 轻轻草成人在线| 欧美国产亚洲另类动漫| 欧美午夜电影在线播放| 精品一区二区三区在线播放视频 | 91精品欧美综合在线观看最新| 国产精品91一区二区| 伊人性伊人情综合网| 精品88久久久久88久久久| 91在线观看高清| 另类小说图片综合网| 亚洲欧美日韩国产综合| 日韩一区二区免费在线观看| 成人高清免费观看| 男人的天堂亚洲一区| 综合网在线视频| 日韩精品一区二区在线观看| 色综合天天综合| 国产在线精品一区二区| 亚洲一区二区三区四区不卡| 久久久午夜精品| 在线成人午夜影院| 97se亚洲国产综合自在线观| 久久国产夜色精品鲁鲁99| 一区二区三区四区在线播放 | 欧美日韩亚洲高清一区二区| 国产成人av影院| 轻轻草成人在线| 一区二区三区色| 国产日韩视频一区二区三区| 7777精品伊人久久久大香线蕉 | 亚洲欧美乱综合| 久久精品日韩一区二区三区| 欧美久久久久免费| 91麻豆产精品久久久久久| 国产乱人伦偷精品视频不卡| 日一区二区三区| 亚洲伦理在线精品| 欧美激情一区二区三区四区| 日韩精品在线一区| 欧美日本国产一区| 亚洲欧洲成人精品av97| 久久综合九色综合欧美就去吻| 在线成人高清不卡| 日本二三区不卡| 99视频热这里只有精品免费| 精品一区二区三区欧美| 日韩av中文字幕一区二区| 亚洲欧美日韩精品久久久久| 亚洲国产精品二十页| 久久综合九色欧美综合狠狠| 日韩一区二区三区在线观看| 欧美视频中文一区二区三区在线观看| 99久久久国产精品| 成人午夜电影久久影院| 国产乱人伦偷精品视频免下载| 久久er精品视频| 青青草原综合久久大伊人精品优势| 一区二区三区在线不卡| 亚洲激情图片qvod| 亚洲免费观看高清完整版在线| 中文字幕人成不卡一区| 国产精品国产三级国产专播品爱网 | 色94色欧美sute亚洲线路一ni| 波多野结衣在线一区| 国产精品69久久久久水密桃| 国产一区三区三区| 国产精品亚洲视频| 国产精品18久久久| 国产高清视频一区| 成人免费av网站| 福利一区在线观看| www.在线成人| 91论坛在线播放| 在线一区二区观看| 欧美日韩电影一区| 欧美福利电影网| 欧美电影在哪看比较好| 91精品久久久久久久99蜜桃| 欧美日韩成人综合在线一区二区| 福利一区在线观看| 97国产一区二区| 国产剧情av麻豆香蕉精品| 激情深爱一区二区| 国产在线一区观看| 激情久久五月天| 国产成人小视频| 国产成a人亚洲精| 国产成人精品1024| 色网站国产精品| 亚洲美女淫视频| 亚洲乱码中文字幕| 一区二区三区**美女毛片| 午夜不卡在线视频| 日韩高清国产一区在线| 免费观看在线综合色| 玖玖九九国产精品| 国产精品乡下勾搭老头1| 国产激情一区二区三区四区| 国产一二精品视频| 丁香啪啪综合成人亚洲小说| 国产在线视频一区二区| av亚洲精华国产精华精| 91视频你懂的| 在线观看日韩毛片| 欧美日韩精品电影| 欧美成人综合网站| 国产无一区二区| 国产精品久久久久久久久久久免费看 | 欧美v日韩v国产v| 国产人成亚洲第一网站在线播放| 久久亚洲一区二区三区四区| 久久精品一区蜜桃臀影院| 国产精品丝袜黑色高跟| 国产精品美女久久久久久久网站| 一区av在线播放| 天堂av在线一区| 久久精品免费看| 国产suv精品一区二区三区| 日本乱人伦aⅴ精品| 欧美区在线观看| 精品国产伦一区二区三区观看体验| 久久久久国产免费免费 | 日韩欧美中文字幕制服| 精品国产麻豆免费人成网站| 中文字幕在线观看不卡| 亚洲国产日韩av| 久久精品噜噜噜成人88aⅴ| 国产福利精品一区| 欧美视频完全免费看| 精品国产人成亚洲区| 亚洲素人一区二区| 日韩成人免费看| 91性感美女视频| 日韩欧美专区在线|