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

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

?? blcommon.c

?? windows ce 50 drive program
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
PARTICULAR PURPOSE.

Module Name:
    blcommon.c

Abstract:
    Bootloader common main module. This file contains the C BootloaderMain
    function for the boot loader.    NOTE: The firmware "entry" point (the real
    entry point is _EntryPoint in init assembler file.

    The Windows CE boot loader is the code that is executed on a Windows CE
    development system at power-on reset and loads the Windows CE
    operating system. The boot loader also provides code that monitors
    the behavior of a Windows CE platform between the time the boot loader
    starts running and the time the full operating system debugger is
    available. Windows CE OEMs are supplied with sample boot loader code
    that runs on a particular development platform and CPU.

Functions:


Notes:

--*/
#include <windows.h>
#include <halether.h>
#include <blcommon.h>

#ifdef SIMULATOR
extern void CleanExit(DWORD dwExitCode);
#define SPIN_FOREVER        CleanExit(42)
#else
#define SPIN_FOREVER        while (1)
#endif

ROMHDR * volatile const pTOC = (ROMHDR *)-1;     // Gets replaced by RomLoader with real address
static ROMHDR romhdr;
static MultiBINInfo g_MultiBINInfo;

static BOOL KernelRelocate (ROMHDR *const pTOC);
static BOOL DownloadImage (LPDWORD pdwImageStart, LPDWORD pdwImageLength, LPDWORD pdwLaunchAddr);
static BOOL IsKernelRegion(DWORD dwRegionStart, DWORD dwRegionLength);

#define CURRENT_VERSION_MAJOR       1
#define CURRENT_VERSION_MINOR       0

const unsigned char NKSignon[] = {
    "\nMicrosoft Windows CE Ethernet Bootloader Common Library Version %d.%d Built "
        __DATE__ " " __TIME__ "\r\n"
    "Copyright (c) 2000-2001  Microsoft Corporation\r\n"
};

DWORD g_dwROMOffset;

PFN_OEMVERIFYMEMORY    g_pOEMVerifyMemory;
PFN_OEMREPORTERROR     g_pOEMReportError;
PFN_OEMCHECKSIGNATURE  g_pOEMCheckSignature;
PFN_OEMMULTIBINNOTIFY    g_pOEMMultiBINNotify;


static void HALT (DWORD dwReason)
{
    if (g_pOEMReportError) {
        g_pOEMReportError (dwReason, 0);
    }
    SPIN_FOREVER;
}


void BootloaderMain (void)
{
    ROMHDR *pRomHdr = NULL;  // pTOC for NK image. MUST COPY IT OR CLEANBOOT may erase it
    DWORD dwAction, dwpToc;
    DWORD dwImageStart = 0, dwImageLength = 0, dwLaunchAddr = 0;
    BOOL bDownloaded = FALSE;
#ifndef SIMULATOR
    // relocate globals to RAM
    if (!KernelRelocate (pTOC)) {
        // spin forever
        HALT (BLERR_KERNELRELOCATE);
    }
#endif
    // (1) Init debug support. We can use OEMWriteDebugString afterward.
    if (!OEMDebugInit ()) {
        // spin forever
        HALT (BLERR_DBGINIT);
    }

    // output banner
    EdbgOutputDebugString (NKSignon, CURRENT_VERSION_MAJOR, CURRENT_VERSION_MINOR);

    // (3) initialize platform (clock, drivers, transports, etc)
    if (!OEMPlatformInit ()) {
        // spin forever
        HALT (BLERR_PLATINIT);
    }

    // system ready, preparing for download
    EdbgOutputDebugString ("System ready!\r\nPreparing for download...\r\n");

    // (4) call OEM specific pre-download function
    switch (dwAction = OEMPreDownload ()) {
    case BL_DOWNLOAD:
        // (5) download image
        if (!DownloadImage (&dwImageStart, &dwImageLength, &dwLaunchAddr)) {
            // error already reported in DownloadImage
            SPIN_FOREVER;
        }
        bDownloaded = TRUE;

		if (dwImageStart) {
			// Check for pTOC signature ("CECE") here, after image in place
			if (*(LPDWORD) OEMMapMemAddr (dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE) {
				EdbgOutputDebugString("Found pTOC signature.\n");
			} else {
				EdbgOutputDebugString ("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n");
				EdbgOutputDebugString ("! ERROR: Did not find pTOC signature.  ABORTING. !\r\n");
				EdbgOutputDebugString ("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n");

				// If no signature, we're going to fail anyway, so loop forever
				HALT (BLERR_SIGNATURE);
			}

			dwpToc = *(LPDWORD) OEMMapMemAddr (dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET + sizeof(ULONG));
			// need to map the content again since the pointer is going to be in a fixup address
			dwpToc = (DWORD) OEMMapMemAddr (dwImageStart, dwpToc);
			// NOTE: MUST COPY or a CLEAN_BOOT flag will erase it
			memcpy (pRomHdr = &romhdr, (LPVOID) dwpToc, sizeof(ROMHDR));

			EdbgOutputDebugString ("ROMHDR at Address %Xh\r\n", dwImageStart + ROM_SIGNATURE_OFFSET + sizeof (DWORD)); // right after signature
			EdbgOutputDebugString ("RomHdr.ulRAMStart=%Xh RomHdr.physfirst=%Xh.\r\n", romhdr.ulRAMStart, romhdr.physfirst);
		}

        // fall through
    case BL_JUMP:
        // Before jumping to the image, optionally check the image signature.
        if (g_pOEMCheckSignature && dwImageStart)
        {
            if (!g_pOEMCheckSignature(dwImageStart, g_dwROMOffset, dwLaunchAddr, bDownloaded))
                HALT(BLERR_WHQL_SIGNATURE);
        }
        // (5) final call to launch the image. never returned
        OEMLaunch (dwImageStart, dwImageLength, dwLaunchAddr, pRomHdr);
        // should never return
        // fall through
    default:
        // ERROR! spin forever
        HALT (BLERR_INVALIDCMD);
    }
}


//
// KernelRelocate: move global variables to RAM
//
static BOOL KernelRelocate (ROMHDR *const pTOC)
{
    ULONG loop;
    COPYentry *cptr;
    if (pTOC == (ROMHDR *const) -1) {
        return FALSE; // spin forever!
    }
    // This is where the data sections become valid... don't read globals until after this
    for (loop = 0; loop < pTOC->ulCopyEntries; loop++) {
        cptr = (COPYentry *)(pTOC->ulCopyOffset + loop*sizeof(COPYentry));
        if (cptr->ulCopyLen)
            memcpy((LPVOID)cptr->ulDest,(LPVOID)cptr->ulSource,cptr->ulCopyLen);
        if (cptr->ulCopyLen != cptr->ulDestLen)
            memset((LPVOID)(cptr->ulDest+cptr->ulCopyLen),0,cptr->ulDestLen-cptr->ulCopyLen);
    }
    return TRUE;
}

static BOOL VerifyChecksum (DWORD cbRecord, LPBYTE pbRecord, DWORD dwChksum)
{
    // Check the CRC
    DWORD dwCRC = 0;
    DWORD i;
    for (i = 0; i < cbRecord; i++)
        dwCRC += *pbRecord ++;

    if (dwCRC != dwChksum)
        EdbgOutputDebugString ("ERROR: Checksum failure (expected=0x%x  computed=0x%x)\r\n", dwChksum, dwCRC);

    return dwCRC == dwChksum;
}

#define BL_HDRSIG_SIZE		7
static BOOL DownloadImage (LPDWORD pdwImageStart, LPDWORD pdwImageLength, LPDWORD pdwLaunchAddr)
{
    BYTE hdr[BL_HDRSIG_SIZE];
    DWORD dwRecLen, dwRecChk, dwRecAddr;
    BOOL fIsFlash;
    LPBYTE lpDest;
    int nPkgNum = 0;
	BYTE nNumRegions = 1;
	DWORD dwImageStart, dwImageLength;

	*pdwImageStart = *pdwImageLength = *pdwLaunchAddr = 0;

	do
	{
		// read the 7 byte "magic number"
		if (!OEMReadData (BL_HDRSIG_SIZE, hdr)) {
			EdbgOutputDebugString ("\r\nUnable to read image signature.\r\n");
			HALT (BLERR_MAGIC);
			return FALSE;
		}

		// check for multi-bin information packet.
		if (!memcmp (hdr, "X000FF\x0A", BL_HDRSIG_SIZE)) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
洋洋av久久久久久久一区| 欧美一级精品在线| 国产精品国产精品国产专区不蜜 | 麻豆极品一区二区三区| 日韩欧美中文字幕一区| 另类小说视频一区二区| 精品国产髙清在线看国产毛片| 美女爽到高潮91| 久久久久久久综合日本| 91在线一区二区三区| 亚洲区小说区图片区qvod| 欧美日韩亚洲综合在线| 麻豆国产精品官网| 中文字幕巨乱亚洲| 日本高清无吗v一区| 亚洲v中文字幕| 亚洲精品一区二区三区福利 | 在线观看亚洲专区| 日本va欧美va欧美va精品| 国产视频一区二区在线观看| av爱爱亚洲一区| 五月综合激情网| 久久久亚洲精品石原莉奈 | 91国产免费看| 久久国产成人午夜av影院| 中文在线一区二区| 精品视频123区在线观看| 韩国av一区二区三区| 亚洲欧美另类久久久精品2019| 91超碰这里只有精品国产| 国产suv精品一区二区883| 亚洲一区视频在线观看视频| 欧美tk—视频vk| 一本色道**综合亚洲精品蜜桃冫| 蜜桃视频一区二区| 一区二区三区中文字幕| 久久久久久久久久久久久夜| 91久久精品一区二区三区| 经典一区二区三区| 亚洲一区二区三区激情| 久久久激情视频| 这里只有精品电影| 99久久免费国产| 国产麻豆欧美日韩一区| 艳妇臀荡乳欲伦亚洲一区| 国产精品网友自拍| 欧美一级二级三级蜜桃| 色八戒一区二区三区| 国产成人综合精品三级| 喷水一区二区三区| 亚洲一区二区三区四区在线免费观看| 久久久久国产精品厨房| 日韩欧美中文一区二区| 欧美亚洲图片小说| 99re亚洲国产精品| 岛国av在线一区| 国内一区二区在线| 久久不见久久见免费视频7| 亚洲成人精品一区| 亚洲精品成人在线| 国产精品沙发午睡系列990531| 精品久久久久香蕉网| 国产麻豆精品95视频| 五月婷婷激情综合| 亚洲一区二区在线免费观看视频| 欧美国产禁国产网站cc| 中文字幕精品三区| 国产亚洲一区二区三区在线观看| 日韩精品一区二区三区在线观看| 欧美日韩一区成人| 色诱亚洲精品久久久久久| 99re这里都是精品| 99国产欧美久久久精品| 国产精品一区专区| 国产精品午夜在线观看| 亚洲国产激情av| 久久精品无码一区二区三区| 久久女同精品一区二区| 久久久久国产免费免费| 国产午夜精品久久久久久免费视 | 一本大道久久a久久综合| 成人a免费在线看| 国v精品久久久网| 国产91精品一区二区麻豆亚洲| 九色|91porny| 狠狠色丁香久久婷婷综合_中| 韩国av一区二区三区在线观看| 韩国一区二区视频| 国产a级毛片一区| 国v精品久久久网| 99视频在线观看一区三区| 在线亚洲人成电影网站色www| 91福利在线免费观看| 欧美精品久久久久久久多人混战| 欧美精品tushy高清| 精品国内二区三区| 国产片一区二区| 国产精品对白交换视频| 亚洲午夜免费福利视频| 久久精品国产色蜜蜜麻豆| 国产精品一区二区无线| 99精品欧美一区二区三区综合在线| 在线观看日韩国产| 欧美不卡一区二区三区| 国产精品你懂的在线欣赏| 亚洲影院免费观看| 国产在线精品一区二区不卡了| av一区二区不卡| 91精品国产91久久久久久一区二区 | 国产电影精品久久禁18| 色欧美日韩亚洲| 日韩一级成人av| 国产视频一区二区在线| 国产精品久久久久久久午夜片| 亚洲小说春色综合另类电影| 精品一区二区三区免费观看| 色综合色综合色综合| 精品国产三级a在线观看| 亚洲视频一区二区在线观看| 秋霞电影一区二区| 色诱亚洲精品久久久久久| 日韩精品一区二区在线| 亚洲欧洲综合另类| 国产在线精品一区二区不卡了| 在线观看免费成人| 国产亚洲欧美中文| 青青草国产成人av片免费| 一本色道久久综合狠狠躁的推荐| 日韩午夜精品视频| 一区二区三区免费在线观看| 国产一区二区三区四区五区美女 | 国产网红主播福利一区二区| 亚洲视频资源在线| 亚洲黄色性网站| 久草在线在线精品观看| 91在线视频官网| 欧美一区二区三区婷婷月色| 欧美高清在线一区二区| 亚洲成a人v欧美综合天堂| 国产精品一线二线三线精华| 欧洲一区二区av| 国产日韩欧美麻豆| 亚洲成年人网站在线观看| 国产精品一二三区在线| 欧美亚洲国产bt| 国产欧美一区二区三区在线看蜜臀| 亚洲永久免费av| 国产精品一级黄| 欧美卡1卡2卡| 中文字幕在线观看不卡| 日本一不卡视频| 色哟哟一区二区在线观看| 久久综合九色综合久久久精品综合 | 亚洲成人三级小说| 欧美在线999| 亚洲欧美一区二区三区久本道91| 高清成人在线观看| 国产午夜精品一区二区| 国产一区二区三区免费在线观看| 日韩欧美高清在线| 日韩精品久久理论片| 欧美肥妇free| 视频一区二区三区在线| 欧美久久久一区| 天堂久久久久va久久久久| 欧美日韩一区久久| 午夜欧美在线一二页| 欧美日韩一区二区三区免费看| 亚洲一区二区三区爽爽爽爽爽 | 免费精品视频在线| 777久久久精品| 免费观看91视频大全| 日韩视频一区二区三区在线播放| 青青草91视频| 欧美va日韩va| 国产成人自拍高清视频在线免费播放| 国产午夜亚洲精品理论片色戒 | 美女视频黄 久久| 欧美va日韩va| 国v精品久久久网| 亚洲精品videosex极品| 91.com在线观看| 伦理电影国产精品| 久久精品视频一区二区三区| 高清视频一区二区| 亚洲一区二区在线观看视频| 宅男在线国产精品| 国产不卡在线播放| 亚洲精品你懂的| 日韩欧美一区二区在线视频| 国产99久久久久久免费看农村| 国产精品久久久久天堂| 欧美日韩三级一区| 久久99在线观看| 日韩一区中文字幕| 日韩欧美www| 国产一区二区三区综合| 一区二区三区在线视频免费 | 亚洲视频免费观看| 欧美高清视频www夜色资源网|