📄 getdatas.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 + -