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

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

?? testdispatch.c

?? usb2.0開發與工程應用
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "usbdriver.h"

ULONG UsbGetCurrentFrameNumber(IN PDEVICE_OBJECT fdo);
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 UsbStartIsoTransfer(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS InitTransferObject(IN OUT PISO_STREAM_OBJECT streamObject,IN ULONG index);
NTSTATUS IsoTransferComplete(IN PDEVICE_OBJECT bunkfdo,IN PIRP Irp,IN PVOID Context);
//
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_EZUSB_GET_CURRENT_FRAME_NUMBER:
		   {
			   ULONG frameNumber = 0;

               if (OutputBufferLength < sizeof(ULONG)) {
				   Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
                   break;
			   }
               frameNumber = UsbGetCurrentFrameNumber (fdo);
               if (frameNumber) {
				   *((PULONG)IoBuffer) = frameNumber;
                   Irp->IoStatus.Information = sizeof(ULONG);
                   Irp->IoStatus.Status = STATUS_SUCCESS;
			   }
               else
				   Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
		   }
           break;

       case IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR:
		  {
              length = UsbGetDeviceDescriptor (fdo, IoBuffer);
              Irp->IoStatus.Information = length;
              Irp->IoStatus.Status = STATUS_SUCCESS;
		  }
		  break;
      case IOCTL_Ezusb_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_Ezusb_GET_CONFIGURATION_DESCRIPTOR:
			 {
                 length = UsbGetConfigDescriptor (fdo, IoBuffer, OutputBufferLength);
                 Irp->IoStatus.Information = length;
                 Irp->IoStatus.Status = STATUS_SUCCESS;
			 }
             break;
 
         case IOCTL_EZUSB_ISO_READ:
         case IOCTL_EZUSB_ISO_WRITE:
              Irp->IoStatus.Status = UsbStartIsoTransfer(fdo,Irp);
              Irp->IoStatus.Information = 0;
         break;
         
		 case IOCTL_Ezusb_RESETPIPE:
		 {
             ULONG pipenum = *((PULONG) IoBuffer);
             Irp->IoStatus.Status = UsbResetPipe(fdo,pipenum);
		 }
		 break;

         default:
			  Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
     } 
    UnlockDevice(fdo);
    ntStatus = Irp->IoStatus.Status;
    IoCompleteRequest (Irp,IO_NO_INCREMENT);
    return ntStatus;
}
//
ULONG UsbGetCurrentFrameNumber(IN PDEVICE_OBJECT fdo)
{
	NTSTATUS  ntStatus = STATUS_SUCCESS;
	PURB urb = NULL;
    PDEVICE_EXTENSION   pdx;
    ULONG  frameNumber = 0;
    
    pdx = fdo->DeviceExtension;
    urb = ExAllocatePool(NonPagedPool,sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER));
    if (urb == NULL)
		return 0;
    RtlZeroMemory(urb,sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER));
  
	urb->UrbHeader.Length = sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER);
    urb->UrbHeader.Function = URB_FUNCTION_GET_CURRENT_FRAME_NUMBER;
 
	ntStatus = UsbCallUSBDI(fdo, urb);
    if (NT_SUCCESS(ntStatus)) {
		frameNumber = urb->UrbGetCurrentFrameNumber.FrameNumber;
    }

    ExFreePool(urb);
    return frameNumber;
}
//
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;
}
//
NTSTATUS UsbStartIsoTransfer(IN PDEVICE_OBJECT fdo,IN PIRP Irp)
{
   PDEVICE_EXTENSION          pdx = fdo->DeviceExtension;
   PIO_STACK_LOCATION         irpStack = IoGetCurrentIrpStackLocation (Irp);
   PISO_TRANSFER_CONTROL      isoControl =
                              (PISO_TRANSFER_CONTROL)Irp->AssociatedIrp.SystemBuffer;
   ULONG                      bufferLength =

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲五月六月丁香激情| 91免费国产在线| 91香蕉视频污在线| 91精品国产乱码久久蜜臀| 亚洲国产激情av| 免费高清在线视频一区·| 成人黄色大片在线观看| 欧美一区二区三区人| 亚洲视频在线一区二区| 精品无人区卡一卡二卡三乱码免费卡| 不卡在线观看av| 国产色婷婷亚洲99精品小说| 日韩av成人高清| 91亚洲精品乱码久久久久久蜜桃| 精品国产伦一区二区三区观看方式| 亚洲五码中文字幕| 色婷婷亚洲一区二区三区| 国产午夜亚洲精品理论片色戒 | 成人免费小视频| 久久精品国产免费看久久精品| 欧美日韩国产在线观看| 亚洲精品高清视频在线观看| www.激情成人| 国产精品理论在线观看| 国产精品一区二区不卡| 亚洲精品一区在线观看| 另类小说一区二区三区| 欧美一区二区成人6969| 五月婷婷欧美视频| 欧美天天综合网| 亚洲电影一区二区三区| 欧美在线短视频| 亚洲一区二区视频在线观看| 欧美在线视频不卡| 午夜欧美在线一二页| 欧美日韩精品三区| 性欧美疯狂xxxxbbbb| 欧美老肥妇做.爰bbww| 偷窥国产亚洲免费视频| 欧美日韩美女一区二区| 午夜精品久久一牛影视| 6080国产精品一区二区| 奇米精品一区二区三区在线观看| 日韩欧美视频在线| 精品一区二区三区的国产在线播放| 欧美va亚洲va| 粉嫩久久99精品久久久久久夜 | 成熟亚洲日本毛茸茸凸凹| 国产精品美女久久久久aⅴ| 91麻豆swag| 日韩精品视频网站| 2020国产精品自拍| aaa亚洲精品| 亚洲成人综合视频| 精品美女一区二区| av电影在线观看完整版一区二区| 亚洲国产精品视频| 久久亚洲欧美国产精品乐播| 成人h动漫精品一区二| 亚洲国产精品一区二区www在线| 制服丝袜av成人在线看| 国产精一区二区三区| 亚洲女人小视频在线观看| 9191成人精品久久| 成人福利视频网站| 午夜久久久久久电影| 久久蜜桃一区二区| 在线视频一区二区免费| 精品夜夜嗨av一区二区三区| 国产精品久久网站| 欧美一级久久久久久久大片| 成人免费看黄yyy456| 视频一区二区三区在线| 国产精品久久久久久亚洲毛片| 欧美日韩大陆一区二区| 国产一区二三区好的| 性久久久久久久久久久久| 欧美国产精品劲爆| 欧美一区二区三区四区视频| 99re这里只有精品视频首页| 蜜桃久久精品一区二区| 亚洲激情综合网| 国产亚洲精品资源在线26u| 欧美日韩精品久久久| 不卡区在线中文字幕| 美女视频第一区二区三区免费观看网站| 中文字幕第一区综合| 日韩欧美一区二区免费| 欧美视频你懂的| 99精品视频中文字幕| 久久99国产乱子伦精品免费| 一区二区国产盗摄色噜噜| 欧美国产成人在线| 精品成人在线观看| 欧美一区日本一区韩国一区| 91成人免费网站| zzijzzij亚洲日本少妇熟睡| 国产在线观看一区二区| 久久精品国产亚洲a| 青青草国产成人av片免费| 亚洲成人综合视频| 亚洲国产一区二区三区青草影视| 亚洲女同一区二区| 中文字幕一区二区三中文字幕| 久久人人97超碰com| 日韩欧美国产1| 91精品国产乱码久久蜜臀| 欧美日韩一区二区三区在线| 一本到一区二区三区| jlzzjlzz欧美大全| 丁香婷婷综合网| 国产风韵犹存在线视精品| 久久国产精品一区二区| 麻豆精品在线看| 精品系列免费在线观看| 美国毛片一区二区三区| 久久精品国产免费| 国产精品一区二区男女羞羞无遮挡 | 欧美丰满高潮xxxx喷水动漫| 欧美性大战xxxxx久久久| 欧美亚洲一区三区| 欧美午夜片在线看| 欧美片网站yy| 777奇米四色成人影色区| 日韩一级片在线观看| 久久综合色8888| 国产精品高潮久久久久无| 亚洲色图在线播放| 亚洲三级电影全部在线观看高清| 国产精品高潮久久久久无| 中文字幕一区二区三区不卡在线| 亚洲九九爱视频| 亚洲超碰精品一区二区| 日本午夜一区二区| 韩日欧美一区二区三区| 99久久精品免费| 欧美写真视频网站| 精品国产乱码久久久久久蜜臀 | 93久久精品日日躁夜夜躁欧美| 91久久精品国产91性色tv| 在线播放91灌醉迷j高跟美女| 精品国产亚洲在线| 亚洲免费观看高清完整版在线观看 | 国产一区二区电影| 色狠狠av一区二区三区| 欧美一区二区三区性视频| 国产喷白浆一区二区三区| 亚洲天堂精品视频| 男女性色大片免费观看一区二区| 国产成人午夜精品影院观看视频| 色综合中文字幕国产| 在线观看中文字幕不卡| 精品国产乱码久久久久久久久 | 欧美天天综合网| 久久久国产精品午夜一区ai换脸 | 久久久久久电影| 亚洲最新视频在线观看| 国产在线视视频有精品| 欧美午夜不卡视频| 亚洲国产精华液网站w| 日本欧美在线观看| 99久久精品国产一区| 亚洲精品在线免费观看视频| 亚洲午夜一二三区视频| 成人精品视频.| 欧美电影免费观看完整版| 亚洲午夜在线电影| 972aa.com艺术欧美| 精品国产1区2区3区| 日欧美一区二区| 91片在线免费观看| 国产欧美日韩亚州综合| 日韩在线观看一区二区| a美女胸又www黄视频久久| xnxx国产精品| 青椒成人免费视频| 欧美日韩和欧美的一区二区| 一区二区三区在线观看网站| 国产精品一区二区三区四区 | 激情六月婷婷久久| 337p亚洲精品色噜噜噜| 亚洲高清在线精品| 一本一本久久a久久精品综合麻豆| 国产亚洲制服色| 国产一区二区在线免费观看| 欧美一区二区三区系列电影| 日韩专区一卡二卡| 欧美视频一区二区在线观看| 一区二区三区在线观看网站| 91视频一区二区三区| 日韩一区欧美一区| 成人免费毛片aaaaa**| 欧美国产欧美综合| 成人h动漫精品一区二区| 日本一区二区成人| www.日韩av| 亚洲精品免费看| 欧美色网一区二区| 天堂在线亚洲视频| 7777精品伊人久久久大香线蕉完整版 |