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

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

?? blcommon.c

?? windows CE 的BSP開發(fā)包.包含眾多的驅(qū)動程序和OAL層的開發(fā)代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
			// determine number of BIN files to be downloaded.
			if (!OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecChk)) {
				EdbgOutputDebugString("\r\nUnable to read BIN region checksum.\r\n");
				HALT (BLERR_MAGIC);
				return FALSE;
			}
			// read BIN region descriptions (start address and length).
			if (!OEMReadData (sizeof (DWORD), (LPBYTE) &g_MultiBINInfo.dwNumRegions)
			    || !OEMReadData ((g_MultiBINInfo.dwNumRegions * sizeof(RegionInfo)), (LPBYTE) &g_MultiBINInfo.Region[0])) {
				EdbgOutputDebugString("\r\nUnable to read BIN region descriptors.\r\n");
				HALT (BLERR_MAGIC);
				return FALSE;
			}
			// verify the packet checksum.
			if (!VerifyChecksum((g_MultiBINInfo.dwNumRegions * sizeof(RegionInfo)), (LPBYTE) &g_MultiBINInfo.Region, dwRecChk)) {
				EdbgOutputDebugString ("\r\nBIN region descriptor packet failed checksum.\r\n");
				HALT (BLERR_CHECKSUM);
				return FALSE;
			}

			// provide the region information to the OEM.
			if (g_pOEMMultiBINNotify) {
				g_pOEMMultiBINNotify((const PMultiBINInfo)&g_MultiBINInfo);
			}

			// look for next download...
			nNumRegions = (BYTE)(g_MultiBINInfo.dwNumRegions + 1);		// +1 to account for this packet.
			continue;
		}
		else {
			// make sure it is a standard BIN file.
			if (memcmp (hdr, "B000FF\x0A", BL_HDRSIG_SIZE)) {
				EdbgOutputDebugString ("\r\nThis is not a .BIN file %x %x %x %x %x %x %x\r\n",
					hdr[0], hdr[1], hdr[2], hdr[3], hdr[4], hdr[5], hdr[6]);
				HALT (BLERR_MAGIC);
				return FALSE;
			}
		}

		// read image start/length
		if (!OEMReadData (sizeof (DWORD), (LPBYTE) &dwImageStart)
			|| !OEMReadData (sizeof (DWORD), (LPBYTE) &dwImageLength)) {
			EdbgOutputDebugString ("Unable to read image start/length\r\n");
			HALT (BLERR_MAGIC);
			return FALSE;
		}

		// if this is a single-bin download, record the bin file information and notify the OEM.
		if (!g_MultiBINInfo.dwNumRegions) {
			g_MultiBINInfo.dwNumRegions             = 1;
			g_MultiBINInfo.Region[0].dwRegionStart  = dwImageStart;
			g_MultiBINInfo.Region[0].dwRegionLength = dwImageLength;

			// provide the region information to the OEM.
			if (g_pOEMMultiBINNotify) {
				g_pOEMMultiBINNotify((const PMultiBINInfo)&g_MultiBINInfo);
			}
		}

		// give the OEM a chance to verify memory
		if (g_pOEMVerifyMemory && !g_pOEMVerifyMemory (dwImageStart, dwImageLength)) {
			EdbgOutputDebugString ("!OEMVERIFYMEMORY: Invalid image\r\n");
			HALT (BLERR_OEMVERIFY);
			return FALSE;
		}

		// check for flash image. Start erasing if it is.
		if ((fIsFlash = OEMIsFlashAddr (dwImageStart))
			&& !OEMStartEraseFlash (dwImageStart, dwImageLength)) {
			EdbgOutputDebugString ("Invalid Flash Address/Length\r\n");
			HALT (BLERR_FLASHADDR);
			return FALSE;
		}

		// read records (start with address, length, and checksum)
		while (OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecAddr)
			&& OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecLen)
			&& OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecChk)) {

			RETAILMSG(1, (_T("DownloadImage RecAddr: 0x%x\r\n"), dwRecAddr));
			RETAILMSG(1, (_T("DownloadImage RecLen:  0x%x\r\n"), dwRecLen));
			RETAILMSG(1, (_T("DownloadImage RecChk:  0x%x\r\n"), dwRecChk));

			// check for last record
			if (!dwRecAddr && !dwRecChk) {
				// if this is the kernel region, update launch address
				if (IsKernelRegion(dwImageStart, dwImageLength)) {
					*pdwImageStart  = dwImageStart;
					*pdwImageLength = dwImageLength;
					*pdwLaunchAddr  = dwRecLen;

        			RETAILMSG(1, (_T("dwImageStart : 0x%x\r\n"), dwImageStart));
        			RETAILMSG(1, (_T("dwImageLength: 0x%x\r\n"), dwImageLength));
        			RETAILMSG(1, (_T("LaunchAddr   : 0x%x\r\n"), dwRecLen));
				}

				// write to flash if it's flash image
				if (fIsFlash) {
					// finish the flash erase
					if (!OEMFinishEraseFlash ()) {
						HALT (BLERR_FLASH_ERASE);
						return FALSE;
					}
					// Before writing the image to flash, optionally check the image signature.
					if (g_pOEMCheckSignature)
					{
						if (!g_pOEMCheckSignature(dwImageStart, g_dwROMOffset, *pdwLaunchAddr, TRUE))
							HALT(BLERR_WHQL_SIGNATURE);
					}
				}

				// On to the next (possible) BIN file...
				break;
			}

			// map the record address (FLASH data is cached, for example)
			lpDest = OEMMapMemAddr (dwImageStart, dwRecAddr);

			// read data block
			if (!OEMReadData (dwRecLen, lpDest)) {
				EdbgOutputDebugString ("****** Data record %d corrupted, ABORT!!! ******\r\n", nPkgNum);
				HALT (BLERR_CORRUPTED_DATA);
				return FALSE;
			}

			if (!VerifyChecksum (dwRecLen, lpDest, dwRecChk)) {
				EdbgOutputDebugString ("****** Checksum failure on record %d, ABORT!!! ******\r\n", nPkgNum);
				HALT (BLERR_CHECKSUM);
				return FALSE;
			}

			// Look for ROMHDR to compute ROM offset.  NOTE: romimage guarantees that the record containing
			// the TOC signature and pointer will always come before the record that contains the ROMHDR contents.
			//
			if (dwRecLen == sizeof(ROMHDR) && (*(LPDWORD) OEMMapMemAddr(dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE))
			{
				DWORD dwTempOffset = (dwRecAddr - *(LPDWORD)OEMMapMemAddr(dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET + sizeof(ULONG)));
				ROMHDR *pROMHdr = (ROMHDR *)lpDest;

				// Check to make sure this record really contains the ROMHDR.
				//
				if ((pROMHdr->physfirst == (dwImageStart - dwTempOffset)) &&
					(pROMHdr->physlast  == (dwImageStart - dwTempOffset + dwImageLength)) &&
					(DWORD)(HIWORD(pROMHdr->dllfirst << 16) <= pROMHdr->dlllast) &&
					(DWORD)(LOWORD(pROMHdr->dllfirst << 16) <= pROMHdr->dlllast))
				{
					g_dwROMOffset = dwTempOffset;
					EdbgOutputDebugString("rom_offset=0x%x.\r\n", g_dwROMOffset);
				}
			}

			// verify partial checksum
			OEMShowProgress (nPkgNum ++);
			if (fIsFlash) {
				OEMContinueEraseFlash ();
			}
		}
	}
	while (--nNumRegions);

	if (fIsFlash) {
		nNumRegions = (BYTE)g_MultiBINInfo.dwNumRegions;
		while (nNumRegions--) {
			if (!OEMWriteFlash (g_MultiBINInfo.Region[nNumRegions].dwRegionStart, g_MultiBINInfo.Region[nNumRegions].dwRegionLength)) {
				HALT (BLERR_FLASH_WRITE);
				return FALSE;
			}
		}
	}

    return TRUE;
}


/*
    @func   BOOLEAN | IsKernelRegion | Determines if the expanded BIN file provided contains the kernel image.
    @rdesc  TRUE if the region contains the kernel image, FALSE if it doesn't.
    @comm   <l Download Image>
    @xref
	@notes  dwCurrentBase is the base address where the BIN records are currently stored (this can be a RAM, a RAM
	        file cache, or flash).  dwImageStoreBase is the images base storage address (this is the base address of potentially
			multiple BIN regions and can be in RAM or flash) and is used to translate addresses to the file cache area.
			dwROMOffset is the difference between the address where the BIN records are stored versus where they're fixed-up
			to run from (for example, an image may be stored in flash, but fixed-up to run in RAM).
*/
static BOOL IsKernelRegion(DWORD dwRegionStart, DWORD dwRegionLength)
{
	DWORD dwCacheAddress = 0;
	ROMHDR *pROMHeader;
	DWORD dwNumModules = 0;
	TOCentry *pTOC;

	if (dwRegionStart == 0 || dwRegionLength == 0)
		return(FALSE);

	if (*(LPDWORD) OEMMapMemAddr (dwRegionStart, dwRegionStart + ROM_SIGNATURE_OFFSET) != ROM_SIGNATURE)
		return FALSE;

	// A pointer to the ROMHDR structure lives just past the ROM_SIGNATURE (which is a longword value).  Note that
	// this pointer is remapped since it might be a flash address (image destined for flash), but is actually cached
	// in RAM.
	//
	dwCacheAddress = *(LPDWORD) OEMMapMemAddr (dwRegionStart, dwRegionStart + ROM_SIGNATURE_OFFSET + sizeof(ULONG));
	pROMHeader     = (ROMHDR *) OEMMapMemAddr (dwRegionStart, dwCacheAddress);

	// Make sure sure are some modules in the table of contents.
	//
	if ((dwNumModules = pROMHeader->nummods) == 0)
		return FALSE;

	// Locate the table of contents and search for the kernel executable and the TOC immediately follows the ROMHDR.
	//
    pTOC = (TOCentry *)(pROMHeader + 1);

	while(dwNumModules--) {
		LPBYTE pFileName = OEMMapMemAddr(dwRegionStart, (DWORD)pTOC->lpszFileName);
		if (!strcmp(pFileName, "nk.exe")) {
			return TRUE;
		}
		++pTOC;
	}
	return FALSE;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费看欧美美女黄的网站| 欧美一区二区三区日韩视频| 国产精品久久久久婷婷| 国产不卡免费视频| 中国av一区二区三区| 成人av资源在线观看| 亚洲色图在线视频| 在线精品亚洲一区二区不卡| 一区二区三区中文在线观看| 91免费小视频| 三级亚洲高清视频| 精品少妇一区二区三区免费观看 | 精品国产91亚洲一区二区三区婷婷 | 国产成人精品亚洲午夜麻豆| 精品乱人伦一区二区三区| 久久99在线观看| 国产精品私房写真福利视频| 91免费观看在线| 轻轻草成人在线| 国产欧美精品在线观看| 色综合一区二区| 奇米精品一区二区三区四区| 26uuu欧美| 日本韩国视频一区二区| 麻豆精品在线播放| 国产精品乱子久久久久| 精品久久久久久久一区二区蜜臀| 国产精品一区一区| 一区二区三区四区中文字幕| 欧美一级午夜免费电影| 国产精品一区一区| 亚洲午夜三级在线| 国产欧美综合在线| 欧美高清一级片在线| 国产不卡视频在线播放| 亚洲成人av电影在线| 中文子幕无线码一区tr| 欧美日韩国产在线观看| 成人精品视频一区二区三区| 亚洲mv在线观看| 国产精品久99| 精品成人在线观看| 91免费视频网址| 国产成人精品一区二区三区四区 | 高清不卡一二三区| 性感美女久久精品| 中文字幕在线观看一区二区| 日韩欧美一区二区在线视频| 94色蜜桃网一区二区三区| 精品无人码麻豆乱码1区2区 | 亚洲资源中文字幕| 国产精品―色哟哟| 精品国偷自产国产一区| 在线不卡中文字幕播放| 91极品视觉盛宴| av一区二区久久| 国产成人综合网站| 狠狠色丁香久久婷婷综合丁香| 亚洲高清视频在线| 亚洲综合激情网| **网站欧美大片在线观看| 久久女同互慰一区二区三区| 欧美男女性生活在线直播观看 | 成人av集中营| 国产精品夜夜爽| 久99久精品视频免费观看| 亚洲va在线va天堂| 亚洲综合色区另类av| 日韩美女精品在线| 国产精品久久久久久久久免费相片| 久久久久99精品国产片| 日韩女优制服丝袜电影| 日韩午夜中文字幕| 日韩免费一区二区| 欧美大片在线观看一区| 日韩免费视频一区二区| 日韩免费观看高清完整版| 久久久久久久电影| 久久奇米777| 国产欧美日韩卡一| 国产精品美女久久久久久| 欧美国产丝袜视频| 国产精品福利一区| 亚洲激情第一区| 亚洲综合激情网| 日本免费在线视频不卡一不卡二| 日韩二区三区四区| 经典三级在线一区| 国产69精品久久久久777| 国产伦精品一区二区三区视频青涩| 蜜臀99久久精品久久久久久软件| 激情五月播播久久久精品| 国产一区二区网址| 99视频一区二区| 欧美日韩免费视频| 欧美日韩另类一区| 国产一区二区三区香蕉 | 亚洲天堂a在线| 精品999在线播放| 韩国一区二区视频| 国产精品一区二区久久精品爱涩 | 亚洲激情综合网| 午夜久久久久久久久| 久久成人免费日本黄色| 激情图片小说一区| av一本久道久久综合久久鬼色| 一本色道亚洲精品aⅴ| 欧美撒尿777hd撒尿| 日韩欧美美女一区二区三区| 国产亚洲女人久久久久毛片| 中文字幕日韩欧美一区二区三区| 亚洲成人av在线电影| 精品系列免费在线观看| 成人激情av网| 欧美电影影音先锋| 久久久久久久久久久久久久久99| 国产精品久久久久久久久果冻传媒 | 国产一区二区日韩精品| 91蜜桃在线观看| 91精品国产一区二区| 中文字幕免费观看一区| 亚洲成人动漫精品| 丁香婷婷深情五月亚洲| 欧美三区在线观看| 久久久久九九视频| 亚洲午夜激情网页| 国产盗摄精品一区二区三区在线| 色香蕉成人二区免费| 精品久久免费看| 亚洲高清不卡在线| 成人一道本在线| 91精品国产综合久久香蕉麻豆 | 久久综合久久99| 午夜精品国产更新| www.亚洲色图| 2022国产精品视频| 亚洲丰满少妇videoshd| 粉嫩在线一区二区三区视频| 欧美日本在线播放| 亚洲天天做日日做天天谢日日欢 | 色综合色狠狠天天综合色| 精品国产一区二区亚洲人成毛片| 综合久久久久久| 国产精品资源在线观看| 欧美一级高清片| 亚洲成人久久影院| 成人a级免费电影| 国产欧美日韩精品a在线观看| 日韩成人伦理电影在线观看| 日本韩国一区二区| 亚洲日本一区二区| av电影在线不卡| 久久精品一区二区三区四区| 老司机免费视频一区二区三区| 欧美中文字幕一二三区视频| 《视频一区视频二区| 国产成人免费视频一区| 日韩精品资源二区在线| 日韩va欧美va亚洲va久久| 欧美日韩一二三区| 亚洲一二三四在线观看| 色综合久久中文字幕综合网| 国产精品欧美极品| 成人午夜激情视频| 中文字幕免费在线观看视频一区| 国产精选一区二区三区| 精品国产青草久久久久福利| 日韩高清电影一区| 欧美一级日韩一级| 美美哒免费高清在线观看视频一区二区 | 欧美自拍丝袜亚洲| 亚洲自拍偷拍九九九| 色婷婷av一区二区三区之一色屋| 中文字幕一区二区三区不卡 | 国产综合色视频| 国产女人aaa级久久久级| 国产suv一区二区三区88区| 中文字幕永久在线不卡| 91玉足脚交白嫩脚丫在线播放| 亚洲色图视频网站| 色婷婷av久久久久久久| 亚洲一区成人在线| 日韩无一区二区| 精品一区二区三区av| 久久久久久99精品| 国产99精品国产| 亚洲日本免费电影| 欧美日韩国产a| 老司机精品视频在线| 久久这里只精品最新地址| 国产成人精品综合在线观看| 亚洲欧美综合色| 欧洲中文字幕精品| 免费观看30秒视频久久| 精品人在线二区三区| jlzzjlzz亚洲日本少妇| 国产精品网站一区| 欧美主播一区二区三区| 久久不见久久见免费视频1| 欧美国产精品一区二区|