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

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

?? driverentry.cpp

?? ezUSB fireware 的固件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// 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;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品自拍动漫在线| 欧美va天堂va视频va在线| 亚洲天堂网中文字| 色综合久久中文综合久久牛| 国产精品第五页| 日本乱人伦一区| 亚洲777理论| 2021久久国产精品不只是精品| 国产精品一线二线三线| 精品国产电影一区二区| 国产69精品一区二区亚洲孕妇| 欧美激情综合五月色丁香| 99精品热视频| 亚洲二区在线视频| 精品国产乱码久久久久久闺蜜| 国产成人av自拍| 尤物在线观看一区| 日韩欧美国产一区二区在线播放| 韩日精品视频一区| 亚洲人成7777| 日韩午夜精品视频| 成av人片一区二区| 三级欧美韩日大片在线看| 26uuu国产电影一区二区| 国产成人精品一区二区三区四区| 亚洲黄色尤物视频| 欧美一级一区二区| av不卡免费在线观看| 偷拍一区二区三区| 欧美韩日一区二区三区四区| 欧美特级限制片免费在线观看| 老司机午夜精品99久久| 17c精品麻豆一区二区免费| 8v天堂国产在线一区二区| 岛国精品在线观看| 日本麻豆一区二区三区视频| 国产精品三级视频| 中文字幕国产精品一区二区| 欧美影院精品一区| 国产成人自拍网| 日韩精品久久理论片| 中文一区二区完整视频在线观看| 欧美裸体bbwbbwbbw| 成人理论电影网| 蜜桃av一区二区| 夜夜精品视频一区二区| 国产喷白浆一区二区三区| 欧美视频三区在线播放| 成人动漫在线一区| 久久99在线观看| 亚洲国产日韩综合久久精品| 国产精品美女一区二区在线观看| 5月丁香婷婷综合| 91久久精品一区二区二区| 国产精品 欧美精品| 免费看日韩a级影片| 亚洲午夜精品在线| 亚洲在线免费播放| 亚洲人成精品久久久久| 国产精品国产自产拍在线| 精品日韩99亚洲| 欧美一二三区在线观看| 在线综合视频播放| 欧美午夜精品久久久久久孕妇| 福利一区二区在线| 国产激情一区二区三区| 国产中文字幕一区| 久久97超碰色| 激情文学综合网| 久久国产综合精品| 美女视频一区二区| 日本女优在线视频一区二区| 视频在线在亚洲| 91丨九色丨蝌蚪丨老版| 国产成人在线视频播放| 精品无人码麻豆乱码1区2区 | 麻豆精品在线播放| 免费观看在线综合色| 强制捆绑调教一区二区| 日本午夜一区二区| 美女一区二区三区在线观看| 久久精品国产色蜜蜜麻豆| 国精产品一区一区三区mba视频| 国产麻豆日韩欧美久久| 国产麻豆欧美日韩一区| 成人午夜激情影院| 99久久99久久免费精品蜜臀| 99久久久久免费精品国产| 99re8在线精品视频免费播放| eeuss国产一区二区三区| jlzzjlzz国产精品久久| 在线亚洲+欧美+日本专区| 欧美日韩精品电影| 欧美一区二区美女| 久久婷婷一区二区三区| 综合中文字幕亚洲| 亚洲国产精品一区二区www| 午夜日韩在线观看| 麻豆国产精品视频| 成人免费视频视频| 欧美吻胸吃奶大尺度电影| 欧美丰满一区二区免费视频| 精品少妇一区二区三区在线播放| 久久久国产一区二区三区四区小说 | 在线视频观看一区| 在线不卡一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 国产日韩欧美精品在线| 最好看的中文字幕久久| 爽好久久久欧美精品| 国产精品一区二区无线| 91色在线porny| 91精品国产综合久久小美女| 久久久久99精品一区| 成人av影视在线观看| 欧美午夜精品电影| 精品久久久久香蕉网| 亚洲三级在线播放| 免费日本视频一区| 99精品欧美一区二区蜜桃免费| 欧美日韩国产成人在线91| 国产日韩欧美a| 日韩电影在线观看一区| 成人av综合在线| 日韩欧美在线123| 亚洲欧美色综合| 韩日av一区二区| 欧美性欧美巨大黑白大战| 久久精品一区二区| 午夜精品久久久久久久99水蜜桃| 国产福利精品导航| 欧美日韩二区三区| 一区二区中文视频| 精品一区二区三区免费播放| 日本精品视频一区二区| 久久精品亚洲国产奇米99| 亚洲一区视频在线观看视频| 国产乱人伦偷精品视频不卡| 欧美视频一区二区| 亚洲欧美自拍偷拍| 国产乱子伦一区二区三区国色天香| 欧美伊人精品成人久久综合97| 国产人妖乱国产精品人妖| 丝袜美腿高跟呻吟高潮一区| 99v久久综合狠狠综合久久| 欧美精品一区二区高清在线观看| 亚洲在线免费播放| 91美女片黄在线观看| 国产色91在线| 久草中文综合在线| 51久久夜色精品国产麻豆| 一卡二卡欧美日韩| 91色综合久久久久婷婷| 国产精品久久久久桃色tv| 国产精品一卡二| 精品少妇一区二区三区日产乱码| 污片在线观看一区二区| 欧美日韩一区成人| 亚洲最新视频在线观看| 色天使久久综合网天天| 亚洲三级在线播放| 91免费国产在线| 亚洲人妖av一区二区| 99精品国产视频| 中文字幕日韩欧美一区二区三区| 国产激情偷乱视频一区二区三区| 精品三级av在线| 国产综合色在线| 欧美精品一区二区不卡| 国产一区久久久| 久久精品亚洲精品国产欧美| 国产一区二区三区不卡在线观看| 精品美女在线播放| 国内久久精品视频| 久久久久久麻豆| av在线不卡观看免费观看| 国产精品成人免费精品自在线观看| 懂色av一区二区三区免费观看| 国产精品视频第一区| thepron国产精品| 亚洲激情欧美激情| 91 com成人网| 国产在线精品一区二区夜色| 久久婷婷综合激情| 9色porny自拍视频一区二区| 中文字幕中文字幕中文字幕亚洲无线| 成人免费高清在线观看| 亚洲天堂成人在线观看| 色哟哟精品一区| 天堂成人免费av电影一区| 日韩三级免费观看| 国产成人精品一区二区三区四区| 中文字幕在线观看不卡视频| 色婷婷综合久久久中文字幕| 日日骚欧美日韩| 久久综合视频网| 色综合久久六月婷婷中文字幕| 天堂va蜜桃一区二区三区 | 日韩va亚洲va欧美va久久| 久久综合色婷婷|