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

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

?? driverentry.cpp

?? ezUSB fireware 的固件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
NTSTATUS GetIdentity(PDEVICE_OBJECT fdo) {
	PAGED_CODE();
// Need to discover the VID and PID currently in use
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	USB_DEVICE_DESCRIPTOR Descriptor;
	NTSTATUS Status;
	URB LocalUrb;
	PURB Urb = &LocalUrb;
	RtlZeroMemory(Urb, sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST));
	Urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST);
	Urb->UrbHeader.Function = URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE;
	Urb->UrbControlDescriptorRequest.TransferBufferLength = sizeof(Descriptor);
	Urb->UrbControlDescriptorRequest.TransferBuffer = &Descriptor;
	Urb->UrbControlDescriptorRequest.TransferBufferMDL = NULL;
	Urb->UrbControlDescriptorRequest.DescriptorType = 1;
	Status = SendUrbAndWait(fdo, Urb);
	pdx->VID = Descriptor.idVendor;
	pdx->PID = Descriptor.idProduct;
	KdPrint((DRIVERNAME "Current VID = %4.4x and PID = %4.4x\n", pdx->VID, pdx->PID)); 
	return Status;
	}

NTSTATUS SetEZUSBMemory(PDEVICE_OBJECT fdo, USHORT StartLocation, USHORT Length, PVOID DataBytes) {
	PAGED_CODE();
// Need to build a Vendor Request and send it to the development board
	URB LocalUrb;
	PURB Urb = &LocalUrb;
	RtlZeroMemory(Urb, sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST));
	Urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST);
	Urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE;
	Urb->UrbControlVendorClassRequest.TransferFlags = USBD_TRANSFER_DIRECTION_OUT;
	Urb->UrbControlVendorClassRequest.TransferBufferLength = Length;
	Urb->UrbControlVendorClassRequest.TransferBuffer = DataBytes;
	Urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL;
	Urb->UrbControlVendorClassRequest.Request = 0x0A0; // "Anchor Load"
	Urb->UrbControlVendorClassRequest.Value = StartLocation;	
	return SendUrbAndWait(fdo, Urb);
	}

NTSTATUS EZUSB_Reset(PDEVICE_OBJECT fdo, UCHAR ResetBit) {
	PAGED_CODE();
// EZUSB_Reset is a special case of SetEZUSBMemory
	return SetEZUSBMemory(fdo, 0x07F92, 1, &ResetBit);
	}

NTSTATUS GetFirmware(PDEVICE_OBJECT fdo) {
	PAGED_CODE();
// Open the Firmware file and load it into a local buffer
// First create the name of the file that we need to open
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	NTSTATUS Status;
	Status = GetIdentity(fdo);
	if (Status != STATUS_SUCCESS) {
		KdPrint((DRIVERNAME "Could not get VID and PID from IO device\n"));
		return Status;
		}
// Create a filename from the current VID and PID	
	WCHAR Filename[] = L"\\SystemRoot\\system32\\drivers\\vvvvpppp.hex";
	Filename[29] = HexCharacter[(pdx->VID >> 12) & 0x0F];
	Filename[30] = HexCharacter[(pdx->VID >> 8) & 0x0F];
	Filename[31] = HexCharacter[(pdx->VID >> 4) & 0x0F];
	Filename[32] = HexCharacter[pdx->VID & 0x0F];
	Filename[33] = HexCharacter[(pdx->PID >> 12) & 0x0F];
	Filename[34] = HexCharacter[(pdx->PID >> 8) & 0x0F];
	Filename[35] = HexCharacter[(pdx->PID >> 4) & 0x0F];
	Filename[36] = HexCharacter[pdx->PID & 0x0F];
// Need to use Walter Oney's portable file subsystem here since this driver may be running before
// the file system is running
	HANDLE FileHandle;
	Status = OpenFile(Filename, TRUE, &FileHandle);
	KdPrint((DRIVERNAME "OpenFile returned with status = %8.8x\n", Status));
	if (!NT_SUCCESS(Status)) return Status;
	
	pdx->HexFileLength = (ULONG) GetFileSize(FileHandle);
	pdx->HexFileBuffer = (PCHAR) ExAllocatePool(NonPagedPool, pdx->HexFileLength);
	if (!pdx->HexFileBuffer) return STATUS_NO_MEMORY;
	ULONG BytesReturned;
	Status = ReadFile(FileHandle, pdx->HexFileBuffer, pdx->HexFileLength, &BytesReturned);
	if (!NT_SUCCESS(Status)) KdPrint((DRIVERNAME "ReadFile failed with status = %8.8x\n", Status));
	else KdPrint((DRIVERNAME "ReadFile returned %d bytes\n", BytesReturned));
	CloseFile(FileHandle);
	return Status;
	}

bool GetNextCharacter(PDEVICE_OBJECT fdo, PCHAR BufferPtr) {
	PAGED_CODE();
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	*BufferPtr = pdx->HexFileBuffer[pdx->ByteOffset];
	if (pdx->ByteOffset++ < pdx->HexFileLength) return true;
	return false;
	}

bool GetNextLine(PDEVICE_OBJECT fdo, PCHAR BufferPtr) {
	PAGED_CODE();
// Get the next line from the input file, return FALSE if EOF
// First find the ':'
	do { if (!GetNextCharacter(fdo, BufferPtr)) return false; } while (*BufferPtr != ':');
// Then read until the end of the line
	do { if (!GetNextCharacter(fdo, ++BufferPtr)) return false; } while (*BufferPtr != 10); // EOL
	return true;
	}

SHORT value(char Entry) {
	PAGED_CODE();
	for (SHORT i = 0; i<sizeof(HexCharacter); i++) {if (Entry == HexCharacter[i]) return i;}
	KdPrint((DRIVERNAME "Invalid Hex character '%2.2x' in file\n", Entry)); return 0;
	}

///////////////////////////////////////////////////////////////////////////////
// This is where the work is done in this device driver

NTSTATUS StartDevice(PDEVICE_OBJECT fdo, PCM_PARTIAL_RESOURCE_LIST raw, PCM_PARTIAL_RESOURCE_LIST translated) {
	PAGED_CODE();
	PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
	KdPrint((DRIVERNAME "Starting IO device\n"));
// Starting the device involves downloading firmware into the EZ-USB component

// Open the HEX file and read it into a local buffer
	NTSTATUS Status = GetFirmware(fdo);
	if (Status != STATUS_SUCCESS) {
		KdPrint((DRIVERNAME "Could not get device firmware (%8.8x)\n", Status));
		return Status;
		}

// Loading is done in two passes since AnchorLoad only operates on internal memory addresses
// Load external memory first using a helper "mover" program
// First ensure that the EZ-USB 8051 is RESET before downloading
	Status = EZUSB_Reset(fdo, 1);
	if (Status != STATUS_SUCCESS) return Status;
// Since we are still here (previous line did not return) no need to check this Status further

	UCHAR MoverCode[] = 	// 8051 Object code for the Mover program
		{0x90, 0x7F, 0x9E, 0x74, 0x0C0, 0x0F0, 0x90, 0x7F, 0x95, 0x0F0, 0x75, 0x92, 0, 
		0x78, 0x24, 0x0E2, 0x60, 0x10, 0x0FF, 8, 0x0E2, 0xF5, 0x83, 8, 0x0E2, 0x0F5, 0x82,
		8, 8, 0x0E2, 0x0F0, 0x0A3, 0x0DF, 0x0FA, 0x80, 0x0FE, 0x0F, 0x0FF, 0x0F0, 0, 0x4D,
		0x6F, 0x76, 0x65, 0x72, 0x20, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6C, 0x6C, 0x65, 0x64};
	SetEZUSBMemory(fdo, 0, sizeof(MoverCode), MoverCode);
	EZUSB_Reset(fdo, 0); // unRESET the EZUSB CPU so that it executes this code

	UCHAR Record[40];
	char Buffer[80];
	int Pass, i;
	for (Pass = 1; Pass<3; Pass++) {
		pdx->ByteOffset = 0;	// Start at the beginning of the Hex data file
		EZUSB_Reset(fdo, 1);	// Stop the EZUSB CPU
		USHORT ByteCount, LoadAddress, RecordType;
// Read the HEX records one at a time and load them onto the development board
		while (GetNextLine(fdo, Buffer)) {
			ByteCount = Record[0] = (value(Buffer[1]) << 4) + value(Buffer[2]);
			for (i = 1; i<ByteCount+4; i++) Record[i] = (value(Buffer[1+i+i]) << 4) + value(Buffer[2+i+i]);;
			LoadAddress = (Record[1] << 8) + Record[2];
			RecordType = Record[3];
			if (RecordType == 0) {
// A content record (=0) has been located
				if ((Pass == 1) && (LoadAddress > 0x1FFF)) {
//					KdPrint((DRIVERNAME "Loading %2.2xH bytes at upper address %4.4xH\n", ByteCount, LoadAddress));
					SetEZUSBMemory(fdo, 0x24, ByteCount+4, Record);
					EZUSB_Reset(fdo, 0);	// unRESET EZUSB CPU so that it will move the data
					EZUSB_Reset(fdo, 1);	// Stop the EZUSB CPU again
					}
				if ((Pass == 2) && (LoadAddress + ByteCount) < 0x1B3F) {
//					KdPrint((DRIVERNAME "Loading %2.2xH bytes at lower address %4.4xH\n", ByteCount, LoadAddress));
					SetEZUSBMemory(fdo, LoadAddress, ByteCount, &Record[4]);
					}
				}
			}
		}
// All done, allow the EZ-USB CPU to 'renumerate'
	KdPrint((DRIVERNAME "Firmware downloaded!\n"));
	EZUSB_Reset(fdo, 0);
// Interesting philosophical point - the original device that caused this driver to run no longer 
// exists, since the driver has downloaded it with a new identity. 
// It would be preferrable to return UNSUCCESSFUL so the OS will mark us STOPPED. (this also prevents "Surprize Removal" messages on Win2K)
// However, the USDB.SYS driver will Suspend our I/O device if we do.  So return SUCCESS
	return STATUS_SUCCESS;
	}


VOID StopDevice(IN PDEVICE_OBJECT fdo, BOOLEAN oktouch /* = FALSE */) {
	PAGED_CODE();
	KdPrint((DRIVERNAME "Device Stopped\n"));
	}

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

#pragma LOCKEDCODE

extern "C" void __declspec(naked) __cdecl _chkesp() {
	_asm je okay
	ASSERT(!DRIVERNAME "Stack pointer mismatch!");
okay:
	_asm ret
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩久久| 色视频欧美一区二区三区| 日韩欧美亚洲国产另类| 激情欧美日韩一区二区| 精品国产乱码久久| 国产剧情一区二区| 国产精品精品国产色婷婷| 色综合咪咪久久| 午夜日韩在线观看| 日韩午夜激情视频| 成人免费看的视频| 午夜在线成人av| ww久久中文字幕| 91丝袜美女网| 无码av中文一区二区三区桃花岛| 欧美一区二区性放荡片| 极品销魂美女一区二区三区| 中文字幕欧美国产| 欧美在线观看视频一区二区三区| 爽好久久久欧美精品| 2020国产成人综合网| 一本色道久久综合亚洲精品按摩| 午夜免费欧美电影| 国产拍欧美日韩视频二区| 国产亚洲欧美一区在线观看| 色综合天天综合网天天狠天天| 天堂蜜桃91精品| 欧美激情一区在线| 制服丝袜一区二区三区| 成人伦理片在线| 视频一区二区国产| 久久久亚洲国产美女国产盗摄 | 色一情一乱一乱一91av| 亚洲精选在线视频| 久久女同性恋中文字幕| 欧美视频在线播放| 成人激情综合网站| 日韩精品每日更新| 国产精品不卡一区二区三区| 91精品欧美一区二区三区综合在| 国产一区91精品张津瑜| 香蕉乱码成人久久天堂爱免费| 久久久久久久综合| 欧美日韩mp4| 91免费观看视频| 韩国一区二区三区| 午夜精品福利一区二区三区蜜桃| 国产精品久久久久一区二区三区| 欧美一级欧美三级在线观看| 91亚洲国产成人精品一区二区三| 黄页网站大全一区二区| 亚洲国产日韩精品| 亚洲女女做受ⅹxx高潮| 国产精品午夜电影| 久久久国产精品午夜一区ai换脸| 欧美一区二区二区| 91国内精品野花午夜精品| 成人污污视频在线观看| 国产真实乱偷精品视频免| 日本成人在线不卡视频| 一区二区三区中文字幕| 1000精品久久久久久久久| 久久精品日产第一区二区三区高清版| 91精品国产入口在线| 欧美亚一区二区| 色美美综合视频| 成人美女视频在线观看18| 国产一区不卡精品| 国产一区二区精品久久91| 久草这里只有精品视频| 人人精品人人爱| 免费视频一区二区| 免费黄网站欧美| 久久精品国产亚洲aⅴ| 青青草97国产精品免费观看无弹窗版 | 一区二区三区中文字幕| 国产精品香蕉一区二区三区| 美女视频一区在线观看| 麻豆国产欧美一区二区三区| 美女任你摸久久| 久久精品国产999大香线蕉| 麻豆精品蜜桃视频网站| 男男视频亚洲欧美| 国产一区二区看久久| 国产不卡视频一区| 国产a精品视频| 成人av小说网| 色国产精品一区在线观看| 欧美在线观看一二区| 69久久夜色精品国产69蝌蚪网| 欧美精品在欧美一区二区少妇| 制服丝袜在线91| 久久久久九九视频| 亚洲人吸女人奶水| 亚洲成人av中文| 蜜臀av亚洲一区中文字幕| 国产尤物一区二区在线| 成人91在线观看| 欧美亚洲另类激情小说| 91精品国产一区二区| 国产午夜亚洲精品午夜鲁丝片| 国产精品色哟哟网站| 亚洲欧美日韩国产另类专区| 日本中文字幕一区二区有限公司| 狠狠色丁香九九婷婷综合五月| 日韩精品一区二区三区老鸭窝| 国产日产欧产精品推荐色 | 欧美午夜精品电影| 777久久久精品| 国产欧美va欧美不卡在线| 中文字幕一区二区不卡| 日韩一区欧美二区| 丰满白嫩尤物一区二区| 精品视频1区2区| 欧美sm美女调教| 亚洲日本一区二区| 看电影不卡的网站| 色综合天天狠狠| 精品国内片67194| 亚洲黄网站在线观看| 久久9热精品视频| av资源网一区| 精品处破学生在线二十三| 亚洲人成网站精品片在线观看 | 亚洲一区二区欧美| 国产在线看一区| 欧美人与禽zozo性伦| 欧美国产精品劲爆| 日本中文字幕一区二区有限公司| www.久久精品| 久久久精品免费免费| 亚洲最大的成人av| 成人免费精品视频| 精品电影一区二区三区| 三级不卡在线观看| 99久久精品免费| 2023国产精品自拍| 视频一区免费在线观看| 91美女蜜桃在线| 欧美国产日产图区| 久久精品国产网站| 337p亚洲精品色噜噜噜| 一个色综合网站| 99re66热这里只有精品3直播| 欧美精品一区二区三区在线播放| 亚洲成av人在线观看| 99久久精品免费精品国产| 国产日韩精品久久久| 老汉av免费一区二区三区| 欧美日韩国产区一| 夜夜揉揉日日人人青青一国产精品| 国产.欧美.日韩| 久久久久青草大香线综合精品| 久久精品国产在热久久| 91精品啪在线观看国产60岁| 亚洲电影第三页| 欧美日韩一二三| 一区二区三区中文在线观看| 91影视在线播放| 中文字幕在线观看一区| 丁香六月久久综合狠狠色| 久久亚洲精华国产精华液| 国产在线精品不卡| 欧美r级电影在线观看| 久久99精品久久久久婷婷| 欧美一级欧美一级在线播放| 日本成人中文字幕在线视频| 777亚洲妇女| 麻豆免费看一区二区三区| 欧美一区二区私人影院日本| 日本一区中文字幕 | 国产在线精品不卡| 久久免费的精品国产v∧| 国产精品77777竹菊影视小说| 久久久精品影视| 国产成人在线观看| 国产精品热久久久久夜色精品三区 | 久久久久久久网| 国产成人综合在线播放| 中文字幕av一区二区三区免费看| 成人免费看视频| 亚洲女人的天堂| 欧美人妇做爰xxxⅹ性高电影| 午夜精品一区二区三区电影天堂 | 欧美一区二区大片| 久久精品国产久精国产爱| 国产亚洲精品免费| 99v久久综合狠狠综合久久| 一个色在线综合| 日韩亚洲欧美成人一区| 国产成人精品综合在线观看 | 久久毛片高清国产| 成人动漫在线一区| 一区二区三区毛片| 日韩欧美一二三四区| 国产a区久久久| 亚洲一区二区三区视频在线| 日韩欧美国产成人一区二区| 国产精品一级二级三级| 亚洲人成亚洲人成在线观看图片|