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

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

?? testdispatch.c

?? USB2.0完整資料
?? C
字號:
#include "usbdriver.h"

ULONG UsbVendorRequest(IN PDEVICE_OBJECT DeviceObject,
                          PVENDOR_REQUEST_IN pVendorRequest);
ULONG UsbGetDeviceDescriptor(IN PDEVICE_OBJECT fdo,
							 PVOID pvOutputBuffer);
ULONG UsbGetStringDescriptor(IN PDEVICE_OBJECT fdo,
                             UCHAR             Index,
                             USHORT            LanguageId,
                             PVOID             pvOutputBuffer,
                             ULONG             ulLength);
ULONG UsbGetConfigDescriptor(IN PDEVICE_OBJECT fdo,
                             PVOID   pvOutputBuffer,
                             ULONG   ulLength);
//
NTSTATUS TestCreate(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
{
	NTSTATUS ntStatus=STATUS_SUCCESS;
    PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION )fdo->DeviceExtension;

    pdx->OpenHandles++;
							
    Irp->IoStatus.Status = STATUS_SUCCESS;
    Irp->IoStatus.Information = 0;
    IoCompleteRequest (Irp, IO_NO_INCREMENT);
    return ntStatus;
}
//
NTSTATUS TestClose(IN PDEVICE_OBJECT fdo, IN PIRP Irp)
{
   NTSTATUS ntStatus=STATUS_SUCCESS;
   PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION )fdo->DeviceExtension;

   pdx->OpenHandles--;

   Irp->IoStatus.Status = STATUS_SUCCESS;
   Irp->IoStatus.Information = 0;
   IoCompleteRequest (Irp, IO_NO_INCREMENT);
   return ntStatus;
}
//
NTSTATUS TestIOCTL(IN PDEVICE_OBJECT fdo,IN PIRP Irp)
{
	NTSTATUS ntStatus;
	PIO_STACK_LOCATION IrpStack;
    PDEVICE_EXTENSION pdx;
    ULONG IoControlCode;
    PVOID IoBuffer;
    ULONG InputBufferLength;
    ULONG OutputBufferLength;
    ULONG length;
    PUCHAR pch;

	pdx = (PDEVICE_EXTENSION )fdo->DeviceExtension;
    if (!LockDevice(fdo))
		return CompleteRequest(Irp, STATUS_DELETE_PENDING, 0);

   IrpStack = IoGetCurrentIrpStackLocation (Irp);
   Irp->IoStatus.Status = STATUS_SUCCESS;
   Irp->IoStatus.Information = 0;

   IoBuffer           = Irp->AssociatedIrp.SystemBuffer;
   InputBufferLength  = IrpStack->Parameters.DeviceIoControl.InputBufferLength;
   OutputBufferLength = IrpStack->Parameters.DeviceIoControl.OutputBufferLength;
   IoControlCode = IrpStack->Parameters.DeviceIoControl.IoControlCode;
   
   switch (IoControlCode) {
      case IOCTL_Cyusb_VENDOR_REQUEST:
         length = UsbVendorRequest (fdo, (PVENDOR_REQUEST_IN) IoBuffer);

         if (length)
         {
            Irp->IoStatus.Information = length;
            Irp->IoStatus.Status = STATUS_SUCCESS;
         }
         else
         {
            Irp->IoStatus.Status = STATUS_SUCCESS;
         }
         break;
      case IOCTL_Cyusb_GET_DEVICE_DESCRIPTOR:
		  {
           length = UsbGetDeviceDescriptor (fdo, IoBuffer);
              Irp->IoStatus.Information = length;
              Irp->IoStatus.Status = STATUS_SUCCESS;
		  }
		  break;
      case IOCTL_Cyusb_GET_STRING_DESCRIPTOR:
		  {
			  PGET_STRING_DESCRIPTOR_IN Input = IoBuffer;

              if ((InputBufferLength = sizeof(GET_STRING_DESCRIPTOR_IN)) &&
                  (OutputBufferLength > 0)) {
				  length = UsbGetStringDescriptor (fdo,
                                                   Input->Index,
                                                   Input->LanguageId,
                                                   IoBuffer,
                                                   OutputBufferLength);
                  if (length) {
					  Irp->IoStatus.Information = length;
                      Irp->IoStatus.Status = STATUS_SUCCESS;
				  }
                  else
					  Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
			  }
              else            
               Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
		  }      
          break;

         case IOCTL_Cyusb_GET_CONFIGURATION_DESCRIPTOR:
			 {
                 length = UsbGetConfigDescriptor (fdo, IoBuffer, OutputBufferLength);
                 Irp->IoStatus.Information = length;
                 Irp->IoStatus.Status = STATUS_SUCCESS;
			 }
             break;
         default:
			  Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
     } 
    UnlockDevice(fdo);
    ntStatus = Irp->IoStatus.Status;
    IoCompleteRequest (Irp,IO_NO_INCREMENT);
    return ntStatus;
}
//
ULONG UsbVendorRequest(IN PDEVICE_OBJECT fdo, IN PVENDOR_REQUEST_IN pVendorRequest)
{
    NTSTATUS            ntStatus        = STATUS_SUCCESS;
    PURB                urb             = NULL;
    ULONG               length          = 0;
    PUCHAR buffer = NULL;
    
    urb = ExAllocatePool(NonPagedPool, 
                         sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST));
                         
    if (urb)
    {
        RtlZeroMemory(urb,sizeof(struct  _URB_CONTROL_VENDOR_OR_CLASS_REQUEST));

        urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
        urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE;

        urb->UrbControlVendorClassRequest.TransferBufferLength = pVendorRequest->wLength;
        urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL;
        urb->UrbControlVendorClassRequest.Request = pVendorRequest->bRequest;
        urb->UrbControlVendorClassRequest.Value = pVendorRequest->wValue;
        urb->UrbControlVendorClassRequest.Index = pVendorRequest->wIndex;

        if (pVendorRequest->direction)
        {
            urb->UrbControlVendorClassRequest.TransferFlags |= USBD_TRANSFER_DIRECTION_IN;
            urb->UrbControlVendorClassRequest.TransferBuffer = pVendorRequest;

        }
        else
        {
            urb->UrbControlVendorClassRequest.TransferFlags = 0;
            buffer = ExAllocatePool(NonPagedPool, pVendorRequest->wLength);

            urb->UrbControlVendorClassRequest.TransferBuffer = buffer;

            if (pVendorRequest->wLength == 1)
            {
                buffer[0] = pVendorRequest->bData;
            }
            else
            {
                int i;
                PUCHAR ptr = buffer;

                for (i=0; i < pVendorRequest->wLength; i++)
                {
                    *ptr = (UCHAR) i;
                    ptr++;
                }
            }
        }

        ntStatus = UsbCallUSBDI(fdo, urb);

        if (pVendorRequest->direction)
        {
            length = urb->UrbControlVendorClassRequest.TransferBufferLength;
        }
        else
        {
            length = 0;
        }

        ExFreePool(urb);
        if (buffer)
            ExFreePool(buffer);
    }
    return length;
}
//
ULONG UsbGetDeviceDescriptor(IN PDEVICE_OBJECT fdo,
							 PVOID pvOutputBuffer)
{
	NTSTATUS ntStatus = STATUS_SUCCESS;
    PURB     urb = NULL;
    ULONG    length = 0;
    PDEVICE_EXTENSION   pdx = NULL;

    pdx = fdo->DeviceExtension;
    urb = ExAllocatePool(NonPagedPool, 
                         sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));
    if (urb==NULL)
		return STATUS_NO_MEMORY;        

    if (pvOutputBuffer==NULL) 
		return STATUS_INVALID_PARAMETER;

    UsbBuildGetDescriptorRequest(urb,
                                 (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
                                 USB_DEVICE_DESCRIPTOR_TYPE,  
                                 0,   
                                 0,   
                                 pvOutputBuffer,  
                                 NULL,    
                                 sizeof(USB_DEVICE_DESCRIPTOR), 
                                 NULL);   
                                                                 
    ntStatus = UsbCallUSBDI(fdo, urb);    
    if (NT_SUCCESS(ntStatus)) {
		length = urb->UrbControlDescriptorRequest.TransferBufferLength;
	}
	else
		length = 0;
    ExFreePool(urb);
    return length;
}
//
ULONG UsbGetStringDescriptor(IN PDEVICE_OBJECT fdo,
                             UCHAR             Index,
                             USHORT            LanguageId,
                             PVOID             pvOutputBuffer,
                             ULONG             ulLength)
{
	NTSTATUS ntStatus = STATUS_SUCCESS;
    PURB     urb = NULL;
    ULONG    length = 0;

    urb = ExAllocatePool(NonPagedPool, 
                         sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));
                         
    if (urb==NULL)
		return STATUS_NO_MEMORY;        

    if (pvOutputBuffer==NULL)
		return STATUS_INVALID_PARAMETER;

    UsbBuildGetDescriptorRequest(urb,
                                 (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
                                  USB_STRING_DESCRIPTOR_TYPE, 
                                  Index,            
                                  LanguageId,       
                                  pvOutputBuffer,   
                                  NULL,             
                                  ulLength,         
                                  NULL);            
                                                                  
    ntStatus = UsbCallUSBDI(fdo, urb);
    if (NT_SUCCESS(ntStatus))  {
         length = urb->UrbControlDescriptorRequest.TransferBufferLength;
	}
    else
         length = 0;
    ExFreePool(urb);
    return length;
}
//

ULONG UsbGetConfigDescriptor(IN PDEVICE_OBJECT fdo,
                             PVOID   pvOutputBuffer,
                             ULONG   ulLength)
{
	NTSTATUS  ntStatus = STATUS_SUCCESS;
    PURB      urb = NULL;
    ULONG     length = 0;

    urb = ExAllocatePool(NonPagedPool, 
                         sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));
                         
    if (urb==NULL)
		return STATUS_NO_MEMORY;        
   
    if (pvOutputBuffer==NULL)
		return STATUS_INVALID_PARAMETER;

   	UsbBuildGetDescriptorRequest(urb,
                                 (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST),
                                 USB_CONFIGURATION_DESCRIPTOR_TYPE, 
                                 0,                      
                                 0,                      
                                 pvOutputBuffer,         
                                 NULL,                   
                                 ulLength,               
                                 NULL);                  
                                                                  
    ntStatus = UsbCallUSBDI(fdo, urb);
    if (NT_SUCCESS(ntStatus)) {
         length = urb->UrbControlDescriptorRequest.TransferBufferLength;
	}
    else
        length = 0;
    ExFreePool(urb);
    return length;
}









?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
heyzo一本久久综合| 亚洲国产成人在线| 欧美久久免费观看| 91精品福利视频| 91捆绑美女网站| 国产91丝袜在线播放| 国产不卡视频在线观看| 成人免费毛片高清视频| 久久精品国产99久久6| 精品一区二区三区视频| av亚洲精华国产精华| www.综合网.com| 一本大道av伊人久久综合| 91同城在线观看| 欧美做爰猛烈大尺度电影无法无天| 91高清在线观看| 欧美日韩国产精品成人| 欧美一区二区三区视频免费 | 日本道色综合久久| 在线观看日韩电影| 欧美日韩国产免费| 91精品国产免费| 亚洲精品一区二区三区99| 国产性天天综合网| 亚洲欧美一区二区久久 | 不卡高清视频专区| 99精品一区二区三区| 色嗨嗨av一区二区三区| 91麻豆精品国产自产在线观看一区 | 国产精品一卡二| 91在线小视频| 欧美久久一区二区| 久久久国产精品麻豆| 亚洲男人天堂一区| 日本午夜一区二区| 午夜电影一区二区| 亚洲日本电影在线| 爽好久久久欧美精品| 精品在线免费视频| av在线播放不卡| 69堂成人精品免费视频| 国产色产综合色产在线视频 | 国产酒店精品激情| 不卡的av在线| 欧美浪妇xxxx高跟鞋交| 久久久久久久网| 一个色在线综合| 精品一区二区三区欧美| 色婷婷激情一区二区三区| 日韩欧美成人激情| 亚洲免费观看在线视频| 蜜臀av性久久久久蜜臀aⅴ| 成人性生交大片免费看视频在线| 欧美日韩一区国产| 欧美激情一区不卡| 欧美无砖专区一中文字| 日韩午夜在线影院| 久久精品视频一区二区三区| 一区二区三区在线视频播放| 久久av中文字幕片| 在线亚洲精品福利网址导航| 精品卡一卡二卡三卡四在线| 亚洲激情在线激情| 国产一区二区网址| 欧美精品在线视频| 国产精品欧美经典| 蜜臀99久久精品久久久久久软件| 国产在线不卡一区| 国产成人免费网站| 欧美日本乱大交xxxxx| 国产欧美精品国产国产专区| 三级不卡在线观看| 91在线云播放| 国产日韩在线不卡| 久久国产三级精品| 欧美日韩国产天堂| 亚洲精品国产无套在线观| 国产一二精品视频| 日韩欧美电影一区| 午夜视频在线观看一区二区三区| 色综合欧美在线| 国产精品女人毛片| 国内精品嫩模私拍在线| 欧美精品 日韩| 国产精品国产自产拍高清av| 国产乱人伦偷精品视频不卡 | 亚洲成a天堂v人片| 99re这里只有精品视频首页| 欧美国产日韩在线观看| 韩国女主播一区| 欧美一区二区三区婷婷月色| 亚洲一区二区高清| 日本精品视频一区二区三区| 国产精品女主播av| 成人国产亚洲欧美成人综合网| 精品国产青草久久久久福利| 美国欧美日韩国产在线播放| 91精品一区二区三区久久久久久 | 亚洲久草在线视频| 99视频精品在线| 成人欧美一区二区三区1314| 国产1区2区3区精品美女| 国产色综合久久| 国产69精品久久99不卡| 国产精品美日韩| 成人高清免费观看| 国产精品福利一区二区| 成人精品免费视频| 国产精品色哟哟| 成人福利视频网站| 中文字幕亚洲在| 91九色02白丝porn| 欧美视频一区在线观看| 亚洲精品午夜久久久| 日本高清不卡aⅴ免费网站| 亚洲欧美激情小说另类| 色综合天天狠狠| 一区二区三区精密机械公司| 欧美色老头old∨ideo| 五月天精品一区二区三区| 91精品一区二区三区在线观看| 麻豆国产91在线播放| 精品福利一二区| 高清国产一区二区| 国产精品久久久久久久久图文区| 91蝌蚪porny九色| 亚洲gay无套男同| 日韩网站在线看片你懂的| 韩国女主播成人在线| 国产精品情趣视频| 在线免费观看成人短视频| 日韩精品一卡二卡三卡四卡无卡| 日韩精品一区二区三区在线播放| 国产一区二区日韩精品| 亚洲欧洲一区二区三区| 欧美三片在线视频观看| 激情深爱一区二区| 自拍偷拍欧美激情| 欧美日韩一级视频| 国产真实乱对白精彩久久| 成人免费在线视频| 56国语精品自产拍在线观看| 久久疯狂做爰流白浆xx| 国产精品色一区二区三区| 欧美日韩一区中文字幕| 国产一区二区三区免费看 | 国产麻豆成人传媒免费观看| 综合欧美一区二区三区| 欧美午夜不卡在线观看免费| 狠狠色丁香九九婷婷综合五月| 日韩毛片视频在线看| 91麻豆精品国产91久久久资源速度 | 欧美日韩中字一区| 精品在线免费视频| 亚洲精品老司机| 久久网站热最新地址| 欧美日韩一区二区三区视频| 国产乱码精品一区二区三| 亚洲一区在线观看免费| 久久久亚洲精品石原莉奈| 欧美网站大全在线观看| 国产成人欧美日韩在线电影| 久久精品国产在热久久| 国产一区二区福利视频| 亚洲国产精品一区二区久久恐怖片 | 偷偷要91色婷婷| 中文字幕av一区二区三区高| 69久久夜色精品国产69蝌蚪网| 成人91在线观看| 久久99国产精品久久99| 亚洲激情成人在线| 国产色产综合产在线视频| 91精品啪在线观看国产60岁| www.欧美精品一二区| 狠狠网亚洲精品| 午夜av区久久| 亚洲人精品午夜| 国产日韩欧美麻豆| 91精品国产欧美日韩| 99re8在线精品视频免费播放| 国产麻豆91精品| 美女久久久精品| 亚洲无线码一区二区三区| 亚洲欧美日韩国产另类专区 | 日韩成人一级片| 一区二区三区中文在线观看| 国产欧美日韩另类一区| 久久久亚洲精品一区二区三区| 日韩欧美色综合网站| 欧美日韩小视频| 欧美影视一区在线| 色综合久久久久久久久| 99久久亚洲一区二区三区青草| 国产一区二区三区四区在线观看 | 精品三级av在线| 欧美一区二区视频免费观看| 欧美日韩国产在线观看| 欧美亚洲另类激情小说| 一本色道**综合亚洲精品蜜桃冫| 成人国产精品免费网站|