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

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

?? ezloader.c

?? EZ_LOADER驅動程序源代碼(VC工程文件)
?? 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一区二区三区免费野_久草精品视频
国产三级一区二区三区| 亚洲国产中文字幕在线视频综合 | 欧美性感一区二区三区| 捆绑紧缚一区二区三区视频| 亚洲欧洲日韩女同| 欧美大片国产精品| 欧美中文字幕久久| 91视频91自| 国产成人精品影视| 激情综合网最新| 婷婷久久综合九色综合绿巨人| 中文在线一区二区| 欧美成人女星排名| 欧美色综合网站| 色哟哟一区二区三区| 国产91对白在线观看九色| 蜜桃视频在线一区| 午夜久久电影网| 亚洲午夜影视影院在线观看| 国产精品乱码妇女bbbb| 久久久国际精品| 久久影院电视剧免费观看| 91精品免费在线观看| 欧美亚洲一区三区| 欧美日韩三级一区| 欧美性做爰猛烈叫床潮| 色嗨嗨av一区二区三区| 色综合久久综合网欧美综合网| 成人国产亚洲欧美成人综合网 | 免费成人深夜小野草| 亚洲第一主播视频| 亚洲最大成人网4388xx| 亚洲人成小说网站色在线 | 中文天堂在线一区| 国产日本一区二区| 国产精品色一区二区三区| 久久九九99视频| 国产偷国产偷亚洲高清人白洁| 2020国产精品自拍| 国产婷婷色一区二区三区| 国产欧美日韩卡一| 国产精品久久久久aaaa樱花| 亚洲天堂免费在线观看视频| 亚洲女同ⅹxx女同tv| 亚洲激情网站免费观看| 亚洲观看高清完整版在线观看| 亚洲愉拍自拍另类高清精品| 亚洲18影院在线观看| 日韩二区三区四区| 精品一区二区三区在线播放视频| 国产在线不卡一区| 成人激情图片网| 97se亚洲国产综合自在线观| 91久久精品一区二区三区| 欧美性受xxxx黑人xyx| 欧美一级日韩免费不卡| 2024国产精品视频| 国产精品卡一卡二卡三| 亚洲另类中文字| 丝袜美腿亚洲色图| 精品一区精品二区高清| 成人高清视频在线观看| 欧美亚洲精品一区| 日韩精品一区二区三区蜜臀| 国产欧美日本一区二区三区| 自拍偷拍亚洲激情| 天堂va蜜桃一区二区三区漫画版 | 蜜臀av性久久久久av蜜臀妖精| 黄色成人免费在线| 99久久99久久精品免费看蜜桃| 在线观看亚洲成人| 精品久久久久久久人人人人传媒| 国产欧美一区二区在线| 亚洲国产一区二区三区| 国产在线精品国自产拍免费| 色综合久久久久久久久久久| 欧美精品自拍偷拍动漫精品| 国产亚洲精久久久久久| 亚洲二区在线视频| 国产盗摄一区二区| 欧美人xxxx| 国产无人区一区二区三区| 亚洲午夜av在线| 国产成人亚洲综合a∨婷婷图片| 欧美自拍偷拍一区| 久久精品在线观看| 亚洲夂夂婷婷色拍ww47| 国产高清不卡一区| 欧美一区二区播放| 亚洲视频 欧洲视频| 激情图片小说一区| 欧美日本在线视频| 国产精品麻豆欧美日韩ww| 日本伊人午夜精品| 91久久国产最好的精华液| 久久综合久久鬼色| 丝袜a∨在线一区二区三区不卡| 国产999精品久久久久久绿帽| 777色狠狠一区二区三区| 亚洲欧洲日韩一区二区三区| 国产美女精品一区二区三区| 欧美日韩国产美女| 亚洲婷婷在线视频| 国产不卡视频在线播放| 制服丝袜中文字幕一区| 亚洲伦理在线免费看| 国产成人午夜视频| 久久网这里都是精品| 七七婷婷婷婷精品国产| 欧美亚洲国产一区在线观看网站| 中文字幕+乱码+中文字幕一区| 久久国产乱子精品免费女| 欧美日韩三级一区| 亚洲综合一区二区| 91影视在线播放| 国产精品三级电影| 懂色av噜噜一区二区三区av| 精品国产三级a在线观看| 午夜亚洲福利老司机| 91黄色免费观看| 亚洲精选视频在线| www.亚洲国产| 国产精品久久久久久久蜜臀| 国产精品88av| 久久日一线二线三线suv| 久久99深爱久久99精品| 在线电影一区二区三区| 五月天亚洲精品| 在线不卡的av| 午夜国产精品一区| 8x福利精品第一导航| 日本成人超碰在线观看| 91精品国产综合久久精品麻豆| 亚洲大片精品永久免费| 欧美日韩中字一区| 丝袜a∨在线一区二区三区不卡| 欧美日韩精品一二三区| 亚洲国产综合在线| 欧美一级二级三级乱码| 精品一区二区三区不卡| 久久影院电视剧免费观看| 国产一区999| 国产日韩欧美精品一区| 成人精品亚洲人成在线| 中文字幕在线不卡视频| 97se亚洲国产综合自在线观| 伊人开心综合网| 欧美日韩五月天| 奇米影视在线99精品| 久久伊人蜜桃av一区二区| 极品瑜伽女神91| 欧美国产日产图区| 91蜜桃在线免费视频| 亚洲一区中文日韩| 日韩一级片网址| 国产成人一区在线| 一区二区三区在线观看视频| 51午夜精品国产| 国产福利一区二区三区视频在线| 最新成人av在线| 欧美一区二区在线视频| 国产成人在线免费观看| 亚洲久本草在线中文字幕| 日韩一区二区三区视频在线观看| 国产乱码精品一区二区三区忘忧草 | 日韩一级欧美一级| 粉嫩av一区二区三区粉嫩| 亚洲欧美怡红院| 7777精品伊人久久久大香线蕉超级流畅 | 最新日韩av在线| 欧美区一区二区三区| 激情综合色播激情啊| 亚洲黄色av一区| 精品国产伦一区二区三区观看方式| 丁香啪啪综合成人亚洲小说 | 丁香婷婷深情五月亚洲| 一区二区三区日韩精品视频| 日韩欧美亚洲国产另类| 成人激情小说网站| 日本在线不卡一区| 亚洲少妇中出一区| 欧美tickle裸体挠脚心vk| 日本高清免费不卡视频| 久久se这里有精品| 尤物在线观看一区| 国产亚洲欧美日韩在线一区| 欧美日韩国产小视频| av网站免费线看精品| 国内成人精品2018免费看| 亚洲资源在线观看| 国产精品免费丝袜| 日韩免费福利电影在线观看| 91社区在线播放| 欧美成人艳星乳罩| 国产剧情一区在线| 欧美极品少妇xxxxⅹ高跟鞋| 欧美性大战久久久久久久蜜臀| 国产一区二区女| 香蕉久久夜色精品国产使用方法| 国产拍揄自揄精品视频麻豆|