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

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

?? ezloader.c

?? 本數據包給cy7c68013 usb提供下載驅動成程序,其中CHECKED中的FXLOADER.SYS為目標程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
//////////////////////////////////////////////////////////////////////
//
// File:      ezloader.c
// $Archive: /USB/Drivers/ezloader/ezloader.c $
//
// Purpose:
//    driver for downloading firmware to pre-renumerated ezusb devices.
//
// Note:
//    derived from ezusbsys.c ver 15

// Environment:
//    kernel mode
//
// $Author: Mdn $
//
// $History: ezloader.c $           
//  
//  *****************  Version 2  *****************
//  User: Mdn          Date: 7/19/01    Time: 10:32a
//  Updated in $/USB/Drivers/ezloader
//  added support for FX2 - specifically, modified the 8051 reset code so
//  it will work with both EZ-USB and FX2
//  
//  *****************  Version 1  *****************
//  User: Tpm          Date: 6/09/00    Time: 6:30p
//  Created in $/USB/Drivers/ezloader
//  
//  *****************  Version 7  *****************
//  User: Markm        Date: 4/12/99    Time: 1:17p
//  Updated in $/EzUsb/Drivers/ezloader
//  
//  *****************  Version 6  *****************
//  User: Markm        Date: 4/12/99    Time: 1:16p
//  Updated in $/EzUsb/Drivers/ezloader
//  
//  *****************  Version 5  *****************
//  User: Markm        Date: 4/12/99    Time: 1:00p
//  Updated in $/EzUsb/Drivers/ezloader
//  minor changes to get rid of compiler warnings.
//  
//  *****************  Version 4  *****************
//  User: Markm        Date: 3/26/99    Time: 2:59p
//  Updated in $/EzUsb/Drivers/ezloader
//  Fixed a bug in the surprise removal code I just added.  I was returning
//  from the PnP dispatch function without unlocking the device object.
//  
//  *****************  Version 3  *****************
//  User: Markm        Date: 3/25/99    Time: 2:05p
//  Updated in $/EzUsb/Drivers/ezloader
//  Added code to allow unplugs (surprise removal) under NT5 without
//  notifying the user.
//  
//  *****************  Version 2  *****************
//  User: Markm        Date: 4/10/98    Time: 2:06p
//  Updated in $/EZUSB/ezloader
//  modified to download intel hex records and to download the loader
//  firmware for downloading to external RAM
//  
//  *****************  Version 1  *****************
//  User: Markm        Date: 2/24/98    Time: 5:26p
//  Created in $/EZUSB/ezloader
//  
//  
// Copyright (c) 1997 Anchor Chips, Inc.  May not be reproduced without
// permission.  See the license agreement for more details.
//
//////////////////////////////////////////////////////////////////////

//
// Include files needed for WDM driver support
//
#include <wdm.h>
#include "stdarg.h"
#include "stdio.h"

//
// Include files needed for USB support
//
#include "usbdi.h"
#include "usbdlib.h"

//
// Include file for the Ezusb Device
//
#include "ezloader.h"

//
// this file contains an image of the device firmware
//
extern INTEL_HEX_RECORD firmware[];
extern INTEL_HEX_RECORD loader[];

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT DriverObject,
    IN PUNICODE_STRING RegistryPath
    )
/*++

Routine Description:
   
Arguments:
   DriverObject - pointer to the driver object
   RegistryPath - pointer to a unicode string representing the path
                  to driver-specific key in the registry

Return Value:
   STATUS_SUCCESS if successful,
   STATUS_UNSUCCESSFUL otherwise

--*/
{
   NTSTATUS ntStatus = STATUS_SUCCESS;
   PDEVICE_OBJECT deviceObject = NULL;

   Ezusb_KdPrint (("entering (Ezusb) DriverEntry (Build: %s/%s\n",__DATE__,__TIME__));

   DriverObject->DriverUnload = Ezusb_Unload;

   //
   // POWER and PNP IRPs go to the same dispatch function.  Under
   // Win95, there is just a single IRP for both, called
   // IRP_MJ_PNP_POWER.  This is assigned the same value as
   // IRP_MJ_PNP has under Win98 and NT5.  I'm only concerned
   // with basic PNP stuff, like START and REMOVE.  All other
   // PNP and POWER IRPs will simply be passed down the driver
   // stack.  This driver won't be around like enough to worry
   // about POWER IRPs.  That is, as soon as code is downloaded
   // to the device, the device will remove itself and the driver
   // will go away.
   //
   DriverObject->MajorFunction[IRP_MJ_PNP] =
   DriverObject->MajorFunction[IRP_MJ_POWER] = Ezusb_DispatchPnp;

   DriverObject->DriverExtension->AddDevice = Ezusb_PnPAddDevice;

   Ezusb_KdPrint (("exiting (Ezusb) DriverEntry (%x)\n", ntStatus));

   return ntStatus;
}

NTSTATUS
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);

         break; //IRP_MN_START_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 besure 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 MJ=0x%x MN=0x%x\n",
           irpStack->MajorFunction, irpStack->MinorFunction));
        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


VOID
Ezusb_Unload(
    IN PDRIVER_OBJECT DriverObject
    )
/*++
Routine Description:
    Free all the allocated resources, etc.
    TODO: This is a placeholder for driver writer to add code on unload

Arguments:
    DriverObject - pointer to a driver object

Return Value:
    None
--*/
{
    Ezusb_KdPrint (("enter Ezusb_Unload\n"));
    /*
    // TODO: Free any global resources allocated in DriverEntry
    */
    Ezusb_KdPrint (("exit Ezusb_Unload\n"));
}

NTSTATUS
Ezusb_HandleRemoveDevice(
   IN PDEVICE_OBJECT fdo,
   IN PIRP Irp
   )
{
   NTSTATUS ntStatus;
   PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	pdx->removing = TRUE;
	UnlockDevice(fdo);			// once for LockDevice at start of dispatch
	UnlockDevice(fdo);			// once for initialization during AddDevice
	KeWaitForSingleObject(&pdx->evRemove, Executive, KernelMode, FALSE, NULL);

	// Let lower-level drivers handle this request. Ignore whatever
	// result eventuates.

//   ntStatus = Ezusb_DefaultPnpHandler(fdo, Irp);

//   Ezusb_Cleanup(fdo);

   // Remove the device object

	Ezusb_RemoveDevice(fdo);

   ntStatus = Ezusb_DefaultPnpHandler(fdo, Irp);

   return ntStatus;				// lower-level completed IoStatus already

}


NTSTATUS
Ezusb_HandleStartDevice(
   IN PDEVICE_OBJECT fdo,
   IN PIRP Irp
   )
{
   NTSTATUS ntStatus;

   //
   // First let all lower-level drivers handle this request.
   //
   ntStatus = ForwardAndWait(fdo, Irp);
	if (!NT_SUCCESS(ntStatus))
		return CompleteRequest(Irp, ntStatus, Irp->IoStatus.Information);

   //
   // now do whatever we need to do to start the device
   //
   ntStatus = Ezusb_StartDevice(fdo);

	return CompleteRequest(Irp, ntStatus, 0);
}

NTSTATUS
Ezusb_StartDevice(
    IN  PDEVICE_OBJECT fdo
    )
/*++

Routine Description:
   Initializes a given instance of the Ezusb Device on the USB.

   Arguments:
      fdo - pointer to the device object for this instance of a
                      Ezusb Device

Return Value:
   NT status code
--*/
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀va亚洲va欧美va天堂| 国产夜色精品一区二区av| 国产激情一区二区三区四区| 首页国产丝袜综合| 午夜在线成人av| 亚洲国产你懂的| 亚洲夂夂婷婷色拍ww47 | 蜜桃视频第一区免费观看| 性做久久久久久| 五月天网站亚洲| 久久精品国产**网站演员| 国产精品综合二区| 99re成人在线| 911国产精品| 国产偷国产偷精品高清尤物| 国产精品欧美极品| 午夜欧美视频在线观看| 久久99精品国产91久久来源| 国产精品一卡二| 成人免费视频免费观看| 在线亚洲人成电影网站色www| 在线观看不卡一区| 久久先锋资源网| 亚洲欧美日韩国产手机在线| 亚洲精品伦理在线| 免费成人你懂的| 91在线免费播放| 91精品国产综合久久福利软件| 精品嫩草影院久久| 一区二区三区高清| 黄色日韩网站视频| 欧美三级中文字幕在线观看| 久久亚洲综合av| 亚洲网友自拍偷拍| 国产精品综合二区| 7777精品伊人久久久大香线蕉的 | 亚洲色图.com| 美女视频第一区二区三区免费观看网站| 极品少妇xxxx精品少妇偷拍| 成人国产在线观看| 欧美一级专区免费大片| 国产亚洲午夜高清国产拍精品| 亚洲欧美偷拍三级| 九色porny丨国产精品| 99久久精品国产精品久久| 91精品国产色综合久久不卡电影| 国产精品午夜免费| 精品一区二区三区久久久| 色先锋久久av资源部| 亚洲精品一区二区三区四区高清 | 亚洲一区二区三区影院| 国产在线精品一区二区不卡了 | 国产精品18久久久| 欧美一区二区二区| 亚洲国产成人tv| 91蜜桃免费观看视频| 久久久久免费观看| 久久99精品国产.久久久久| 欧美在线视频日韩| 亚洲精选视频免费看| 粉嫩aⅴ一区二区三区四区五区| 欧美成人精品3d动漫h| 夜夜精品浪潮av一区二区三区| 成人激情小说网站| 欧美极品另类videosde| 国产成人在线色| 久久久精品天堂| 国产在线精品视频| 国产日韩综合av| 国产在线精品免费av| 精品久久久久久久久久久久包黑料| 亚洲综合av网| 在线播放中文字幕一区| 偷窥国产亚洲免费视频| 正在播放亚洲一区| 免费成人美女在线观看.| 日韩免费高清av| 免费高清在线视频一区·| 日韩一区二区三区免费看| 免费成人av资源网| 精品粉嫩aⅴ一区二区三区四区| 麻豆成人av在线| 久久日韩粉嫩一区二区三区| 国产一区二区视频在线| 国产欧美日韩另类视频免费观看| 成人av在线网| 亚洲激情第一区| 亚洲精品你懂的| 国产伦精品一区二区三区免费 | 精品少妇一区二区三区在线播放| 免费在线观看成人| 久久久久久久久久看片| 大尺度一区二区| 一区二区国产盗摄色噜噜| 欧美日韩国产综合草草| 蜜桃在线一区二区三区| 国产精品麻豆欧美日韩ww| 欧美在线观看视频一区二区三区| 日韩国产在线一| 国产亚洲婷婷免费| 欧洲色大大久久| 久久99精品久久只有精品| 国产网站一区二区| 欧美曰成人黄网| 久久91精品久久久久久秒播| 中文字幕精品一区二区精品绿巨人| 99视频一区二区三区| 国产一区在线观看视频| 自拍av一区二区三区| 日韩一区二区在线看| bt欧美亚洲午夜电影天堂| 亚洲国产日韩综合久久精品| 欧美zozozo| 欧美亚洲高清一区| 极品美女销魂一区二区三区免费| 亚洲欧美成aⅴ人在线观看| 欧美一区二区三区视频在线| youjizz久久| 国产综合一区二区| 亚洲日本青草视频在线怡红院| 欧美一区二区三区啪啪| 9i在线看片成人免费| 麻豆91在线看| 亚洲成av人片一区二区三区| 国产欧美精品一区二区三区四区| 欧美福利视频一区| 91免费在线视频观看| 国产精品一区二区男女羞羞无遮挡| 亚洲国产一区二区三区青草影视 | 欧美国产欧美综合| 日韩三级精品电影久久久| 91久久久免费一区二区| 盗摄精品av一区二区三区| 日本三级韩国三级欧美三级| 亚洲嫩草精品久久| 一色屋精品亚洲香蕉网站| 欧美精品一区二区久久久| 欧美喷潮久久久xxxxx| 色8久久人人97超碰香蕉987| 波波电影院一区二区三区| 国产自产v一区二区三区c| 久久99热狠狠色一区二区| 日韩电影免费在线看| 图片区小说区国产精品视频| 亚洲一区二区精品视频| 亚洲女女做受ⅹxx高潮| 亚洲欧洲成人精品av97| 国产精品色婷婷久久58| 国产女同性恋一区二区| 国产亚洲午夜高清国产拍精品| 欧美一区二区三区视频免费播放 | 日韩制服丝袜av| 天堂蜜桃91精品| 午夜电影一区二区| 天天操天天干天天综合网| 亚洲精品欧美激情| 亚洲国产精品久久久久婷婷884 | av在线综合网| 91一区二区三区在线观看| 91在线国产福利| 欧美色区777第一页| 欧美日韩一区二区电影| 国产精品久久久久久一区二区三区| 精品视频免费在线| 4438亚洲最大| xnxx国产精品| 成人欧美一区二区三区黑人麻豆| 一区二区三区在线播放| 日韩精品亚洲专区| 国产传媒日韩欧美成人| 91丨九色丨蝌蚪富婆spa| 欧美在线免费观看亚洲| 88在线观看91蜜桃国自产| 精品国产青草久久久久福利| 国产欧美日本一区视频| 一区二区在线观看不卡| 婷婷综合另类小说色区| 国产一区二区精品久久| av电影在线观看完整版一区二区| 欧美这里有精品| 2021久久国产精品不只是精品| 国产精品三级av| 三级成人在线视频| 国产成人精品综合在线观看| 欧美在线观看你懂的| 久久久久久久久久久久久夜| 亚洲毛片av在线| 国内国产精品久久| 欧洲激情一区二区| 国产人成亚洲第一网站在线播放| 亚洲男人的天堂在线aⅴ视频| 麻豆免费看一区二区三区| av电影天堂一区二区在线观看| 这里只有精品99re| 亚洲柠檬福利资源导航| 麻豆91小视频| 欧美无乱码久久久免费午夜一区| 精品美女一区二区| 图片区小说区国产精品视频| www.成人网.com|