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

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

?? ezusbsys.c

?? cy7c68013usbdriver驅動程序,非常方便
?? C
?? 第 1 頁 / 共 5 頁
字號:
Ezusb_DefaultPnpHandler(
   IN PDEVICE_OBJECT fdo,
   IN PIRP Irp
   )
{
   PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;

   IoSkipCurrentIrpStackLocation(Irp);
   return IoCallDriver(pdx->StackDeviceObject, Irp);
}

///////////////////////////////////////////////////////////////////////////////
// @func Handle completion of a request by a lower-level driver
// @parm Functional device object
// @parm I/O request which has completed
// @parm Context argument supplied to IoSetCompletionRoutine, namely address of
// KEVENT object on which ForwardAndWait is waiting
// @comm This is the completion routine used for requests forwarded by ForwardAndWait. It
// sets the event object and thereby awakens ForwardAndWait.
// @comm Note that it's *not* necessary for this particular completion routine to test
// the PendingReturned flag in the IRP and then call IoMarkIrpPending. You do that in many
// completion routines because the dispatch routine can't know soon enough that the
// lower layer has returned STATUS_PENDING. In our case, we're never going to pass a
// STATUS_PENDING back up the driver chain, so we don't need to worry about this.

NTSTATUS 
OnRequestComplete(
   IN PDEVICE_OBJECT fdo,
   IN PIRP Irp,
   IN PKEVENT pev
   )
/*++

Routine Description:
   Handle completion of a request by a lower-level driver

Arguments:
   DriverObject -  Functional device object
   Irp - I/O request which has completed
   pev - Context argument supplied to IoSetCompletionRoutine, namely address of
         KEVENT object on which ForwardAndWait is waiting

Return Value:
   STATUS_MORE_PROCESSING_REQUIRED
--*/
{
   KeSetEvent(pev, 0, FALSE);
   return STATUS_MORE_PROCESSING_REQUIRED;
}

NTSTATUS
ForwardAndWait(
   IN PDEVICE_OBJECT fdo,
   IN PIRP Irp
   )
/*++
Routine Description:
   Forward request to lower level and await completion

   The only purpose of this routine in this particular driver is to pass down
   IRP_MN_START_DEVICE requests and wait for the PDO to handle them.
   
   The processor must be at PASSIVE IRQL because this function initializes
   and waits for non-zero time on a kernel event object.

Arguments:
   fdo - pointer to a device object
   Irp          - pointer to an I/O Request Packet

Return Value:
   STATUS_SUCCESS if successful,
   STATUS_UNSUCCESSFUL otherwise
--*/
{
	KEVENT event;
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	NTSTATUS ntStatus;

   ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
	
	//
   // Initialize a kernel event object to use in waiting for the lower-level
	// driver to finish processing the object. 
   //
	KeInitializeEvent(&event, NotificationEvent, FALSE);

	IoCopyCurrentIrpStackLocationToNext(Irp);
	IoSetCompletionRoutine(Irp, (PIO_COMPLETION_ROUTINE) OnRequestComplete,
		(PVOID) &event, TRUE, TRUE, TRUE);

	ntStatus = IoCallDriver(pdx->StackDeviceObject, Irp);

	if (ntStatus == STATUS_PENDING)
	{
      KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL);
      ntStatus = Irp->IoStatus.Status;
   }

	return ntStatus;
}

NTSTATUS
CompleteRequest(
   IN PIRP Irp,
   IN NTSTATUS status,
   IN ULONG info
   )
/*++
Routine Description:
   Mark I/O request complete

Arguments:
   Irp - I/O request in question
   status - Standard status code
   info Additional information related to status code

Return Value:
   STATUS_SUCCESS if successful,
   STATUS_UNSUCCESSFUL otherwise
--*/
{
	Irp->IoStatus.Status = status;
	Irp->IoStatus.Information = info;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);

   return status;
}

NTSTATUS
Ezusb_DispatchPnp(
   IN PDEVICE_OBJECT fdo,
   IN PIRP           Irp
   )
/*++
Routine Description:
   Process Plug and Play IRPs sent to this device.

Arguments:
   fdo - pointer to a device object
   Irp          - pointer to an I/O Request Packet

Return Value:
   NTSTATUS
--*/
{
   PIO_STACK_LOCATION irpStack;
   PDEVICE_EXTENSION pdx = fdo->DeviceExtension;
   ULONG fcn;
   NTSTATUS ntStatus;

   Ezusb_KdPrint (("Enter Ezusb_DispatchPnp\n"));

   if (!LockDevice(fdo))
		return CompleteRequest(Irp, STATUS_DELETE_PENDING, 0);

   //
   // Get a pointer to the current location in the Irp. This is where
   //     the function codes and parameters are located.
   //
   irpStack = IoGetCurrentIrpStackLocation (Irp);

   ASSERT(irpStack->MajorFunction == IRP_MJ_PNP);

   fcn = irpStack->MinorFunction;

   switch (fcn)
   {
      case IRP_MN_START_DEVICE:

         Ezusb_KdPrint (("IRP_MN_START_DEVICE\n"));

         ntStatus = Ezusb_HandleStartDevice(fdo,Irp);

         if (ntStatus == STATUS_SUCCESS)
         {
            pdx->Started = TRUE;
         }

         break; //IRP_MN_START_DEVICE

      case IRP_MN_STOP_DEVICE:

         Ezusb_KdPrint (("IRP_MN_STOP_DEVICE\n"));

         //
         // first pass the request down the stack
         //
         Ezusb_DefaultPnpHandler(fdo,Irp);

         ntStatus = Ezusb_StopDevice(fdo);

         break; //IRP_MN_STOP_DEVICE

      case IRP_MN_REMOVE_DEVICE:

         Ezusb_KdPrint (("IRP_MN_REMOVE_DEVICE\n"))

         ntStatus = Ezusb_HandleRemoveDevice(fdo,Irp);

         break; //IRP_MN_REMOVE_DEVICE

      case IRP_MN_QUERY_CAPABILITIES:
      {
         //
         // This code swiped from Walter Oney.  Please buy his book!!
         //

      	PDEVICE_CAPABILITIES pdc = irpStack->Parameters.DeviceCapabilities.Capabilities;

         Ezusb_KdPrint (("IRP_MN_QUERY_CAPABILITIES\n"))

         // Check to be sure we know how to handle this version of the capabilities structure

	      if (pdc->Version < 1)
         {
		      ntStatus = Ezusb_DefaultPnpHandler(fdo, Irp);
            break;
         }

         ntStatus = ForwardAndWait(fdo, Irp);
	      if (NT_SUCCESS(ntStatus))
   		{						// IRP succeeded
      		pdc = irpStack->Parameters.DeviceCapabilities.Capabilities;
            // setting this field prevents NT5 from notifying the user when the
            // device is removed.
		      pdc->SurpriseRemovalOK = TRUE;
   		}						// IRP succeeded

	      ntStatus = CompleteRequest(Irp, ntStatus, Irp->IoStatus.Information);
      }
         break; //IRP_MN_QUERY_CAPABILITIES


      //
      // All other PNP IRP's are just passed down the stack by the default handler
      //
      default:
        Ezusb_KdPrint (("Passing down unhandled PnP IOCTL 0x%x\n", fcn));
        ntStatus = Ezusb_DefaultPnpHandler(fdo, Irp);

   } // switch MinorFunction

	if (fcn != IRP_MN_REMOVE_DEVICE)
      UnlockDevice(fdo);

   Ezusb_KdPrint (("Exit Ezusb_DispatchPnp %x\n", ntStatus));
   return ntStatus;

}//Ezusb_Dispatch


NTSTATUS
Ezusb_DispatchPower(
    IN PDEVICE_OBJECT fdo,
    IN PIRP           Irp
    )
/*++
Routine Description:
   Process the IRPs sent to this device.

Arguments:
   fdo - pointer to a device object
   Irp          - pointer to an I/O Request Packet

Return Value:
   NTSTATUS
--*/
{
   PIO_STACK_LOCATION irpStack, nextStack;
   PDEVICE_EXTENSION pdx = fdo->DeviceExtension;
   NTSTATUS ntStatus;

   Ezusb_KdPrint (("Enter Ezusb_DispatchPower\n"));

   Irp->IoStatus.Status = STATUS_SUCCESS;
   Irp->IoStatus.Information = 0;

   //
   // Get a pointer to the current location in the Irp. This is where
   //     the function codes and parameters are located.
   //
   irpStack = IoGetCurrentIrpStackLocation (Irp);



   Ezusb_KdPrint (("IRP_MJ_POWER MIN=0x%x Type=0x%x State=0x%x\n",irpStack->MinorFunction,
      irpStack->Parameters.Power.Type,
      irpStack->Parameters.Power.State.DeviceState));

   switch (irpStack->MinorFunction)
   {
      case IRP_MN_SET_POWER:

         switch (irpStack->Parameters.Power.Type)
         {
            case SystemPowerState:

               break; //SystemPowerState

            case DevicePowerState:
               switch (irpStack->Parameters.Power.State.DeviceState)
               {
                  case PowerDeviceD3:
                     Ezusb_KdPrint (("IRP_MN_SET_D3\n"));
                     break;
                  case PowerDeviceD2:
                     Ezusb_KdPrint (("IRP_MN_SET_D2\n"));
                     break;
                  case PowerDeviceD1:
                     Ezusb_KdPrint (("IRP_MN_SET_D1\n"));
                     break;
                  case PowerDeviceD0:
                     Ezusb_KdPrint (("IRP_MN_SET_D0\n"));
                     break;
                } // switch on Power.State.DeviceState

                break; //DevicePowerState

         }// switch on Power.Type

         break;  //IRP_MN_SET_POWER

      case IRP_MN_QUERY_POWER:

         // Look at what type of power query this is
         switch (irpStack->Parameters.Power.Type)
         {
            case SystemPowerState:

               break; //SystemPowerState

            case DevicePowerState:
               switch (irpStack->Parameters.Power.State.DeviceState)
               {
                  case PowerDeviceD2:
                     Ezusb_KdPrint (("IRP_MN_QUERY_D2\n"));
                     break;
                  case PowerDeviceD1:
                     Ezusb_KdPrint (("IRP_MN_QUERY_D1\n"));
                     break;
                  case PowerDeviceD3:
                     Ezusb_KdPrint (("IRP_MN_QUERY_D3\n"));
                     break;
               } //switch on Power.State.DeviceState

               break; //DevicePowerState
                            
         }//switch on Power.Type

         break; //IRP_MN_QUERY_POWER

      default:
         // A PnP Minor Function was not handled
         Ezusb_KdPrint (("Power IOCTL not handled\n"));

   } /* switch MinorFunction*/


   nextStack = IoGetNextIrpStackLocation(Irp);
   ASSERT(nextStack != NULL);
   RtlCopyMemory(nextStack, irpStack, sizeof(IO_STACK_LOCATION));

   //
   // All PNP_POWER messages get passed to the StackDeviceObject that
   // we were given in PnPAddDevice.
   //
   // This stack device object is managed by the USB software subsystem,
   // and so this IRP must be propagated to the owning device driver for
   // that stack device object, so that driver in turn can perform any
   // device state management (e.g., remove its device object, etc.).
   //
   Ezusb_KdPrint (("Passing Power Irp down\n"));

   //
   // Notes on passing power IRPs down:  Using IoCallDriver() to pass
   // down power IRPs worked until Windows 2000.  Using this method
   // with Win2K causes a blue screen at system shutdown.  Because of this,
   // I am modifying the driver to use the more correct PoXXX() functions
   // to handle power IRPs. Unfortunately, the PoXXX() calls weren't
   // added until the kernel until after the release of Windows 95 OSR2.
   // So, a driver using these calls will not load on a Windows 95 system.
   // If you need to use this driver under Windows 95. then you must
   // #define WIN95.
   //

#ifdef WIN95
   ntStatus = IoCallDriver(pdx->StackDeviceObject, Irp);
#else
   PoStartNextPowerIrp(Irp);
   ntStatus = PoCallDriver(pdx->StackDeviceObject,Irp);
#endif

   //
   // If lower layer driver marked the Irp as pending then reflect that by
   // calling IoMarkIrpPending.
   //
   if (ntStatus == STATUS_PENDING)
   {
      IoMarkIrpPending(Irp);
      Ezusb_KdPrint (("Power Irp came back with STATUS_PENDING (%x)\n", ntStatus));
   }
   else
   {
      Ezusb_KdPrint (("Power Irp came back, status = %x\n", ntStatus));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区免费在线| 色综合中文字幕| 欧美日韩一区二区三区在线看| 亚洲视频你懂的| 成人免费av在线| 亚洲免费观看在线视频| 欧美三区在线观看| 色综合久久综合| 日本不卡视频在线| 26uuu国产日韩综合| 成人丝袜高跟foot| 丁香婷婷综合激情五月色| 亚洲一区二区偷拍精品| 日韩欧美一二三四区| 国产一区二区久久| 国产·精品毛片| 成人免费观看av| 在线看一区二区| 激情综合色播激情啊| 自拍偷自拍亚洲精品播放| 日韩毛片在线免费观看| 亚洲欧美成人一区二区三区| 一区二区高清免费观看影视大全| 精品第一国产综合精品aⅴ| 色婷婷av久久久久久久| 欧美日韩色一区| 欧美xfplay| 91精品国产综合久久香蕉的特点 | 国产精品久久久久桃色tv| 欧美在线观看一区| 日韩一区二区三区观看| 精品视频1区2区| 精品理论电影在线观看| 中文字幕一区二区在线观看| 26uuu亚洲综合色| 椎名由奈av一区二区三区| 亚洲国产精品久久人人爱| 国产精品国产三级国产| 午夜精品久久久久| 亚洲一区精品在线| 精品一区二区三区影院在线午夜| 图片区小说区区亚洲影院| 玖玖九九国产精品| 奇米影视一区二区三区| 成人黄色免费短视频| 精一区二区三区| 色综合av在线| 精品福利视频一区二区三区| 一区二区高清视频在线观看| 国产一区三区三区| 欧美日韩aaa| 日韩精品一区二区三区蜜臀 | 国产精品综合二区| 国产一区二区精品在线观看| 欧洲一区在线观看| 欧美激情一区二区三区四区 | 成人做爰69片免费看网站| 欧美羞羞免费网站| 欧美日韩国产精选| 中文字幕亚洲精品在线观看| 精品系列免费在线观看| 欧美日免费三级在线| 亚洲欧洲国产日韩| 国产一区二区视频在线播放| 欧美一三区三区四区免费在线看| 日韩三级伦理片妻子的秘密按摩| 亚洲精品国产无天堂网2021 | 日韩精品一区国产麻豆| 亚洲在线中文字幕| 一本久久精品一区二区| 国产精品全国免费观看高清 | 免费成人在线播放| 欧美性猛交xxxx黑人交| 亚洲三级免费观看| 91蜜桃免费观看视频| 色久综合一二码| 91精品国产美女浴室洗澡无遮挡| 亚洲免费在线看| 91视视频在线观看入口直接观看www| 国产欧美日韩三级| 一区二区三区在线观看网站| 成人av在线影院| 久久精品视频免费观看| 亚洲欧美激情插| 91亚洲永久精品| 亚洲人成亚洲人成在线观看图片| 91小视频免费观看| 亚洲色欲色欲www在线观看| 丁香婷婷综合五月| 1区2区3区国产精品| 国产91精品精华液一区二区三区 | 亚洲午夜久久久久久久久电影网 | 欧洲人成人精品| 午夜视频在线观看一区二区 | 91在线一区二区| 欧美一区二区三区四区五区| 日产国产高清一区二区三区| 99久久精品情趣| 亚洲精品视频在线看| 欧美精品一级二级三级| 国产亚洲制服色| 岛国av在线一区| 依依成人综合视频| 日韩欧美国产麻豆| 国产成人在线观看| 精品国产123| eeuss鲁片一区二区三区在线观看| 91麻豆精品国产自产在线| 麻豆精品一区二区综合av| 日本黄色一区二区| 日韩国产在线观看一区| 26uuu亚洲综合色| 91福利精品第一导航| 日日夜夜精品视频天天综合网| 色菇凉天天综合网| 天天做天天摸天天爽国产一区| 久久综合视频网| 91麻豆福利精品推荐| 另类调教123区 | 看国产成人h片视频| 亚洲欧洲无码一区二区三区| 7777精品伊人久久久大香线蕉经典版下载| 国产校园另类小说区| 在线视频欧美区| 国产一区二区剧情av在线| 亚洲chinese男男1069| 欧美私模裸体表演在线观看| 激情综合色综合久久| 一级精品视频在线观看宜春院| 久久婷婷色综合| 欧美一级高清大全免费观看| 一本一道综合狠狠老| 粉嫩久久99精品久久久久久夜| 三级成人在线视频| 亚洲一区在线观看视频| 中文字幕在线观看一区二区| 久久午夜老司机| 日韩精品在线看片z| 欧美日韩不卡一区| 欧美吻胸吃奶大尺度电影| eeuss鲁片一区二区三区| 国产寡妇亲子伦一区二区| 久久99精品国产麻豆婷婷洗澡| 亚洲成人激情av| 亚洲国产精品久久一线不卡| 亚洲精品一二三区| 一区二区三区免费网站| 亚洲免费资源在线播放| 亚洲视频在线观看一区| 中文字幕一区二区三区色视频 | 色综合欧美在线视频区| 成人精品在线视频观看| 成人午夜激情片| 成人黄色av电影| 成人小视频免费在线观看| 国产盗摄视频一区二区三区| 国产精品一区一区三区| 国内外成人在线| 久久99久国产精品黄毛片色诱| 午夜欧美在线一二页| 久久久精品国产99久久精品芒果| 国产风韵犹存在线视精品| 日韩av中文在线观看| 亚洲国产乱码最新视频| 日本不卡在线视频| 丝袜亚洲精品中文字幕一区| 一区二区三区四区五区视频在线观看 | 337p亚洲精品色噜噜狠狠| 91在线观看免费视频| 99国产一区二区三精品乱码| 成人综合婷婷国产精品久久蜜臀 | 色婷婷综合五月| 国产一区二区视频在线| 精品在线一区二区| 另类调教123区| 国产一区二区美女| 国产大陆亚洲精品国产| 成人av在线电影| 欧美在线观看禁18| 欧美人伦禁忌dvd放荡欲情| 精品1区2区3区| 91精品国产综合久久精品性色| 欧美人与禽zozo性伦| 91精品国产综合久久香蕉的特点| 色哟哟亚洲精品| 欧美草草影院在线视频| 欧美三级电影一区| 欧美伊人精品成人久久综合97 | 欧美精品丝袜中出| 久久婷婷国产综合国色天香| 国产精品久久免费看| 亚洲六月丁香色婷婷综合久久| 日韩国产在线观看| 国产精品一区二区你懂的| 不卡免费追剧大全电视剧网站| 成人毛片在线观看| 精品国产一区二区三区不卡 | 色综合一区二区三区| 日韩一区二区电影网| 亚洲色图欧美在线|