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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? driverentry.cpp

?? ezUSB fireware 的固件
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
// Main program for LoadEz function driver: EZ-USB auto-loader program, Version 2.0
// Copyright (C) 2000 by John Hyde, USB Design By Example
// All rights reserved
//
// Derived using Walter Oney's WDM Wizard
// Copyright (C) 1999, 2000 by Walter Oney
// All rights reserved.  Used with permission
//
// Also uses Walter Oney's Portable FileIO Subsystem
// Copyright (C) 1999, 2000 by Walter Oney
// All rights reserved.  Used with permission
//
// Please send all comments, suggestions and error reports to John@USB-By-Example.com

/*	Permission is hereby granted to:
	(1) to merge this program code with other program material to create a derivative work and 
	(2) to republish this program, or any work derived, in whole or in part, therefrom, in compiled
		object form only. Any other publication of this program, in any form, without the explicit 
		permission of the copyright holders is prohibited.
*/

#include "stddcls.h"
#include "driver.h"
#include <initguid.h>
#include "guids.h"
#include "usbdi.h"
#include "fileIO.h"

NTSTATUS AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo);
VOID DriverUnload(PDRIVER_OBJECT fdo);

struct INIT_STRUCT : public _GENERIC_INIT_STRUCT {};

// Need a few global variables
const WCHAR HexCharacter[] = L"0123456789ABCDEF";
BOOLEAN win98 = FALSE;

///////////////////////////////////////////////////////////////////////////////

#pragma INITCODE

extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) {
	KdPrint((DRIVERNAME "Version 2.1. (John@USB-By-Example.com)\n"));

// We require GENERIC.SYS 1.3 or later.
	if (GenericGetVersion() < 0x00010003) {
		KdPrint((DRIVERNAME "Required version (=>1.3) of GENERIC.SYS not installed\n"));
		return STATUS_UNSUCCESSFUL;
		}

// See if we're running under Win98 or NT:
	win98 = IsWin98();
	KdPrint((DRIVERNAME "Running under Windows(R) "));
	if (win98) KdPrint (("98\n")); else KdPrint(("NT\n"));

// Initialize function pointers.  LoadEz only needs four
	DriverObject->DriverUnload = DriverUnload;
	DriverObject->DriverExtension->AddDevice = AddDevice;
	DriverObject->MajorFunction[IRP_MJ_POWER] = DispatchPower;
	DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
	
	return STATUS_SUCCESS;
	}


#pragma PAGEDCODE

VOID DriverUnload(PDRIVER_OBJECT DriverObject) {
	PAGED_CODE();
	KdPrint((DRIVERNAME "Unloading Driver\n"));
	}

///////////////////////////////////////////////////////////////////////////////

NTSTATUS AddDevice(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT pdo) {
	PAGED_CODE();
	KdPrint((DRIVERNAME "Adding Device\n"));
	NTSTATUS status;

// Create a functional device object to represent the hardware we're managing.
	PDEVICE_OBJECT fdo;
	ULONG dxsize = (sizeof(DEVICE_EXTENSION) + 7) & ~7;
	ULONG xsize = dxsize + GetSizeofGenericExtension();
	status = IoCreateDevice(DriverObject, xsize, NULL, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &fdo);
	if (!NT_SUCCESS(status)) {
		KdPrint((DRIVERNAME "IoCreateDevice failed with status %X\n", status));
		return status;
		}
	KdPrint((DRIVERNAME "Device Object (%8.8x) created\n", fdo));

	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	BOOLEAN ginit = FALSE;

// From this point forward, any error will have side effects that need to be cleaned up. 
// Using a try-finally block allows easy modification without losing track of the side effects.
	__try
		{						// finish initialization
		pdx->DeviceObject = fdo;
		pdx->Pdo = pdo;

// Link our device object into the stack leading to the PDO
		pdx->LowerDeviceObject = IoAttachDeviceToDeviceStack(fdo, pdo);
		if (!pdx->LowerDeviceObject) {
			KdPrint((DRIVERNAME "IoAttachDeviceToDeviceStack failed\n"));
			status = STATUS_DEVICE_REMOVED;
			__leave;
			}						// can't attach device

// Set power management flags in the device object
		fdo->Flags |= DO_POWER_PAGABLE;

// Initialize to use the GENERIC.SYS library
		pdx->pgx = (PGENERIC_EXTENSION) ((PUCHAR) pdx + dxsize);
		INIT_STRUCT gis;
		RtlZeroMemory(&gis, sizeof(gis));
		gis.Size = sizeof(gis);
		gis.DeviceObject = fdo;
		gis.Pdo = pdo;
		gis.Ldo = pdx->LowerDeviceObject;
		gis.RemoveLock = &pdx->RemoveLock;
		gis.StartDevice = StartDevice;
		gis.StopDevice = StopDevice;
		gis.RemoveDevice = RemoveDevice;
		RtlInitUnicodeString(&gis.DebugName, LDRIVERNAME);

		status = InitializeGenericExtension(pdx->pgx, &gis);
		if (!NT_SUCCESS(status)) {
			KdPrint((DRIVERNAME "InitializeGenericExtension failed with status %X\n", status));
			__leave;
			}
		ginit = TRUE;
		GenericRegisterInterface(pdx->pgx, &GUID_INTERFACE_LOADEZ);

// Clear the "initializing" flag so that we can get IRPs
		fdo->Flags &= ~DO_DEVICE_INITIALIZING;
		}							// finish initialization
	__finally
		{							// cleanup side effects
		if (!NT_SUCCESS(status)) {	// need to cleanup
			if (ginit) CleanupGenericExtension(pdx->pgx);
			if (pdx->LowerDeviceObject) IoDetachDevice(pdx->LowerDeviceObject);
			IoDeleteDevice(fdo);
			}
		}
	return status;
	}

VOID RemoveDevice(IN PDEVICE_OBJECT fdo) {
	PAGED_CODE();
	KdPrint((DRIVERNAME "Removing Device (%8.8x)\n", fdo));
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	NTSTATUS status;
	if (pdx->LowerDeviceObject) IoDetachDevice(pdx->LowerDeviceObject);
	if (pdx->HexFileBuffer) ExFreePool(pdx->HexFileBuffer); 
	IoDeleteDevice(fdo);
	}

///////////////////////////////////////////////////////////////////////////////
// Plug-and-Play and Power Management is handled, for the most part, by GENERIC.SYS

NTSTATUS DispatchPnp(PDEVICE_OBJECT fdo, PIRP Irp) {
	PAGED_CODE();
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	return GenericDispatchPnp(pdx->pgx, Irp);
	}

NTSTATUS DispatchPower(PDEVICE_OBJECT fdo, PIRP Irp) {
	PAGED_CODE();
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	return GenericDispatchPower(pdx->pgx, Irp);
	}

///////////////////////////////////////////////////////////////////////////////
// Declare the support functions

NTSTATUS SendUrbAndWait(PDEVICE_OBJECT fdo, PURB Urb) {
	PAGED_CODE();
	KEVENT Event;
	IO_STATUS_BLOCK ioStatus;
	NTSTATUS Status = STATUS_SUCCESS;
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	KeInitializeEvent(&Event, NotificationEvent, FALSE);
	PIRP Irp = IoBuildDeviceIoControlRequest(IOCTL_INTERNAL_USB_SUBMIT_URB,
		pdx->LowerDeviceObject, NULL, 0, NULL, 0, TRUE, &Event, &ioStatus);
	PIO_STACK_LOCATION Stack = IoGetNextIrpStackLocation(Irp);
	Stack->Parameters.Others.Argument1 = (PVOID) Urb;
	Status = IoCallDriver(pdx->LowerDeviceObject, Irp);
	if (Status == STATUS_PENDING) {
		KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
		Status = ioStatus.Status;
		}
	return Status;
	}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人一二三| 亚洲天堂成人在线观看| 91在线精品秘密一区二区| 五月天中文字幕一区二区| 国产精品色一区二区三区| 欧美一区二区三区男人的天堂| 波多野结衣中文一区| 免费一级片91| 亚洲一区在线视频| 中文字幕欧美三区| 精品播放一区二区| 欧美久久久久久蜜桃| 91小宝寻花一区二区三区| 国产在线播精品第三| 亚洲第一主播视频| 最新久久zyz资源站| 欧美国产一区在线| 亚洲精品在线三区| 欧美一区二区在线不卡| 欧美三级韩国三级日本三斤| 91在线一区二区三区| 成人小视频在线观看| 国产91在线看| 国产成人高清在线| 韩国一区二区三区| 久久国产精品区| 免费高清在线一区| 日韩av电影一区| 日韩av午夜在线观看| 天堂蜜桃91精品| 午夜精品在线视频一区| 亚洲午夜久久久久| 亚洲高清免费一级二级三级| 一区2区3区在线看| 一区二区三区精品视频| 日韩一区有码在线| 亚洲精品欧美激情| 亚洲尤物在线视频观看| 亚洲一区在线观看网站| 亚洲综合丝袜美腿| 亚洲一本大道在线| 肉色丝袜一区二区| 青青草伊人久久| 精品一区二区三区香蕉蜜桃 | 国产精品视频一二三区 | 亚洲成av人片观看| 亚洲成a人片在线不卡一二三区 | 亚洲观看高清完整版在线观看| 亚洲女同一区二区| 一区二区三区不卡视频在线观看| 一区二区三区成人在线视频| 亚洲不卡一区二区三区| 日韩黄色在线观看| 久草中文综合在线| 岛国一区二区在线观看| 99久久国产免费看| 欧美四级电影在线观看| 3d成人动漫网站| 久久网这里都是精品| 国产欧美1区2区3区| 综合久久综合久久| 亚洲成在人线在线播放| 蜜桃视频第一区免费观看| 国产一区二区三区在线观看免费视频 | 久久久无码精品亚洲日韩按摩| 国产喷白浆一区二区三区| 亚洲欧洲综合另类在线| 五月天视频一区| 国产一区二区不卡老阿姨| 99精品视频中文字幕| 欧美视频三区在线播放| 欧美成人午夜电影| 一区视频在线播放| 爽好多水快深点欧美视频| 国产在线视频精品一区| 91老司机福利 在线| 在线播放一区二区三区| 久久亚洲影视婷婷| 亚洲影院理伦片| 激情五月婷婷综合网| 99久久久精品免费观看国产蜜| 777欧美精品| 国产精品日韩成人| 青青国产91久久久久久| 99re这里只有精品首页| 日韩一区二区三区免费看| 中文字幕精品一区二区精品绿巨人 | 首页国产丝袜综合| 不卡电影免费在线播放一区| 欧美电影在哪看比较好| 中文字幕 久热精品 视频在线| 日韩和欧美的一区| 成人精品视频一区二区三区| 日韩午夜小视频| 洋洋av久久久久久久一区| 经典三级视频一区| 欧美日韩国产成人在线免费| 中文字幕国产精品一区二区| 天堂久久一区二区三区| 91亚洲精品一区二区乱码| 精品久久久三级丝袜| 亚洲综合图片区| 99精品热视频| 国产欧美一区二区三区鸳鸯浴| 日本女人一区二区三区| 色噜噜夜夜夜综合网| 中文字幕乱码一区二区免费| 蜜桃一区二区三区在线| 欧美日韩精品欧美日韩精品| 国产精品国产三级国产aⅴ入口 | 99国产精品国产精品毛片| 久久久久久久综合狠狠综合| 天天av天天翘天天综合网色鬼国产| 成人av高清在线| 亚洲精品一区二区三区在线观看| 亚洲成人动漫av| 欧美午夜一区二区三区| 亚洲精品综合在线| a亚洲天堂av| 中文在线资源观看网站视频免费不卡 | 精品国内二区三区| 日韩一区欧美二区| 欧美日韩久久久| 亚洲一区二区三区四区的 | 91视频91自| 亚洲人成亚洲人成在线观看图片| 成人午夜激情在线| 国产欧美精品一区二区色综合| 91精品国产欧美日韩| 亚洲综合图片区| 在线精品视频一区二区| 亚洲综合一区二区三区| 在线观看视频一区二区欧美日韩| 亚洲欧美二区三区| 欧美性感一区二区三区| 亚洲国产一区二区三区 | 欧美色爱综合网| 亚洲国产成人高清精品| 51精品秘密在线观看| 美女尤物国产一区| 精品人伦一区二区色婷婷| 激情综合网最新| 久久精品视频在线看| 丁香亚洲综合激情啪啪综合| 国产日韩欧美一区二区三区乱码| 高清成人在线观看| 亚洲丝袜美腿综合| 欧美在线制服丝袜| 五月婷婷欧美视频| 精品av久久707| 懂色av一区二区夜夜嗨| 最新高清无码专区| 欧美日韩国产欧美日美国产精品| 日韩精品色哟哟| 精品福利av导航| 99综合影院在线| 亚洲成av人片在线观看| 日韩精品一区二区三区在线| 经典三级一区二区| 亚洲欧洲精品天堂一级| 欧美日韩一二区| 狠狠色丁香婷婷综合| 国产精品久久久久影院老司| 欧美三级欧美一级| 狠狠色丁香婷婷综合| 国产精品久久久久久久久免费樱桃| 色嗨嗨av一区二区三区| 日本中文字幕一区二区视频| 国产日韩欧美在线一区| 日本道免费精品一区二区三区| 日本sm残虐另类| 中文字幕乱码久久午夜不卡 | 亚洲精选免费视频| 日韩欧美色电影| 99国产欧美久久久精品| 日韩1区2区日韩1区2区| 中文字幕乱码日本亚洲一区二区| 欧美图区在线视频| 国产福利一区二区三区| 一区二区三区在线视频观看| 日韩欧美一二区| 91丨九色丨尤物| 久久99久久久久| 亚洲欧美一区二区三区久本道91| 欧美一区二区在线观看| 91亚洲永久精品| 韩国一区二区视频| 亚洲123区在线观看| 国产精品乱人伦一区二区| 91精品国产综合久久久蜜臀粉嫩| 豆国产96在线|亚洲| 男男成人高潮片免费网站| 亚洲人成小说网站色在线 | 午夜精品视频一区| 国产精品白丝在线| 欧美成人aa大片| 欧美图区在线视频| 99久久99久久精品免费观看| 国产一区二区三区四区五区美女 | 天堂一区二区在线|