xenoborg/alpha/archive/source/XenoKrnl/Xbe.h
2012-01-05 00:03:04 +00:00

201 lines
5 KiB
C

/*
* Xenoborg - Xbox Emulator
* Copyright (C) 2006-2010 blueshogun96
*
* Name: Xbe.h
* Desc: Xbe loader.
*
* Changelog:
* 10/14/2010 - Initial import from an old build. Fixed it up a bit because
* the old version looks so ugly.
*
* 10/15/2010 - Added support for Sega Chihiro .xbe files. The XOR keys are
* different than normal Xbox xbe files. Chihiro mode will be a
* seperate Xenoborg build though.
*/
#ifndef XBE_H
#define XBE_H
//******************************************
// Important Xbe defines
//******************************************
// Known (or at least used) Xbe flags
#define MountUtilityDrive 0x00000001
#define FormatUtilityDrive 0x00000002
#define Limit64Megabytes 0x00000004
#define DontSetUpHardDisk 0x00000008
#define XOR_ENTRY_DEBUG 0x94859d4b
#define XOR_ENTRY_RETAIL 0xA8FC57AB //0xa8fc57ab
#define XOR_KERNEL_DEBUG 0xefb1f152
#define XOR_KERNEL_RETAIL 0x5b6d40b6
// Sega Chihiro .xbe have a different XOR key.
#define XOR_ENTRY_CHIHIRO 0x40B5C16E
#define XOR_KERNEL_CHIHIRO 0x2290059D
#define XBEIMAGE_MEDIA_TYPE_HARD_DISK 0x00000001
#define XBEIMAGE_MEDIA_TYPE_DVD_X2 0x00000002
#define XBEIMAGE_MEDIA_TYPE_DVD_CD 0x00000004
#define XBEIMAGE_MEDIA_TYPE_CD 0x00000008
#define XBEIMAGE_MEDIA_TYPE_DVD_5_RO 0x00000010
#define XBEIMAGE_MEDIA_TYPE_DVD_9_RO 0x00000020
#define XBEIMAGE_MEDIA_TYPE_DVD_5_RW 0x00000040
#define XBEIMAGE_MEDIA_TYPE_DVD_9_RW 0x00000080
#define XBEIMAGE_MEDIA_TYPE_DONGLE 0x00000100
#define XBEIMAGE_MEDIA_TYPE_MEDIA_BOARD 0x00000200
#define XBEIMAGE_MEDIA_TYPE_NONSECURE_HARD_DISK 0x40000000
#define XBEIMAGE_MEDIA_TYPE_NONSECURE_mode 0x80000000
#define XBEIMAGE_MEDIA_TYPE_MEDIA_MASK 0x00FFFFFF
// Game info
#define XBEIMAGE_GAME_REIGON_NA 0x00000001
#define XBEIMAGE_GAME_REIGON_JAPAN 0x00000002
#define XBEIMAGE_GAME_REIGON_RESTOFWORLD 0x00000004
#define XBEIMAGE_GAME_REIGON_MANUFACTURING 0x80000000
// library defines
#define LIB_QFEVERSION 0x1fff
#define LIB_APPROVED 0x6000
#define LIB_DEBUG_BUILD 0x8000
// section flags
#define SECTION_WRITABLE 0x00000001
#define SECTION_PRELOAD 0x00000002
#define SECTION_EXECUTABLE 0x00000004
#define SECTION_INSERTED_FILE 0x00000008
#define SECTION_HEAD_PAGE_READ_ONLY 0x00000010
#define SECTION_TAIL_PAGE_READ_ONLY 0x00000020
#pragma pack( 1 )
typedef struct _XbeImageHeader
{
char sbSignature[4];
BYTE ubAuthorizationSignature[0x100];
DWORD dwBaseAddr;
DWORD dwSizeHeader;
DWORD dwSizeImage;
DWORD dwSizeImageHeader;
DWORD dwTimeDate;
DWORD dwCertificateAddr;
DWORD dwNumSections;
DWORD dwSectionAddr;
DWORD dwInitFlags;
DWORD dwEntryPoint;
DWORD dwTLSAddr;
DWORD dwPlsStackCommit;
DWORD dwPeHeapReserve;
DWORD dwPeHeapCommit;
DWORD dwPeSizeImage;
DWORD dwPeChecksum;
DWORD dwTimedata;
DWORD dwPathnameAddr;
DWORD dwFilenameAddr;
DWORD dwUnicodeFilenameAddr;
DWORD dwKernelThunkAddr;
DWORD dwNonKernelDirAddr;
DWORD dwNumLibVersions;
DWORD dwLibVersionAddr;
DWORD dwKernelLibVersionAddr;
DWORD dwXapiLibVersionAddr;
DWORD dwLogoBitmapAddr;
DWORD dwLogoBitmapSize;
}
#pragma pack()
XbeImageHeader;
#pragma pack( 1 )
typedef struct _XbeCertificate
{
DWORD dwSize;
DWORD dwTimeDate;
DWORD dwTitleID;
wchar_t wcTitle[0x28];
DWORD dwAlternateTitleIDs[0x16];
DWORD dwMediaFlags;
DWORD dwGameReigon;
DWORD dwGameRatings;
DWORD dwCertificateVersion;
BYTE ubLanKey[0x10];
BYTE ubSignatureKey[0x10];
BYTE ubAltSignatureKey[0x10 * 0x10];
}
#pragma pack()
XbeCertificate;
#pragma pack( 1 )
typedef struct _XbeSectionHeader
{
DWORD dwFlags;
DWORD dwVirtualAddr;
DWORD dwVirtualSize;
DWORD dwRawAddr;
DWORD dwRawSize;
DWORD dwSectionNameAddr;
DWORD dwSectionNameReferenceCount;
DWORD dwHeadSharedPageReferenceCountAddr;
DWORD dwTailSharedPageReferenceCountAddr;
BYTE ubSectionDigest[0x14];
}
#pragma pack()
XbeSectionHeader;
#pragma pack( 1 )
typedef struct _XbeLibrary
{
char sbLibraryName[8];
WORD wMajorVersion;
WORD wMinorVersion;
WORD wBuildVersion;
DWORD dwFlags;
}
#pragma pack()
XbeLibrary;
#pragma pack( 1 )
typedef struct _XbeTLS
{
DWORD dwDataStartAddr;
DWORD dwDataEndAddr;
DWORD dwTlsIndexAddr;
DWORD dwTlsCallbackAddr;
DWORD dwSizeZeroFill;
DWORD dwCharacteristics;
}
#pragma pack()
XbeTLS;
//***********************************************
// Xbe struct
//***********************************************
struct Xbe_t
{
BYTE* m_pXbeData;
char* m_szXbeFileName;
BOOL m_bXbeHasBeenOpened;
long m_lXbeFileSize;
DWORD m_dwActualEntryPoint;
BOOL m_bIsChihiro;
XbeImageHeader m_XbeHeader;
XbeCertificate m_XbeCertificate;
XbeSectionHeader* m_XbeSectionHeader;
XbeLibrary* m_XbeStandardLibrary, m_XbeKernelLibrary, m_XbeXapiLibrary;
XbeTLS m_XbeTLS;
};
BOOL XBELoad( char* szXbeFileName );
void XBEUnload();
BOOL XBEProcessData();
BOOL XBEWriteToMemory();
extern Xbe_t Xbe;
#endif // Xbe_h