⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getdatas.cpp

📁 1,wince下做的导入注册表的程序.
💻 CPP
字号:
/*************************************************
	Copyright (C), 2002-2005, Embedded-Tech. Co., Ltd.
	File name:		GetDatas.c
	Author:			Peica Chen
	Version:  		5.0
	Date: 			2005-09-19
	Description:	实现了从研博保留地址中取得Loadcepc保存的数据
	Others:
	History:
*************************************************/
#include "stdafx.h"
#include <pkfuncs.h>
#include <ceddk.h>

#include "GetDatas.h"
/*************************************************
Function:			GetBootArg
Description:		取得研博保留的BOOT_ARGS结构
Calls:			
Called By:	
Table Accessed:
Table Updated:
Input:				已分配空间的BOOT_ARGS指针
Output:				返回从内存中读取的BOOT_ARGS值
Return:				TRUE为读成功,FALSE为读错误
Others:
*************************************************/
BOOL GetBootArg(PBOOT_ARGS pBootArg)
{  
	LPVOID lpv=0;	
	
	/* 申请缓存 */
	lpv = VirtualAlloc(0, 0x10000, MEM_RESERVE, PAGE_NOACCESS);

	if (!VirtualCopy (lpv,(PVOID)(0x801f0000 ),0x10000, PAGE_READWRITE | PAGE_NOCACHE))
	{
//		MessageBox(NULL,L"VirtualCopy function Failed!",L"Error",MB_ICONERROR|MB_OK);		
		return FALSE;
	}
	
	char *Temp = (char*)lpv + 0xfffc;
	/* 计算出BootArgs的存储地址 */
	DWORD dwBootArgAddress = *(DWORD*)(Temp);

	/* 释放缓存 */
	VirtualFree(lpv, 0, MEM_RELEASE);
	
	PHYSICAL_ADDRESS sBusAddress;          
	sBusAddress.HighPart = 0;
	sBusAddress.LowPart = dwBootArgAddress;

	memset(pBootArg,0,sizeof(BOOT_ARGS));	
	if(sBusAddress.LowPart == 0 && sBusAddress.HighPart==0)
	{
		return false;
	}

	/* 映射BootArgs */
	if(!(lpv=MmMapIoSpace(sBusAddress,0x10000,FALSE)))
	{
		return false;
	}

	/* 保存BootArgs */
	memcpy(pBootArg,lpv,sizeof(BOOT_ARGS));
	MmUnmapIoSpace (lpv,0x10000);
	return true;
}

/*************************************************
Function:			GetBaseInfo
Description:		取得研博保留的EmboBaseInfo结构
Calls:				
Called By:		
Table Accessed: 
Table Updated:  
Input:				已分配空间的EmboBaseInfo指针,和BootArg指针
Output:				返回从内存中读取的EmboBaseInfo值
Return:				TRUE为读成功,FALSE为读错误
Others:				
*************************************************/
BOOL GetBaseInfo(PEmboBaseInfo pBase,PBOOT_ARGS pBootarg)
{
	PHYSICAL_ADDRESS sBusAddress;
	LPVOID lpv = NULL;
	
	sBusAddress.HighPart = 0x0;
	/*从BootArg中取得EmboBaseInfo的保存地址*/
	sBusAddress.LowPart = pBootarg->dwReadMemStartAddr
		+
		pBootarg->dwEmboInfOffset;
	
	memset(pBase,0,sizeof(EmboBaseInfo));
	
	if(sBusAddress.LowPart == 0 && sBusAddress.HighPart==0)
	{
		return FALSE;
	}
	
	/* 映射EmboBaseInfo */
	if(!(lpv= MmMapIoSpace(sBusAddress, 0x10000, FALSE)))
	{
		return FALSE;
	}
	
	/* 保存EmboBaseInfo */
	memcpy(pBase,lpv,sizeof(EmboBaseInfo));
	MmUnmapIoSpace (lpv,0x10000);
	
	/* 判断pBase的值是否有效 */
	if (strncmp((char*)&pBase->szEmboID,EMBO_SIG,MAX_LEN_64))
	{
		/* 否则清零 */
		memset(pBase,0,sizeof(EmboBaseInfo));
		return FALSE;
	}

	return TRUE;  
}

/*************************************************
Function:			GetUserInfo
Description:		取得研博保留的EmboUserInfo结构
Calls:				
Called By:		
Table Accessed: 
Table Updated:  
Input:				已分配空间的EmboUserInfo指针和BootArg指针
Output:				返回从内存中读取的EmboUserInfo值
Return:				TRUE为读成功,FALSE为读错误
Others:				
*************************************************/
BOOL GetUserInfo(PEmboUserInfo pUsers,PEmboBaseInfo pBase)
{
	PHYSICAL_ADDRESS sBusAddress;
	LPVOID lpv = NULL;
	
	sBusAddress.HighPart = 0x0;
	
	/* 从EmboBaseInfo中取得EmboUserInfo的起始地址 */
	sBusAddress.LowPart = pBase->dwReservedStartAddr
		+
		pBase->dwUserInfoOffset;
	
	memset(pUsers,0,sizeof(EmboUserInfo)*pBase->dwCurUserInfoNum);
	if(sBusAddress.LowPart == 0 && sBusAddress.HighPart==0)
	{
		return FALSE;
	}
	
	/* 映射EmboUserInfo */
	if(!(lpv = MmMapIoSpace(sBusAddress, 0x10000, FALSE)))
	{
		return FALSE;
	}
	
	/* 保存EmboUserInfo */
	memcpy(pUsers,lpv,sizeof(EmboUserInfo)*pBase->dwCurUserInfoNum);
	MmUnmapIoSpace (lpv,0x10000);
	
	/* 判断pBase的值是否有效 */
	if (strncmp((char*)&pBase->szEmboID,EMBO_SIG,MAX_LEN_64))
	{
		/* 否则清零 */
		memset(pUsers,0,sizeof(EmboUserInfo)*pBase->dwCurUserInfoNum);
		return FALSE;
	}
	
	return TRUE;
}

/*************************************************
Function:			GetImageInfo
Description:		取得研博保留的EmboImageInfo结构
Calls:				
Called By:		
Table Accessed: 
Table Updated:  
Input:				已分配空间的EmboImageInfo指针和EmboBaseInfo指针
Output:				返回从内存中读取的EmboImageInfo值
Return:				TRUE为读成功,FALSE为读错误
Others:				
*************************************************/
BOOL GetImageInfo(PEmboImageInfo pImages,PEmboBaseInfo pBase)
{
	PHYSICAL_ADDRESS sBusAddress;
	LPVOID lpv = NULL;
	
	sBusAddress.HighPart = 0x0;

	/* 从EmboBaseInfo中取得EmboImageInfo的起始地址 */
	sBusAddress.LowPart = pBase->dwReservedStartAddr
		+
		pBase->dwImageInfoOffset;
	
	memset(pImages,0,sizeof(EmboImageInfo)*pBase->dwCurImageInfoNum);
	if(sBusAddress.LowPart == 0 && sBusAddress.HighPart==0)
	{
		return FALSE;
	}
	
	/* 映射EmboImageInfo */
	if(!(lpv= MmMapIoSpace(sBusAddress, 0x10000, FALSE)))
	{
		return FALSE;
	}
	
	/* 保存EmboImageInfo */
	memcpy(pImages,lpv,sizeof(EmboImageInfo)*pBase->dwCurImageInfoNum);
	MmUnmapIoSpace (lpv,0x10000);
	
	/* 判断pBase的值是否有效 */
	if (strncmp((char*)&pBase->szEmboID,EMBO_SIG,MAX_LEN_64))
	{
		/* 否则清零 */
		memset(pImages,0,sizeof(pImages)*pBase->dwCurImageInfoNum);
		return FALSE;
	}
	return TRUE;
}

/*************************************************
Function:			GetHWInfo
Description:		取得研博保留的EmboHardwareInfo结构
Calls:				
Called By:		
Table Accessed: 
Table Updated:  
Input:				已分配空间的EmboHardwareInfo指针,和EmboBaseInfo指针
Output:				返回从内存中读取的EmboHardwareInfo值
Return:				TRUE为读成功,FALSE为读错误
Others:				
*************************************************/
BOOL GetHWInfo(PEmboHardwareInfo pHWs,PEmboBaseInfo pBase)
{
	PHYSICAL_ADDRESS sBusAddress;
	LPVOID lpv = NULL;
	
	sBusAddress.HighPart = 0x0;
	/* 从EmboBaseInfo中取得EmboHardwareInfo的起始地址 */
	sBusAddress.LowPart = pBase->dwReservedStartAddr
		+
		pBase->dwHardwareInfoOffset;
	
	memset(pHWs,0,sizeof(EmboHardwareInfo)*pBase->dwCurHardwareInfoNum);
	if(sBusAddress.LowPart == 0 && sBusAddress.HighPart==0)
	{
		return FALSE;
	}
	
	/* 映射EmboHardwareInfo */
	if(!(lpv= MmMapIoSpace(sBusAddress, 0x10000, FALSE)))
	{
		return FALSE;
	}
	
	/* 保存EmboHardwareInfo */
	memcpy(pHWs,lpv,sizeof(EmboHardwareInfo)*pBase->dwCurHardwareInfoNum);
	MmUnmapIoSpace (lpv,0x10000);
	
	/* 判断pBase的值是否有效 */
	if (strncmp((char*)&pBase->szEmboID,EMBO_SIG,MAX_LEN_64))
	{
		/* 否则清零 */
		memset(pHWs,0,sizeof(EmboHardwareInfo)*pBase->dwCurHardwareInfoNum);		
		return FALSE;
	}
	return TRUE;
}

/*************************************************
Function:			GetEncryptInfo
Description:		取得研博保留的EmboEncryptInfo结构
Calls:				
Called By:		
Table Accessed: 
Table Updated:  
Input:				已分配空间的EmboEncryptInfo指针,和EmboBaseInfo指针
Output:				返回从内存中读取的EmboEncryptInfo值
Return:				TRUE为读成功,FALSE为读错误
Others:				
*************************************************/
BOOL GetEncryptInfo(PEmboEncryptInfo pEncrypts,PEmboBaseInfo pBase)
{
	PHYSICAL_ADDRESS sBusAddress;
	LPVOID lpv = NULL;
	
	sBusAddress.HighPart = 0x0;
	/* 从EmboBaseInfo中取得EmboEncryptInfo的起始地址 */
	sBusAddress.LowPart = pBase->dwReservedStartAddr
		+
		pBase->dwEncryptInfoOffset;
	
	memset(pEncrypts,0,sizeof(EmboEncryptInfo)*pBase->dwCurEncryptInfoNum);
	if(sBusAddress.LowPart == 0 && sBusAddress.HighPart==0)
	{
		return FALSE;
	}
	
	/* 映射EmboEncryptInfo */
	if(!(lpv= MmMapIoSpace(sBusAddress, 0x10000, FALSE)))
	{
		return FALSE;
	}
	
	/* 保存EmboEncryptInfo */
	memcpy(pEncrypts,lpv,sizeof(EmboEncryptInfo)*pBase->dwCurEncryptInfoNum);
	MmUnmapIoSpace (lpv,0x10000);

	/* 判断pBase的值是否有效 */
	if (strncmp((char*)&pBase->szEmboID,EMBO_SIG,48))
	{
		/* 否则清零 */
		memset(pEncrypts,0,sizeof(EmboEncryptInfo)*pBase->dwEncryptInfoOffset);		
		return FALSE;
	}

	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -