Files
XBDM/xbdm/imp/xamp.h
2025-11-06 15:36:24 -05:00

3623 lines
120 KiB
C

#ifndef __XAMP_H__
#define __XAMP_H__
typedef ULONG XMSG_HANDLE;
#include <windef.h>
#include <winbase.h>
#include <kernelp.h>
#include <KernelExports.h>
#include "xboxp.h"
#include "xdbg.h"
#include "xamdbg.h"
#include "winsockx.h"
#include "xonlinep.h"
#include "xex.h"
#include "xecrypt.h"
#include "xcabinet.h"
#include "contentpkg.h"
#include "xamcache.h"
//
// Define NTSTATUS if it's not already defined
//
#if !defined(_NTDEF_)
typedef LONG NTSTATUS;
#endif
//
// Force a reference to the kernel build number
//
#pragma comment(linker, "/include:XboxKrnlBuildNumber")
#pragma warning(push)
#pragma warning(disable: 4201) // unnamed struct/union
#ifdef __cplusplus
extern "C" {
#endif
#define APPSZ_TESTXEX ("testxex.xex")
#define APPSZ_CERT ("cert.xex")
#define APPSZ_HUDUI ("hud.xex")
// App IDs
// Apps that load UI resource should have a unique id
// that helps XUI cache resources across dll loads
#define XAM_APP_ID_NONE (~0u)
#define XAM_APP_ID_HUD 0
#define XAM_APP_ID_FRIENDS 1
#define XAM_APP_ID_DEVICESELECTOR 2
#define XAM_APP_ID_SIGNIN 3
#define XAM_APP_ID_TEMPAPP 4
#define XAM_APP_ID_TESTXEX 5
#define XAM_APP_ID_FEEDBACK 6
#define XAM_APP_ID_MARKETPLACE 7
#define XAM_APP_ID_MUSICPLAYER 8
#define XAM_APP_ID_VOICEMAIL 9
#define XAM_APP_ID_QUICKCHAT 10
#define XAM_APP_ID_VK 11
#define XAM_APP_ID_UPDATER 12
#define XAM_APP_ID_GAMEPROFILE 13
#define XAM_APP_ID_CREATEPROFILE 14
#define XAM_APP_ID_MINIMUSICPLAYER 15
#define XAM_APP_ID_CERT 16
#define HXAMAPP_TESTXEX ((HXAMAPP)0x000000F9)
#define HXAMAPP_CERT ((HXAMAPP)0x000000F8)
// Returns true if the xam app's xex image doesn't always have to be
// loaded in the xam.
#define XAMAPP_OPTIONAL(h) ( ((h) == HXAMAPP_TESTXEX) || ((h) == HXAMAPP_CERT) )
#define MSGAREA_TESTXEX (0x0006)
#define XM_SYS_STORAGEDEVICECHANGE MSGID(MSGAREA_SYSTEM, 0x000F)
#define IsLiveBaseCustomProcessingMsg(msg) (MSG_NUMBER(msg) & 0x8000)
//
// NOTE: these are duplicated in \private\inc\xonp.h for codegen
//
#define XM_LIVEBASE_LOGONCONNECT MSGID(MSGAREA_XLIVEBASE, 0x8001)
#define XM_LIVEBASE_LOGONGETSERVICEINFO MSGID(MSGAREA_XLIVEBASE, 0x8007)
#define XM_LIVEBASE_PRESENCEGETSEQNUM MSGID(MSGAREA_XLIVEBASE, 0x8017)
#define XM_LIVEBASE_PRESENCESET MSGID(MSGAREA_XLIVEBASE, 0x8018)
#define XM_LIVEBASE_PRESENCEENUMCREATE MSGID(MSGAREA_XLIVEBASE, 0x8019)
#define XM_LIVEBASE_PRESENCEENUM MSGID(MSGAREA_XLIVEBASE, 0x801A)
#define XM_LIVEBASE_PRESENCEENUMCLOSE MSGID(MSGAREA_XLIVEBASE, 0x801B)
#define XM_LIVEBASE_PRESENCEGETSTATE MSGID(MSGAREA_XLIVEBASE, 0x801C)
#define XM_LIVEBASE_PRESENCESETSTATE MSGID(MSGAREA_XLIVEBASE, 0x801D)
#define XM_LIVEBASE_PRESENCESUBSCRIBE MSGID(MSGAREA_XLIVEBASE, 0x801E)
#define XM_LIVEBASE_PRESENCEUNSUBSCRIBE MSGID(MSGAREA_XLIVEBASE, 0x801F)
#define XM_LIVEBASE_FRIENDSENUMCREATE MSGID(MSGAREA_XLIVEBASE, 0x8020)
#define XM_LIVEBASE_FRIENDSENUM MSGID(MSGAREA_XLIVEBASE, 0x8021)
#define XM_LIVEBASE_FRIENDSENUMCLOSE MSGID(MSGAREA_XLIVEBASE, 0x8022)
#define XM_LIVEBASE_INVITEGETINFO MSGID(MSGAREA_XLIVEBASE, 0x8023)
#define XM_LIVEBASE_MSGENUMERATE MSGID(MSGAREA_XLIVEBASE, 0x8024)
#define XM_LIVEBASE_MSGGETSUMMARY MSGID(MSGAREA_XLIVEBASE, 0x8025)
#define XM_LIVEBASE_MSGCREATE MSGID(MSGAREA_XLIVEBASE, 0x8026)
#define XM_LIVEBASE_MSGDESTROY MSGID(MSGAREA_XLIVEBASE, 0x8027)
#define XM_LIVEBASE_MSGSETPROP MSGID(MSGAREA_XLIVEBASE, 0x8028)
#define XM_LIVEBASE_MSGGETPROP MSGID(MSGAREA_XLIVEBASE, 0x8029)
#define XM_LIVEBASE_MSGGETDETAILS MSGID(MSGAREA_XLIVEBASE, 0x802A)
#define XM_LIVEBASE_MSGGETDETAILSSUMMARY MSGID(MSGAREA_XLIVEBASE, 0x802B)
#define XM_LIVEBASE_MSGGETDETAILSPROPERTY MSGID(MSGAREA_XLIVEBASE, 0x802C)
#define XM_LIVEBASE_MSGSETFLAGS MSGID(MSGAREA_XLIVEBASE, 0x802D)
#define XM_LIVEBASE_MSGDELETE MSGID(MSGAREA_XLIVEBASE, 0x802E)
#define XM_LIVEBASE_MSGINVITESEND MSGID(MSGAREA_XLIVEBASE, 0x802F)
#define XM_LIVEBASE_MSGINVITEANSWER MSGID(MSGAREA_XLIVEBASE, 0x8030)
#define XM_LIVEBASE_MSGINVITEREVOKE MSGID(MSGAREA_XLIVEBASE, 0x8031)
#define XM_LIVEBASE_GETTASKPROGRESS MSGID(MSGAREA_XLIVEBASE, 0x8032)
#define XM_LIVEBASE_GETREQUESTTHROTTLE MSGID(MSGAREA_XLIVEBASE, 0x8033)
#define XM_LIVEBASE_SETREQUESTTHROTTLE MSGID(MSGAREA_XLIVEBASE, 0x8034)
#define XM_LIVEBASE_STORAGEBUILDSERVERPATH MSGID(MSGAREA_XLIVEBASE, 0x8035)
#define XM_LIVEBASE_EXPIREMARKETPLACECOUNTSCACHE MSGID(MSGAREA_XLIVEBASE, 0x8036)
#define XM_LIVEBASE_PRESENCEINITIALIZE MSGID(MSGAREA_XLIVEBASE, 0x8037)
#define XM_LIVEBASE_CONTENTGETINPROGRESSMETADATA MSGID(MSGAREA_XLIVEBASE, 0x8038)
#define XM_BASE_DEVICEFORMAT MSGID(MSGAREA_XBASE, 0x000B)
#define XM_BASE_CONTENTCOPYMOVE MSGID(MSGAREA_XBASE, 0x000C)
#define XM_BASE_DEVICERENAME MSGID(MSGAREA_XBASE, 0x000D)
#define XM_BASE_CONTENTAGGREGATEENUMERATE MSGID(MSGAREA_XBASE, 0x000E)
#define XM_BASE_CONTENAGGREGATETCREATEENUM MSGID(MSGAREA_XBASE, 0x000F)
#define XM_BASE_CONTENTAGGREGATECLOSEENUM MSGID(MSGAREA_XBASE, 0x0010)
#define XM_BASE_CONTENTGETMETADATA MSGID(MSGAREA_XBASE, 0x0011)
#define XM_BASE_CONTENTSETTHUMBNAIL MSGID(MSGAREA_XBASE, 0x0012)
#define XM_BASE_CONTENTGETTHUMBNAIL MSGID(MSGAREA_XBASE, 0x0013)
#define XM_BASE_CONTENTGETCREATOR MSGID(MSGAREA_XBASE, 0x0014)
#define XM_BASE_DEVICEGETSTATE MSGID(MSGAREA_XBASE, 0x0015)
#define XM_BASE_CONTENTRESOLVE MSGID(MSGAREA_XBASE, 0x0016)
#define XM_BASE_CONTENTGETLICENSEMASK MSGID(MSGAREA_XBASE, 0x0017)
#define XM_BASE_CONTENTFLUSH MSGID(MSGAREA_XBASE, 0x0018)
#define XM_BASE_CONTENTINSTALL MSGID(MSGAREA_XBASE, 0x0019)
#define XM_BASE_CONTENTGETATTRIBUTES MSGID(MSGAREA_XBASE, 0x001A)
#define XM_BASE_PROFILEENUMERATE MSGID(MSGAREA_XBASE, 0x3001)
#define XM_BASE_PROFILECREATEENUM MSGID(MSGAREA_XBASE, 0x3002)
#define XM_BASE_PROFILECLOSEENUM MSGID(MSGAREA_XBASE, 0x3003)
#define XM_BASE_PROFILELOAD MSGID(MSGAREA_XBASE, 0x3004)
#define XM_BASE_PROFILESAVE MSGID(MSGAREA_XBASE, 0x3005)
#define XM_BASE_PROFILEDELETE MSGID(MSGAREA_XBASE, 0x3006)
#define XM_BASE_PROFILERENAME MSGID(MSGAREA_XBASE, 0x3007)
//
// TestXEX Messages
//
#define XM_TEST_PRESENDMESSAGE MSGID(MSGAREA_TESTXEX, 0x0001)
#define XM_TEST_POSTSENDMESSAGE MSGID(MSGAREA_TESTXEX, 0x0002)
#define XM_TEST_SENDASYNCMESSAGE MSGID(MSGAREA_TESTXEX, 0x0003)
#define XM_TEST_SENDNOTIFICATION MSGID(MSGAREA_TESTXEX, 0x0004)
#define XM_TEST_ASYNCMESSAGEINUSE MSGID(MSGAREA_TESTXEX, 0x0005)
#define XM_TEST_SETMEDIACODE MSGID(MSGAREA_TESTXEX, 0x0006)
#define XM_TEST_ENABLEUITIMING MSGID(MSGAREA_TESTXEX, 0x0007)
#define XM_TEST_DUMPUITIMING MSGID(MSGAREA_TESTXEX, 0x0008)
#define XM_TEST_UIAPPLOAD MSGID(MSGAREA_TESTXEX, 0x0009)
#define XM_TEST_ENABLEAUTOMATION MSGID(MSGAREA_TESTXEX, 0x0011)
#define XM_TEST_DISABLEAUTOMATION MSGID(MSGAREA_TESTXEX, 0x0012)
#define XM_TEST_STARTSCRIPTENGINE MSGID(MSGAREA_TESTXEX, 0x0013)
#define XM_TEST_STOPSCRIPTENGINE MSGID(MSGAREA_TESTXEX, 0x0014)
#define XM_TEST_RUNSCRIPT MSGID(MSGAREA_TESTXEX, 0x0015)
#define XM_TEST_SETTITLESTARTUPSCRIPT MSGID(MSGAREA_TESTXEX, 0x0016)
#define XM_TEST_SETDLLENGINEPATH MSGID(MSGAREA_TESTXEX, 0x0017)
#define XM_TEST_UPDATETESTCOMMAND MSGID(MSGAREA_TESTXEX, 0x0018)
#define XM_TEST_STARTMESSAGESPOOF MSGID(MSGAREA_TESTXEX, 0x0021)
#define XM_TEST_STOPMESSAGESPOOF MSGID(MSGAREA_TESTXEX, 0x0022)
#define XM_TEST_STARTASYNCMESSAGESPOOF MSGID(MSGAREA_TESTXEX, 0x0023)
#define XM_TEST_STOPASYNCMESSAGESPOOF MSGID(MSGAREA_TESTXEX, 0x0024)
#define XM_TEST_STARTMESSAGETIMER MSGID(MSGAREA_TESTXEX, 0x0031)
#define XM_TEST_STOPMESSAGETIMER MSGID(MSGAREA_TESTXEX, 0x0032)
#define XM_TEST_STARTMESSAGELOG MSGID(MSGAREA_TESTXEX, 0x0033)
#define XM_TEST_STOPMESSAGELOG MSGID(MSGAREA_TESTXEX, 0x0034)
#define XM_TEST_OCCLUSIONQUERYBEGIN MSGID(MSGAREA_TESTXEX, 0x0040)
#define XM_TEST_OCCLUSIONQUERYEND MSGID(MSGAREA_TESTXEX, 0x0041)
#define XM_TEST_OCCLUSIONQUERYGETDATA MSGID(MSGAREA_TESTXEX, 0x0042)
#define XM_TEST_CHANGEXEXINFO MSGID(MSGAREA_TESTXEX, 0x0051)
#define XM_TEST_DELETESPAFILE MSGID(MSGAREA_TESTXEX, 0x0052)
#define XM_TEST_RESETFILECACHE MSGID(MSGAREA_TESTXEX, 0x0053)
#define TEST_SPA_FILENAME_SIZE 64
typedef struct
{
DWORD dwTitleID;
CHAR szSpaFilename[TEST_SPA_FILENAME_SIZE];
} TEST_CHANGEXEXINFO_MSG, *PTEST_CHANGEXEXINFO_MSG;
//
// XGI
//
#define XM_XGI_RECOVERTITLE MSGID(MSGAREA_XGI, 0x0003)
#define XM_XGI_SYNC MSGID(MSGAREA_XGI, 0x0004)
#define XM_XGI_CONTENTOPENED MSGID(MSGAREA_XGI, 0x0005)
#define XM_XGI_USERSETCONTEXT MSGID(MSGAREA_XGI, 0x0006)
#define XM_XGI_USERSETPROPERTY MSGID(MSGAREA_XGI, 0x0007)
#define XM_XGI_WRITEACHIEVEMENT MSGID(MSGAREA_XGI, 0x0008)
#define XM_XGI_CREATEENUM MSGID(MSGAREA_XGI, 0x0009)
#define XM_XGI_ACHIEVEMENTENUMERATE MSGID(MSGAREA_XGI, 0x000A)
#define XM_XGI_CLOSEENUM MSGID(MSGAREA_XGI, 0x000B)
#define XM_XGI_READSETTINGS MSGID(MSGAREA_XGI, 0x000C)
#define XM_XGI_WRITESETTINGS MSGID(MSGAREA_XGI, 0x000D)
#define XM_XGI_SESSIONCREATE MSGID(MSGAREA_XGI, 0x0010)
#define XM_XGI_SESSIONDELETE MSGID(MSGAREA_XGI, 0x0011)
#define XM_XGI_SESSIONJOIN MSGID(MSGAREA_XGI, 0x0012)
#define XM_XGI_SESSIONLEAVE MSGID(MSGAREA_XGI, 0x0013)
#define XM_XGI_SESSIONSTART MSGID(MSGAREA_XGI, 0x0014)
#define XM_XGI_SESSIONEND MSGID(MSGAREA_XGI, 0x0015)
#define XM_XGI_SESSIONSEARCH MSGID(MSGAREA_XGI, 0x0016)
#define XM_XGI_SESSIONCONFIG MSGID(MSGAREA_XGI, 0x0017)
#define XM_XGI_SESSIONMODIFY MSGID(MSGAREA_XGI, 0x0018)
#define XM_XGI_SESSIONINVITE MSGID(MSGAREA_XGI, 0x0019)
#define XM_XGI_SESSIONARBITRATE MSGID(MSGAREA_XGI, 0x001A)
#define XM_XGI_SESSIONSEARCHBYID MSGID(MSGAREA_XGI, 0x001B)
#define XM_XGI_SESSIONSEARCHEX MSGID(MSGAREA_XGI, 0x001C)
#define XM_XGI_VIEWRESET MSGID(MSGAREA_XGI, 0x0020)
#define XM_XGI_STATSREAD MSGID(MSGAREA_XGI, 0x0021)
#define XM_XGI_STATSENUMCREATE MSGID(MSGAREA_XGI, 0x0022)
#define XM_XGI_STATSENUMERATE MSGID(MSGAREA_XGI, 0x0023)
#define XM_XGI_STATSCLOSEENUM MSGID(MSGAREA_XGI, 0x0024)
#define XM_XGI_STATSWRITE MSGID(MSGAREA_XGI, 0x0025)
#define XM_XGI_STATSFLUSH MSGID(MSGAREA_XGI, 0x0026)
#define XM_XGI_READTILE MSGID(MSGAREA_XGI, 0x0030)
#define XM_XGI_WRITETILE MSGID(MSGAREA_XGI, 0x0031)
#define XM_XGI_READTILETOTEXTURE MSGID(MSGAREA_XGI, 0x0032)
#define XM_XGI_WRITEGAMERTILE MSGID(MSGAREA_XGI, 0x0033)
#define XM_XGI_PREPAREGAMERTILES MSGID(MSGAREA_XGI, 0x0034)
#define XM_XGI_INITFLASHTILES MSGID(MSGAREA_XGI, 0x0035)
#define XM_XGI_INVALIDATEGAMERTILECACHE MSGID(MSGAREA_XGI, 0x0036)
#define XM_XGI_READSTRING MSGID(MSGAREA_XGI, 0x0038)
#define XM_XGI_TITLEENUMERATE MSGID(MSGAREA_XGI, 0x0050)
#define XM_XMP_PLAYUSERCONTENT MSGID(MSGAREA_XMP, 0x0001)
#define XM_XMP_PLAYTITLEPLAYLIST MSGID(MSGAREA_XMP, 0x0002)
#define XM_XMP_CONTINUE MSGID(MSGAREA_XMP, 0x0003)
#define XM_XMP_STOP MSGID(MSGAREA_XMP, 0x0004)
#define XM_XMP_PAUSE MSGID(MSGAREA_XMP, 0x0005)
#define XM_XMP_NEXT MSGID(MSGAREA_XMP, 0x0006)
#define XM_XMP_PREVIOUS MSGID(MSGAREA_XMP, 0x0007)
#define XM_XMP_SETPLAYBACKBEHAVIOR MSGID(MSGAREA_XMP, 0x0008)
#define XM_XMP_GETSTATUS MSGID(MSGAREA_XMP, 0x0009)
#define XM_XMP_MOVESONG MSGID(MSGAREA_XMP, 0x000A)
#define XM_XMP_GETVOLUME MSGID(MSGAREA_XMP, 0x000B)
#define XM_XMP_SETVOLUME MSGID(MSGAREA_XMP, 0x000C)
#define XM_XMP_CREATETITLEPLAYLIST MSGID(MSGAREA_XMP, 0x000D)
#define XM_XMP_GETNOWPLAYING MSGID(MSGAREA_XMP, 0x000E)
#define XM_XMP_ADDSONGS MSGID(MSGAREA_XMP, 0x0011)
#define XM_XMP_REMOVESONGS MSGID(MSGAREA_XMP, 0x0012)
#define XM_XMP_DELETETITLEPLAYLIST MSGID(MSGAREA_XMP, 0x0013)
#define XM_XMP_CREATESONGENUMERATOR MSGID(MSGAREA_XMP, 0x0014)
#define XM_XMP_ENUMERATESONG MSGID(MSGAREA_XMP, 0x0015)
#define XM_XMP_CLOSESONGENUMERATOR MSGID(MSGAREA_XMP, 0x0016)
#define XM_XMP_CREATETITLEPLAYLISTENUMERATOR MSGID(MSGAREA_XMP, 0x0017)
#define XM_XMP_ENUMERATETITLEPLAYLIST MSGID(MSGAREA_XMP, 0x0018)
#define XM_XMP_CLOSETITLEPLAYLISTENUMERATOR MSGID(MSGAREA_XMP, 0x0019)
#define XM_XMP_SETPLAYBACKCONTROLLER MSGID(MSGAREA_XMP, 0x001A)
#define XM_XMP_GETPLAYBACKCONTROLLER MSGID(MSGAREA_XMP, 0x001B)
#define XM_XMP_CREATEMEDIACONTAINERENUMERATOR MSGID(MSGAREA_XMP, 0x001C)
#define XM_XMP_ENUMERATEMEDIACONTAINER MSGID(MSGAREA_XMP, 0x001D)
#define XM_XMP_CLOSEMEDIACONTAINERENUMERATOR MSGID(MSGAREA_XMP, 0x001E)
#define XM_XMP_CREATEPHOTOENUMERATOR MSGID(MSGAREA_XMP, 0x001F)
#define XM_XMP_ENUMERATEPHOTO MSGID(MSGAREA_XMP, 0x0020)
#define XM_XMP_CLOSEPHOTOENUMERATOR MSGID(MSGAREA_XMP, 0x0021)
#define XM_XMP_CREATEVIDEOENUMERATOR MSGID(MSGAREA_XMP, 0x0022)
#define XM_XMP_ENUMERATEVIDEO MSGID(MSGAREA_XMP, 0x0023)
#define XM_XMP_CLOSEVIDEOENUMERATOR MSGID(MSGAREA_XMP, 0x0024)
#define XM_XMP_CREATEUSERPLAYLISTENUMERATOR MSGID(MSGAREA_XMP, 0x0025)
#define XM_XMP_ENUMERATEUSERPLAYLIST MSGID(MSGAREA_XMP, 0x0026)
#define XM_XMP_CLOSEUSERPLAYLISTENUMERATOR MSGID(MSGAREA_XMP, 0x0027)
#define XM_XMP_EMPTYPLAYLIST MSGID(MSGAREA_XMP, 0x0028)
#define XM_XMP_GETPLAYBACKBEHAVIOR MSGID(MSGAREA_XMP, 0x0029)
#define XM_XMP_GETTOTALNUMBEROFITEMS MSGID(MSGAREA_XMP, 0x002A)
#define XM_XMP_GETMEDIASOURCES MSGID(MSGAREA_XMP, 0x002B)
#define XM_XMP_GETMEDIASTREAM MSGID(MSGAREA_XMP, 0x002C)
#define XM_XMP_GETPHOTOTHUMBNAILSTREAM MSGID(MSGAREA_XMP, 0x002D)
#define XM_XMP_GETTITLEPLAYLISTBUFFERSIZE MSGID(MSGAREA_XMP, 0x002E)
#define XM_XMP_DASHINIT MSGID(MSGAREA_XMP, 0x002F)
#define XM_XMP_GETTITLEINFO MSGID(MSGAREA_XMP, 0x0030)
#define XM_XMP_GETNUMSONGSINTITLEPLAYLIST MSGID(MSGAREA_XMP, 0x0031)
#define XM_XMP_IMPORTALBUM MSGID(MSGAREA_XMP, 0x0032)
#define XM_XMP_GETBEATEFFECTOUTPUT MSGID(MSGAREA_XMP, 0x0033)
#define XM_XMP_EDITALBUM MSGID(MSGAREA_XMP, 0x0034)
#define XM_XMP_EDITTRACK MSGID(MSGAREA_XMP, 0x0035)
#define XM_XMP_DELETEMEDIA MSGID(MSGAREA_XMP, 0x0036)
#define XM_XMP_DELETECONTAINER MSGID(MSGAREA_XMP, 0x0037)
#define XM_XMP_GETMEDIASOURCEINFO MSGID(MSGAREA_XMP, 0x0038)
#define XM_XMP_COMMITPLAYLIST MSGID(MSGAREA_XMP, 0x0039)
#define XM_XMP_CHANGEWMCSERVER MSGID(MSGAREA_XMP, 0x003A)
#define XM_XMP_PLAYMEDIACONTAINER MSGID(MSGAREA_XMP, 0x003B)
#define XM_XMP_RENAMECONTAINER MSGID(MSGAREA_XMP, 0x003C)
#define XM_XMP_CAPTUREOUTPUT MSGID(MSGAREA_XMP, 0x003D)
#define XM_XMP_CREATEMEDIAOBJECTENUMERATOR MSGID(MSGAREA_XMP, 0x003E)
#define XM_XMP_ENUMERATEMEDIAOBJECT MSGID(MSGAREA_XMP, 0x003F)
#define XM_XMP_CLOSEMEDIAOBJECTENUMERATOR MSGID(MSGAREA_XMP, 0x0040)
#define XM_XMP_CREATETITLEPLAYLISTSONGENUMERATOR MSGID(MSGAREA_XMP, 0x0041)
#define XM_XMP_ENUMERATETITLEPLAYLISTSONG MSGID(MSGAREA_XMP, 0x0042)
#define XM_XMP_CLOSETITLEPLAYLISTSONGENUMERATOR MSGID(MSGAREA_XMP, 0x0043)
#define XM_XMP_SETMEDIASOURCEWORKSPACE MSGID(MSGAREA_XMP, 0x0044)
#define XM_XMP_GETNUMTITLEPLAYLISTS MSGID(MSGAREA_XMP, 0x0045)
#define XM_XMP_GETMEDIASOURCE MSGID(MSGAREA_XMP, 0x0046)
#define XM_XMP_DELETEALLLOCALMUSIC MSGID(MSGAREA_XMP, 0x0047)
#define XM_XMP_REMOVESONGSWITHSOURCE MSGID(MSGAREA_XMP, 0x0048)
#define XM_XMP_RESTARTPLAYBACK MSGID(MSGAREA_XMP, 0x0049)
#define XM_XMP_SETDASHNOWPLAYINGQUEUEMODE MSGID(MSGAREA_XMP, 0x004A)
#define XM_XMP_GETDASHNOWPLAYINGQUEUEMODE MSGID(MSGAREA_XMP, 0x004B)
#define XM_XMP_ENTERCDRIPPINGMODE MSGID(MSGAREA_XMP, 0x004C)
#define XM_XMP_LEAVECDRIPPINGMODE MSGID(MSGAREA_XMP, 0x004D)
//
// UVBase Messages
//
#define XM_UVBASE_REQUESTVOICECHAT MSGID(MSGAREA_UVBASE, 0x0001)
#define XM_UVBASE_QUITVOICECHAT MSGID(MSGAREA_UVBASE, 0x0002)
#define XM_UVBASE_ENUMERATEVOICECHATS MSGID(MSGAREA_UVBASE, 0x0003)
#define XM_UVBASE_SWITCHTOVOICECHAT MSGID(MSGAREA_UVBASE, 0x0004)
#define XM_UVBASE_CONNECTTOVOICECHAT MSGID(MSGAREA_UVBASE, 0x0005)
#define XM_UVBASE_CALLBACKUSERTOVOICECHAT MSGID(MSGAREA_UVBASE, 0x0006)
#define XM_UVBASE_CREATEVOICEMAIL MSGID(MSGAREA_UVBASE, 0x0007)
#define XM_UVBASE_RECORDVOICEMAIL MSGID(MSGAREA_UVBASE, 0x0008)
#define XM_UVBASE_PLAYVOICEMAIL MSGID(MSGAREA_UVBASE, 0x0009)
#define XM_UVBASE_STOPVOICEMAIL MSGID(MSGAREA_UVBASE, 0x000A)
#define XM_UVBASE_CLOSEVOICEMAIL MSGID(MSGAREA_UVBASE, 0x000B)
#define XM_UVBASE_ENUMERATECHANNELS MSGID(MSGAREA_UVBASE, 0x000C)
//
// We reverse the RSHOULDER and LSHOULDER constants to be consistent with old
// Xbox1 input that had the order BLACK then WHITE.
//
#define VK_PAD_XE 0x5808
#define VK_PAD_BINDING 0x5809
//
// Combination codes reserved by XUI input processing.
// Do not define conflicting public values.
//
// #define VK_PAD_A_OR_START 0x5840
// #define VK_PAD_B_OR_BACK 0x5841
// #define VK_NONE 0x5842
// ...
// Reserved through 0x584F
//
//------------------------------------------------------------------------------
// Debug instrumentation
//
XBOXAPI
VOID
WINAPI
XamDbgSetOutputLevel(
IN HXAMAPP hxamapp OPTIONAL,
IN ULONG ulLevel
);
XBOXAPI
VOID
WINAPI
XamDbgSetBreakLevel(
IN HXAMAPP hxamapp OPTIONAL,
IN ULONG ulLevel
);
XBOXAPI
BOOL
WINAPI
XamDbgPrint(
IN ULONG ulLevel,
IN LPCSTR pszFormat,
...
);
typedef struct _TESTXEXMESSAGE
{
HXAMAPP hxamapp;
DWORD dwMessage;
UINT_PTR pParam1;
UINT_PTR pParam2;
HRESULT hr;
} TESTXEXMESSAGE, *PTESTXEXMESSAGE;
typedef struct _TESTXEXXUILOCK
{
BOOL fWait;
DWORD dwTime;
} TESTXEXXUILOCK, *PTESTXEXXUILOCK;
typedef struct _TESTXEXSYSINFO
{
DWORD dwBuildVer;
DWORD dwBuildFlags;
DWORD dwHardwareVer;
} TESTXEXSYSINFO, *PTESTXEXSYSINFO;
BOOL
WINAPI
XamSetAutomation(
IN BOOL fAutomation
);
#ifndef XUIElementPropVal
typedef struct XUIElementPropVal XUIElementPropVal;
#endif
HRESULT
WINAPI
XamApplySkin(
IN DWORD dwUserIndex,
IN LPCSTR pszSkinModule, OPTIONAL
IN CONST XUIElementPropVal* pPropBkgnd OPTIONAL
);
HRESULT
WINAPI
XamGetBkgndDefault(
OUT XUIElementPropVal* pPropBkgnd
);
HRESULT
WINAPI
XamGetDefaultSystemImage(
OUT PBYTE* ppbImage,
OUT PDWORD pcbImage OPTIONAL
);
typedef enum
{
XAM_DEFAULT_IMAGE_SYSTEM = 0,
XAM_DEFAULT_IMAGE_DASHICON = 1,
XAM_DEFAULT_IMAGE_ID_COUNT = 2
} XAM_DEFAULT_IMAGE_ID;
HRESULT
WINAPI
XamGetDefaultImage(
IN XAM_DEFAULT_IMAGE_ID dwImageId,
OUT PBYTE* ppbImage,
OUT PDWORD pcbImage OPTIONAL
);
#ifndef HXUIBRUSH
typedef struct _XUIBRUSH* HXUIBRUSH;
#endif
VOID
XamSendMessageToLoadedApps(
IN DWORD dwMessage,
IN UINT_PTR pParam1,
IN UINT_PTR pParam2
);
DWORD
WINAPI
XamFormatMessage(
OUT LPWSTR pszOut,
IN DWORD cchOut,
IN LPCWSTR pszTemplate,
...
);
typedef enum
{
XAMDATEFORMAT_dMyyyy = 0,
XAMDATEFORMAT_dMMyyyy,
XAMDATEFORMAT_ddMMyyyy,
XAMDATEFORMAT_Mdyyyy,
XAMDATEFORMAT_yyyyMd,
XAMDATEFORMAT_yyyyMMdd,
XAMDATEFORMAT_MMyy,
} XAMDATEFORMAT;
XAMDATEFORMAT XamGetLocaleDateFormat(
IN DWORD dwCountry
);
VOID
WINAPI
XamFormatTimeString(
IN DWORD dwUserIndex,
IN FILETIME ft,
OUT LPWSTR pszBuff,
IN ULONG cchBuff
);
VOID
WINAPI
XamFormatDateString(
IN DWORD dwUserIndex,
IN FILETIME ft,
OUT LPWSTR pszBuff,
IN ULONG cchBuff
);
INT
WINAPI
XamUniSortCmpString(
LPCWSTR pszString1,
LPCWSTR pszString2,
UINT nMaxLen
);
#ifndef HXUIOBJ
typedef struct _XUIOBJ* HXUIOBJ;
#endif
HRESULT
WINAPI
XamGetRootObj(
OUT HXUIOBJ* phRootObj
);
typedef enum
{
XHUDOPENSTATE_NONE = 0,
XHUDOPENSTATE_HALF,
XHUDOPENSTATE_FULL,
XHUDOPENSTATE_ERROR,
//-----------------
XHUDOPENSTATE_COUNT
} XHUDOPENSTATE, *PXHUDOPENSTATE;
typedef VOID (CALLBACK *PFNMSGBOXRETURN)(
IN INT iButtonPressed,
OUT PXHUDOPENSTATE pHudRestoreState
);
HRESULT
WINAPI
XamShowMessageBox(
IN OPTIONAL HXUIOBJ hOwner, // HXUIOBJ to be notified on Completion. (optional)
IN LPCWSTR pszTitle, // Title text.
IN LPCWSTR pszText, // Message text.
IN DWORD cButtons, // Count of buttons in rgButtons.
IN LPCWSTR* rgButtons, // Array of text strings for buttons.
IN DWORD dwFocusButton, // Set focus to a button with this index,
IN OPTIONAL PFNMSGBOXRETURN pfnMsgBoxReturn, // Callback function called on Completion. (optional)
IN DWORD dwFlags // Flags
);
#define MAX_RESOURCE_PATH 128
HRESULT
WINAPI
XamBuildResourceLocator(
IN OPTIONAL HINSTANCE hInstance, // HINSTANCE of the module from which to load resources.
IN LPCWSTR pszContainer, // Resource container name (i.e. section name or package name)
IN OPTIONAL LPCWSTR pszResource, // Resource name
OUT LPWSTR pszResourceLocator, // Sting buffer to recieve the locator string.
IN DWORD cchResourceLocator // Count of characters in pszResourceLocator.
);
HRESULT
WINAPI
XamBuildSharedSystemResourceLocator(
IN LPCWSTR pszResource, // Resource name
OUT LPWSTR pszResourceLocator, // Sting buffer to recieve the locator string.
IN DWORD cchResourceLocator // Count of characters in pszResourceLocator.
);
HRESULT
WINAPI
XamBuildGamercardResourceLocator(
IN LPCWSTR pszResource, // Resource name
OUT LPWSTR pszResourceLocator, // Sting buffer to recieve the locator string.
IN DWORD cchResourceLocator // Count of characters in pszResourceLocator.
);
HRESULT
WINAPI
XamBuildDynamicResourceLocator(
IN DWORD dwAppId, // Unique application id
IN OPTIONAL HINSTANCE hInstance, // HINSTANCE of the module from which to load resources.
IN LPCWSTR pszContainer, // Resource container name (i.e. section name or package name)
IN OPTIONAL LPCWSTR pszResource, // Resource name
OUT LPWSTR pszResourceLocator, // Sting buffer to recieve the locator string.
IN DWORD cchResourceLocator // Count of characters in pszResourceLocator.
);
DWORD
WINAPI
XamCustomSetBannerImage(
IN const VOID * pvTexture,
IN const VOID * pvBits,
IN DWORD dwFlags
);
BOOL
WINAPI
XAutomationpBindController(
IN DWORD dwUserIndex
);
BOOL
WINAPI
XAutomationpUnbindController(
IN DWORD dwUserIndex
);
BOOL
WINAPI
XAutomationpInputXenonButton(
IN DWORD dwUserIndex
);
BOOL
WINAPI
XAutomationpInputSetState(
IN DWORD dwUserIndex,
IN PXINPUT_GAMEPAD pXGamepad
);
BOOL
WINAPI
XAutomationpInputPress(
IN DWORD dwUserIndex,
IN DWORD dwVkey
);
BOOL
WINAPI
XamEnableOverdraw(
IN BOOL fEnable
);
#define XAMINLINE FORCEINLINE
//
// Crt initialization for system apps
//
BOOL WINAPI _CrtInit();
VOID WINAPI _CrtTerm();
BOOL WINAPI _CrtThreadInit();
VOID WINAPI _CrtThreadTerm();
//
// XamApp SPIs
//
DWORD
WINAPI
XamNavigate(
IN DWORD dwUserIndex,
IN LPCSTR pszShortcut,
IN ULONGLONG qwParam1,
IN DWORD dwParam2
);
BOOL
WINAPI
XamAppRequestLoad(
VOID
);
BOOL
WINAPI
XamAppRequestLoadEx(
XHUDOPENSTATE OpenState
);
VOID
WINAPI
XamAppUnrequestLoad(
VOID
);
HRESULT
WINAPI
XamAppUnloadStack(
IN BOOL fWaitForCompletion // specified whether the call should block until the app stack is fully unloaded
);
HRESULT
WINAPI
XamAppLoad(
IN LPCSTR pszSysApp,
IN DWORD dwUserIndex, // user index from which the app will accept input.
IN PVOID pvAppParams OPTIONAL, // params that will be passed to the app as the first param of XM_SET_PARAMS
IN DWORD cbAppParams OPTIONAL, // size of data pointed to by pvAppParams
IN PXOVERLAPPED pxoverlapped OPTIONAL, // xoverlapped struct to signal when the operation is completed
OUT PHXAMAPP phxamapp OPTIONAL
);
void
WINAPI
XamAppUnloadSelf();
#define XSYSLOADINPUT_NONE 0x00000000
#define XSYSLOADINPUT_FIRSTLOAD 0x00000001
#define XSYSLOADINPUT_RELOAD 0x00000002
typedef struct _XSYSLOADINPUT
{
DWORD dwFlags; // See XSYSLOADINPUT_*
PVOID pvParam;
HINSTANCE hInstance;
DWORD dwUserIndex;
} XSYSLOADINPUT, *PXSYSLOADINPUT;
typedef struct _XSYSLOADOUTPUT
{
DWORD cbPersist;
} XSYSLOADOUTPUT;
//
// XM_SYS_STORAGEDEVICECHANGE
//
typedef enum
{
DEVICESTATE_NONE = 0,
DEVICESTATE_ADD,
DEVICESTATE_REMOVE,
DEVICESTATE_IDLE,
DEVICESTATE_UNFORMATTED,
DEVICESTATE_IGNORE,
DEVICESTATE_FORCE_DWORD = 0xFFFFFFFF
} DEVICESTATE;
typedef struct XSTORAGEDEVICECHANGE_PARAMS
{
CHAR szDevicePath[MAX_PATH];
BOOL fRemoved;
DWORD deviceType;
DWORD deviceId;
DEVICESTATE eState;
} XSTORAGEDEVICECHANGE_PARAMS, *PXSTORAGEDEVICECHANGE_PARAMS;
DWORD
WINAPI
XamRegisterSysApp(
IN HINSTANCE hInstance,
IN HXAMAPP hXamApp,
IN PMESSAGEPROC pfnMessageProc,
IN DWORD dwAppId
);
DWORD
WINAPI
XamUnregisterSysApp(
IN HINSTANCE hInstance,
IN HXAMAPP hXamApp,
IN DWORD dwAppId
);
typedef enum
{
XCODEC_TYPE_AAC = 0,
//-----------------
XCODEC_TYPE_COUNT
} XCODEC_TYPE, *PXCODEC_TYPE;
#define XCODEC_TYPE_AAC_TITLE_ID 0xFFFE07DF
#define XCODEC_TYPE_AAC_CONTENTTYPE XCONTENTTYPE_MARKETPLACE
typedef
PVOID
(*PFN_CREATE_CODEC_INSTANCE)();
VOID
WINAPI
XMPRegisterCodec(
IN XCODEC_TYPE xcodectype,
IN PFN_CREATE_CODEC_INSTANCE pfnCreateCodec
);
PFN_CREATE_CODEC_INSTANCE
XMPGetCodecCreationFunction(
IN XCODEC_TYPE xcodectype
);
DECLSPEC_NORETURN
VOID
XamTerminateTitle(
VOID
);
//------------------------------------------------------------------------------
// XAM Scheduler
//------------------------------------------------------------------------------
typedef HRESULT (WINAPI *PXAMTASKPROC)(
IN PVOID pvParam
);
typedef PVOID HXAMTASK, *PHXAMTASK;
typedef PVOID HXAMTASKQUEUE, *PHXAMTASKQUEUE;
typedef PVOID HXAMTASKOBJ, *PHXAMTASKOBJ; // Generic handle, either XAMTASK or XAMTASKQUEUE
// Type of task
#define XAMPROPERTY_TYPE_WAIT 0x00000001 // waits on a kernel handle and calls taskproc when signaled
#define XAMPROPERTY_TYPE_DEDICATED 0x00000002 // dedicated thread, will do work and exit
#define XAMPROPERTY_TYPE_POOLED 0x00000004 // reuse some kind of thread pool
#define XAMPROPERTY_TYPE_PERIODIC 0x00000008 // reuse some kind of thread pool, run at regular intervals
#define XAMPROPERTY_TYPE_UI 0x00000010
#define _XAMPROPERTY_TYPE_MASK_ 0x0000001F
// When this task wakes up and does processing
#define XAMPROPERTY_WAKEUP_IO 0x00000100 // burst of CPU usage but mostly waiting on I/O
#define XAMPROPERTY_WAKEUP_NETWORK 0x00000200 // burst of CPU usage but mostly waiting on N/W
#define XAMPROPERTY_WAKEUP_OFTENWAIT 0x00000400 // calling WaitFor*Object* often
#define _XAMPROPERTY_WAKEUP_MASK_ 0x00000700
// Task CPU usage
#define XAMPROPERTY_CPUUSAGE_LO 0x00001000 // e.g.: waiting and processing notifications
#define XAMPROPERTY_CPUUSAGE_HI 0x00002000 // e.g.: CODEC, encrypting, animations?
#define _XAMPROPERTY_CPUUSAGE_MASK_ 0x00003000
// Duration
#define XAMPROPERTY_DURATION_VERYSHORT 0x00010000
#define XAMPROPERTY_DURATION_SHORT 0x00020000
#define XAMPROPERTY_DURATION_LONG 0x00040000
// 0x00080000 // Taken below
#define _XAMPROPERTY_DURATION_MASK_ 0x00070000
// Priority
#define XAMPROPERTY_PRI_LO 0x00100000
#define XAMPROPERTY_PRI_NORMAL 0x00200000
#define XAMPROPERTY_PRI_HI 0x00400000
#define XAMPROPERTY_PRI_BACKGROUND 0x00800000
#define XAMPROPERTY_PRI_FOREGROUND 0x00080000
#define _XAMPROPERTY_PRI_LOHIMASK_ 0x00700000
#define _XAMPROPERTY_PRI_XGROUNDMASK_ 0x00880000
#define _XAMPROPERTY_PRI_MASK_ 0x00F80000
// Misc
#define XAMPROPERTY_MISC_FIREONCE 0x01000000
#define XAMPROPERTY_MISC_ONTITLEBEHALF 0x02000000
#define XAMPROPERTY_MISC_ONSYSTEMBEHALF 0x04000000
#define XAMPROPERTY_MISC_WAITONHANDLE 0x08000000 // By default, we expect a waitable kernel object (e.g. KEVENT)
#define XAMPROPERTY_MISC_SERIALQUEUE 0x10000000 // hxamtaskqueue needs to be set
#define XAMPROPERTY_MISC_FORCE_GROUND 0x20000000 // forces _XAMPROPERTY_PRI_XGROUNDMASK_ to be followed. Do not use this except in extreme cases!
#define _XAMPROPERTY_MISC_BEHALFMASK_ 0x06000000
#define _XAMPROPERTY_MISC_MASK_ 0x1F000000
typedef struct _XAMTASKATTRIBUTES
{
DWORD dwProperties; // Zero or more XAMPROPERTY_*
union
{
// mandatory for XAMPROPERTY_TYPE_PERIODIC
DWORD dwPeriod; // Period in millisec, only for XAMPROPERTY_TYPE_PERIODIC
// mandatory to have one of these for XAMPROPERTY_TYPE_WAIT
PVOID pvWaitable; // Pointer to waitable kernel object, e.g.: KEVENT
HANDLE hWaitable; // (1) HANDLE to waitable object, requires XAMPROPERTY_MISC_WAITONHANDLE
// (2) Make sure to DuplicateHandle it! CloseHandle will automatically
// get called on it when the task is deleted.
// (3) If using this rather than hWaitable, then the task scheduling can
// fail if the HANDLE is invalid. That would be a caller error.
// (4) The HANDLE needs to be a system process HANDLE.
// optionally for XAMPROPERTY_TYPE_POOLED (which is mutually exclusive with XAMPROPERTY_TYPE_WAIT)
HXAMTASKQUEUE hxamtaskqueue;
};
} XAMTASKATTRIBUTES, *PXAMTASKATTRIBUTES;
HRESULT
XamTaskSchedule(
IN PXAMTASKPROC pxamtaskproc,
IN PVOID pvParam,
IN PXAMTASKATTRIBUTES pxamtaskattribs OPTIONAL, // If NULL, default properties will be used
OUT PHXAMTASK phxamtask
);
// Usage
// Create a task using XamTaskCreate, can fail if out of memory
// Modify it using XamTaskModify, this cannot fail
// Schedule it using XamTaskReschedule, this cannot fail
HRESULT
XamTaskCreate(
OUT PHXAMTASK phxamtask
);
VOID
XamTaskReschedule(
IN HXAMTASK hxamtask
);
HRESULT
XamTaskSchedulerInitialize(
VOID
);
VOID
XamTaskCloseHandle(
IN HXAMTASKOBJ hxamtaskobj
);
VOID
XamTaskCancel(
IN HXAMTASK hxamtask
);
// Wait for task to be "done" or "cancelled"
VOID
XamTaskWaitOnCompletion(
IN HXAMTASK hxamtask
);
// S_OK: completed
// E_PENDING: not completed
HRESULT
XamTaskGetStatus(
IN HXAMTASK hxamtask
);
BOOL
XamTaskShouldExit(
VOID
);
#define XAMTASKMODIFY_NONE 0x00000000
#define XAMTASKMODIFY_TASKPROC 0x00000001
#define XAMTASKMODIFY_PVPARAM 0x00000002
#define XAMTASKMODIFY_ATTRIBUTES 0x00000004
VOID
XamTaskModify(
IN HXAMTASK hxamtask,
IN DWORD dwFlags,
IN PXAMTASKPROC pxamtaskproc,
IN PVOID pvParam,
IN PXAMTASKATTRIBUTES pxamtaskattribs
);
VOID
XamTaskActivateXenonButtonHandler(
IN DWORD dwPortInput
);
HXAMTASK
XamTaskGetCurrentTask(
VOID
);
DWORD
XamTaskQueryProperty(
IN HXAMTASK hxamtask,
IN DWORD dwPropertyMask
);
HRESULT
XamTaskGetAttributes(
IN HXAMTASK hxamtask,
IN OUT PXAMTASKATTRIBUTES pxamtaskattribs
);
HRESULT
XamTaskGetWaitableObject(
IN HXAMTASK hxamtask,
OUT PHANDLE ph
);
HRESULT
XamTaskCreateQueue(
OUT PHXAMTASKQUEUE phxamtaskqueue
);
HRESULT
XamTaskGetCompletionStatus(
IN HXAMTASK hxamtask
);
// Not XamTask function, but close enough
BOOL
XamExecutingOnBehalfOfTitle(
VOID
);
#define XNFLAG_INTERNAL (0x80000000)
#define XNMASK_AREA (0x7e000000)
#define XNMASK_VERSION (0x01FF0000)
#define XNID_INTERNAL(Version, Area, Index)(DWORD)(XNID(Version, Area, Index) | XNFLAG_INTERNAL)
//
// This version number needs to be bumped up each time we add a notification
// after a final release. When a game links to an xdk, this version number
// is linked into the game and only notifications with version less than or
// equal to XNID_CURRENTVERSION will be send to the title. This scheme will
// help keep new notitifications from breaking existing titles.
//
#define XNID_CURRENTVERSION (0)
#define XNOTIFY_FEEDBACK (0x00000010)
#define _XNAREA_FEEDBACK (4)
#define XN_SYS_TITLELOAD XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0001)
#define XN_SYS_TIMEZONE XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0002)
#define XN_SYS_LANGUAGE XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0003)
#define XN_SYS_VIDEOFLAGS XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0004)
#define XN_SYS_AUDIOFLAGS XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0005)
#define XN_SYS_PARENTALCONTROLGAMES XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0006)
#define XN_SYS_PARENTALCONTROLPASSWORD XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0007)
#define XN_SYS_PARENTALCONTROLMOVIES XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0008)
#define XN_SYS_DASHCONTEXTCHANGED XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x000c)
#define XN_SYS_DISCMEDIACHANGED XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x000d)
#define XN_SYS_THEMECHANGED XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x000f)
#define XN_SYS_SYSTEMUPDATECHANGED XNID_INTERNAL(0, _XNAREA_SYSTEM, 0x0010)
#define XN_LIVE_INVITE_RECEIVED XNID_INTERNAL(0, _XNAREA_LIVE, 0x0004)
#define XN_LIVE_INVITE_ANSWER_RECEIVED XNID_INTERNAL(0, _XNAREA_LIVE, 0x0005)
#define XN_LIVE_MESSAGE_LIST_CHANGED XNID_INTERNAL(0, _XNAREA_LIVE, 0x0006)
#define XN_LIVE_POINTS_BALANCE_CHANGED XNID_INTERNAL(0, _XNAREA_LIVE, 0x000B)
#define XN_LIVE_PLAYERSLIST_CHANGED XNID_INTERNAL(0, _XNAREA_LIVE, 0x000C)
#define XN_LIVE_ITEM_PURCHASED XNID_INTERNAL(0, _XNAREA_LIVE, 0x000D)
#define XN_FRIENDS_REQUEST_RECEIVED XNID_INTERNAL(0, _XNAREA_FRIENDS, 0x0004)
#define XN_FRIENDS_ANSWER_RECEIVED XNID_INTERNAL(0, _XNAREA_FRIENDS, 0x0005)
#define XN_FRIENDS_REQUEST_RESULT XNID_INTERNAL(0, _XNAREA_FRIENDS, 0x0006)
//
// Feedback notifications
//
#define XN_FEEDBACK_FIRST XNID(0, _XNAREA_FEEDBACK, 0x0001)
#define XN_FEEDBACK_COMPLAINT_SENT XNID_INTERNAL(0, _XNAREA_FEEDBACK, 0x0001)
#define XN_FEEDBACK_PR_SENT XNID_INTERNAL(0, _XNAREA_FEEDBACK, 0x0002)
#define XN_FEEDBACK_PR_CHANGED XNID_INTERNAL(0, _XNAREA_FEEDBACK, 0x0003)
#define XN_FEEDBACK_LAST XNID(0, _XNAREA_FEEDBACK, 0x0004)
#define XN_XMP_MEDIASOURCECONNECTIONCHANGED XNID_INTERNAL(0, _XNAREA_XMP, 0x0004)
#define XN_XMP_TITLEPLAYLISTCONTENTCHANGED XNID_INTERNAL(0, _XNAREA_XMP, 0x0005)
#define XN_XMP_LOCALMEDIACONTENTCHANGED XNID_INTERNAL(0, _XNAREA_XMP, 0x0006)
#define XN_XMP_DASHNOWPLAYINGQUEUEMODECHANGED XNID_INTERNAL(0, _XNAREA_XMP, 0x0007)
HANDLE
WINAPI
XamNotifyCreateListener(
IN ULONGLONG qwAreas,
IN DWORD dwVersion
);
HANDLE
WINAPI
XamNotifyCreateListenerInternal(
IN ULONGLONG qwAreas,
IN BOOL fReceiveInternalNotifications,
IN DWORD dwVersion
);
#define XNotifyCreateListenerInternal(qwAreas, fReceiveInternalNotifications) \
XamNotifyCreateListenerInternal(qwAreas, fReceiveInternalNotifications, XNID_CURRENTVERSION)
VOID
WINAPI
XNotifyBroadcast(
IN DWORD dwNotificationId,
IN ULONG_PTR param
);
HRESULT
WINAPI
XNotifyRegisterArea(
IN ULONGLONG qwArea,
IN DWORD dwMinGlobalMessage,
IN DWORD dwMaxGlobalMessage
);
VOID
WINAPI
XNotifyResetGlobalListener();
VOID
WINAPI
XNotifyFreeTitleHandles();
VOID
WINAPI
XNotifyFreeUIAppHandles();
VOID
WINAPI
XNotifyTitleStartup();
#define XNOTIFYUI_TYPE_FRIENDONLINE 0
#define XNOTIFYUI_TYPE_GAMEINVITE 1
#define XNOTIFYUI_TYPE_FRIENDREQUEST 2
#define XNOTIFYUI_TYPE_GENERIC 3
#define XNOTIFYUI_TYPE_MULTIPENDING 4
#define XNOTIFYUI_TYPE_PERSONALMESSAGE 5
#define XNOTIFYUI_TYPE_SIGNEDOUT 6
#define XNOTIFYUI_TYPE_SIGNEDIN 7
#define XNOTIFYUI_TYPE_SIGNEDINLIVE 8
#define XNOTIFYUI_TYPE_SIGNEDINNEEDPASS 9
#define XNOTIFYUI_TYPE_CHATREQUEST 10
#define XNOTIFYUI_TYPE_CONNECTIONLOST 11
#define XNOTIFYUI_TYPE_DOWNLOADCOMPLETE 12
#define XNOTIFYUI_TYPE_SONGPLAYING 13
#define XNOTIFYUI_TYPE_PREFERRED_REVIEW 14
#define XNOTIFYUI_TYPE_AVOID_REVIEW 15
#define XNOTIFYUI_TYPE_COMPLAINT 16
#define XNOTIFYUI_TYPE_CHATCALLBACK 17
#define XNOTIFYUI_TYPE_REMOVEDMU 18
#define XNOTIFYUI_TYPE_REMOVEDGAMEPAD 19
#define XNOTIFYUI_TYPE_CHATJOIN 20
#define XNOTIFYUI_TYPE_CHATLEAVE 21
#define XNOTIFYUI_TYPE_GAMEINVITESENT 22
#define XNOTIFYUI_TYPE_CANCELPERSISTENT 23
#define XNOTIFYUI_TYPE_CHATCALLBACKSENT 24
#define XNOTIFYUI_TYPE_MULTIFRIENDONLINE 25
#define XNOTIFYUI_TYPE_ONEFRIENDONLINE 26
#define XNOTIFYUI_TYPE_ACHIEVEMENT 27
#define XNOTIFYUI_TYPE_HYBRIDDISC 28
#define XNOTIFYUI_TYPE_MAX 28
#define XNOTIFYUI_PRIORITY_LOW 0
#define XNOTIFYUI_PRIORITY_DEFAULT 1
#define XNOTIFYUI_PRIORITY_HIGH 2
#define XNOTIFYUI_PRIORITY_PERSISTENT 3
VOID
WINAPI
XNotifyUISetOptions(
BOOL fShow,
BOOL fPlaySound
);
VOID
WINAPI
XNotifyUIGetOptions(
BOOL* pfShow,
BOOL* pfPlaySound
);
DWORD
WINAPI
XamInputGetState(
IN DWORD dwUserIndex,
IN DWORD dwFlags,
OUT PXINPUT_STATE pState
);
DWORD
WINAPI
XamInputGetCapabilities(
IN DWORD dwUserIndex,
IN DWORD dwFlags,
OUT PXINPUT_CAPABILITIES pCapabilities
);
DWORD
WINAPI
XamInputSetState(
IN DWORD dwUserIndex,
IN DWORD dwFlags,
IN PXINPUT_VIBRATION pVibration,
IN BYTE bAmplitude OPTIONAL,
IN BYTE bFrequency OPTIONAL,
IN BYTE bOffset OPTIONAL
);
DWORD
WINAPI
XamInputGetDeviceStats(
IN DWORD dwUserIndex,
OUT PXINPUT_DEVICE_STATS pDeviceStats
);
DWORD
WINAPI
XamInputGetKeystroke(
IN DWORD dwUserIndex,
IN DWORD dwFlags,
OUT PXINPUT_KEYSTROKE pKeystroke
);
DWORD
WINAPI
XamInputGetKeystrokeEx(
IN OUT PDWORD pdwUserIndex,
IN DWORD dwFlags,
OUT PXINPUT_KEYSTROKE pKeystroke
);
DWORD
WINAPI
XamInputGetKeystrokeHud(
IN DWORD dwUserIndex,
OUT PXINPUT_KEYSTROKE pKeystroke
);
DWORD
WINAPI
XamInputSetLayoutKeyboard(
IN DWORD dwUserIndex,
IN DWORD dwLanguage
);
DWORD
WINAPI
XamInputResetLayoutKeyboard(
IN DWORD dwUserIndex
);
WORD
WINAPI
XamInputToggleKeyLocks(
IN DWORD dwUserIndex,
IN WORD wToggleMask
);
VOID
XamInputEnableAutobind(
IN BOOL Enable
);
DWORD
XamEnableSystemAppInput(
IN DWORD dwUserIndex,
IN BOOL Enable
);
#define XDASHCONTEXT_NONE 0
#define XDASHCONTEXT_TROUBLESHOOTER 1
#define XDASHCONTEXT_ACCOUNTRECOVERY 2
#define XDASHCONTEXT_OOBE 3
VOID
XamSetDashContext(
IN DWORD dwDashContext
);
DWORD
XamGetDashContext(
VOID
);
DWORD
XamGetCurrentTitleId(
VOID
);
BOOL
WINAPI
XamIsCurrentTitleDash(
VOID
);
XBOXAPI
ULONG
WINAPI
XamGetSystemVersion(
VOID
);
XBOXAPI
NTSTATUS
WINAPI
XamGetGameRatings(
OUT PUCHAR* ppGameRatings,
OUT PULONG pcGameRatings
);
XBOXAPI
DWORD
WINAPI
XamGetWCNConfigFile(
OUT LPSTR pszFile,
IN DWORD cchFile
);
DECLSPEC_NORETURN
XBOXAPI
VOID
WINAPI
XamLaunchNewImage(
IN LPCSTR pszImagePath,
IN DWORD dwFlags
);
//------------------------------------------------------------------------------
// XVoice APIs
//------------------------------------------------------------------------------
#ifdef __XVOICE_H__
XBOXAPI
HRESULT
WINAPI
XamVoiceCreate(
IN DWORD dwUserIndex,
IN DWORD dwMaxAttachedPackets,
OUT PXVOICE_HANDLE phHandle
);
XBOXAPI
BOOL
WINAPI
XamVoiceHeadsetPresent(
IN XVOICE_HANDLE hObject
);
XBOXAPI
HRESULT
WINAPI
XamVoiceSubmitPacket(
IN XVOICE_HANDLE hObject,
IN BOOL fInput,
IN OUT PXMEDIAPACKET Packet
);
XBOXAPI
BOOL
WINAPI
XamVoiceClose(
IN XVOICE_HANDLE hObject
);
#endif __XVOICE_H__
#define XA_NONE 0x00000000
#define XA_REVIEW 0x00000000 // Tag XamAlloc callswith
// this if you're not sure
// what flags to use
#define XA_DEFAULT 0x00000000
// Type of memory
#define XA_WORKSPACE 0x10000000
#define XA_HEAP 0x20000000
#define XA_PHYSICAL 0x40000000
#define XA_XMP 0x80000000
#define _XA_TYPE_MASK_ 0xF0000000
// Modifiers
#define XA_PERMANENT 0x01000000
#define XA_UIRUNTIME 0x02000000
#define XA_CHARGESYSTEM 0x04000000
#define XA_CHARGETITLE 0x08000000
// By default all allocations thru XamAlloc are zero'ed out, pass this flag in to
// avoid that.
#define XA_NOZEROMEMORY 0x00100000
// Internalto XamAlloc use only, do not use
#define _XA_DEBUGHEAP_ 0x00010000
#define _XA_CHARGE_MASK_ 0x0C000000
#define _XA_LIFETIME_MASK_ 0x03000000
#define _XA_MODIFIER_MASK_ 0x0F100000
// Don't touch the _HXAMAPP_MASK_ values!
//#define XA_DONTTOUCH_ _HXAMAPP_MASK_
HRESULT
WINAPI
XamAlloc(
IN DWORD dwFlags,
IN DWORD cb,
OUT PVOID* ppv
);
// Use only for physical allocs
HRESULT
WINAPI
XamAllocEx(
IN DWORD dwFlagsEx,
IN DWORD dwFlags,
IN DWORD cb,
OUT PVOID* ppv
);
VOID
WINAPI
XamFree(
IN PVOID pv
);
SIZE_T
WINAPI
XamAllocSize(
IN PVOID pv
);
//------------------------------------------------------------------------------
// Session handle helpers
//------------------------------------------------------------------------------
DWORD
WINAPI
XamSessionCreateHandle(HANDLE* ph);
DWORD
WINAPI
XamSessionRefObjByHandle(HANDLE h, void** ppSessionStruct);
//------------------------------------------------------------------------------
DWORD
XamGetOverlappedResult(
IN PXOVERLAPPED lpXOverlapped,
OUT LPDWORD pdwResult,
IN BOOL bWait
);
DWORD
XamGetOverlappedExtendedError(
IN PXOVERLAPPED lpXOverlapped
);
DWORD
XamEnumerate(
IN HANDLE hEnum,
IN DWORD dwFlags,
IN PVOID pvBuffer,
IN DWORD cbBuffer,
OUT PDWORD pcItemsReturned OPTIONAL,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentCreate(
IN DWORD dwUserIndex,
IN LPCSTR pszRootName,
IN CONST XCONTENT_DATA* pcd,
IN DWORD dwContentFlags,
OUT PDWORD pdwDisposition OPTIONAL,
OUT PDWORD pdwLicenseMask OPTIONAL,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentCreateEx(
IN DWORD dwUserIndex,
IN LPCSTR pszRootName,
IN CONST XCONTENT_DATA* pcd,
IN DWORD dwContentFlags,
OUT PDWORD pdwDisposition OPTIONAL,
OUT PDWORD pdwLicenseMask OPTIONAL,
IN DWORD dwFileCacheSize,
IN ULARGE_INTEGER uliContentSize,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentCreateInternal(
IN LPCSTR pszRootName,
IN CONST XCONTENT_DATA_INTERNAL* pcdi,
IN DWORD dwContentFlags,
OUT PDWORD pdwDisposition OPTIONAL,
OUT PDWORD pdwLicenseMask OPTIONAL,
IN DWORD dwFileCacheSize,
IN ULARGE_INTEGER uliContentSize,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentOpenFile(
IN DWORD dwUserIndex,
IN LPCSTR pszRootName,
IN LPCSTR pszFileName,
IN DWORD dwContentFlags,
IN DWORD dwFileCacheSize,
OUT PDWORD pdwLicenseMask OPTIONAL,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentOpenFileInternal(
IN DWORD dwUserIndex,
IN LPCSTR pszRootName,
IN LPCSTR pszFileName,
IN DWORD dwContentFlags,
IN DWORD dwFileCacheSize,
OUT PXCONTENT_DATA_INTERNAL pcdi OPTIONAL,
OUT PDWORD pdwLicenseMask OPTIONAL,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentInstall(
IN DWORD dwUserIndex,
IN XCONTENTDEVICEID DeviceID,
IN LPCSTR pszFileName,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentDelete(
IN DWORD dwUserIndex,
IN CONST XCONTENT_DATA* pcd,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentDeleteInternal(
IN CONST XCONTENT_DATA_INTERNAL* pcdi,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentResolve(
IN DWORD dwUserIndex,
IN CONST XCONTENT_DATA* pcd,
OUT LPSTR pszPath,
IN DWORD cchPath,
IN BOOL fCreateDir,
IN LPCSTR pszRootName, OPTIONAL
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentResolveInternal(
IN CONST XCONTENT_DATA_INTERNAL* pcdi,
OUT LPSTR pszPath,
IN DWORD cchPath,
IN BOOL fCreateDir,
IN LPCSTR pszRootName, OPTIONAL
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentGetAttributes(
IN DWORD dwUserIndex,
IN CONST XCONTENT_DATA* pcd,
OUT LPWIN32_FILE_ATTRIBUTE_DATA pfad,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentGetAttributesInternal(
IN CONST XCONTENT_DATA_INTERNAL* pcdi,
OUT LPWIN32_FILE_ATTRIBUTE_DATA pfad,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentCopyInternal(
IN CONST XUID* pXuidDst, OPTIONAL
IN CONST XCONTENTDEVICEID* pDeviceIdDst, OPTIONAL
IN CONST XCONTENT_DATA_INTERNAL* pcdi,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentMoveInternal(
IN CONST XUID* pXuidDst, OPTIONAL
IN CONST XCONTENTDEVICEID* pDeviceIdDst, OPTIONAL
IN CONST XCONTENT_DATA_INTERNAL* pcdi,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
#define XCONTENT_COPYFLAG_NONE 0x00000000
#define XCONTENT_COPYFLAG_DELETESOURCE 0x00000001
#define XCONTENT_COPYFLAG_DEVICETRANSFER 0x00000002
#define XCONTENT_COPYFLAG_PROFILETRANSFER 0x00000004
DWORD
XamContentClose(
IN LPCSTR pszRootName,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentFlush(
IN LPCSTR pszRootName,
IN PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentCreateEnumerator(
IN DWORD dwUserIndex,
IN XCONTENTDEVICEID DeviceID,
IN DWORD dwContentType,
IN DWORD dwContentFlags,
IN DWORD cItem,
OUT PDWORD pcbBuffer, OPTIONAL
OUT PHANDLE phEnum
);
DWORD
XamContentCreateEnumeratorInternal(
IN XUID xuid,
IN XCONTENTDEVICEID dwDeviceId,
IN DWORD dwContentType,
IN DWORD dwTitleId,
IN DWORD dwContentFlags,
IN DWORD cItem,
OUT PDWORD pcbBuffer, OPTIONAL
OUT PHANDLE phEnum
);
DWORD
XamContentCreateDeviceEnumerator(
IN DWORD dwContentTypes,
IN DWORD dwFlags,
IN DWORD cItem,
OUT PDWORD pcbBuffer OPTIONAL,
OUT PHANDLE phEnum
);
#define COMMONUSER_XUID ((XUID) -1)
DWORD
XamContentAggregateCreateEnumerator(
IN XUID xuid,
IN XCONTENTDEVICEID DeviceId,
IN DWORD dwContentType,
IN DWORD dwTitleId,
OUT PHANDLE phEnum
);
DWORD
XamContentGetDeviceState(
IN XCONTENTDEVICEID DeviceID,
IN OUT PXOVERLAPPED pOverlapped
);
DWORD
XamContentGetDeviceData(
IN XCONTENTDEVICEID DeviceID,
OUT PXDEVICE_DATA pDeviceData
);
DWORD
XamContentGetDeviceName(
IN XCONTENTDEVICEID DeviceID,
OUT LPWSTR pwszName,
IN DWORD cchName
);
DWORD
XamContentGetMetaDataInternal(
IN CONST XCONTENT_DATA_INTERNAL* pcdi,
OUT XCONTENT_METADATA* pContentMetaData,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentSetThumbnail(
IN DWORD dwUserIndex,
IN CONST XCONTENT_DATA* pcd,
IN CONST BYTE* pbThumbnail,
IN DWORD cbThumbnail,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentGetThumbnail(
IN DWORD dwUserIndex,
IN CONST XCONTENT_DATA* pContentData,
OUT PBYTE pbThumbnail, OPTIONAL
IN OUT PDWORD pcbThumbnail,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentGetCreator(
IN DWORD dwUserIndex,
IN CONST XCONTENT_DATA* pContentData,
OUT BOOL* pfUserIsCreator,
OUT PXUID pxuid, OPTIONAL
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentSetThumbnailInternal(
IN CONST XCONTENT_DATA_INTERNAL* pcdi,
IN CONST BYTE* pbThumbnail,
IN DWORD cbThumbnail,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
XamContentGetLicenseMask(
OUT DWORD* pdwLicenseMask,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
#define XCONTENT_PACKAGE_FS_DEVICE_PREFIX "\\Device\\Package_"
#define XCONTENT_MAX_PACKAGE_FS_DEVICE_NAME 64
#define XCONTENT_PKGFLAG_KEEP_OPEN_ON_TITLE_TERMINATE 0x00000001
#define XCONTENT_PKGFLAG_DONT_UPDATE_DIGESTS_ON_CLOSE 0x00000002
#define COMMON_XCONTENT_PKGFLAGS (XCONTENT_PKGFLAG_KEEP_OPEN_ON_TITLE_TERMINATE | \
XCONTENT_PKGFLAG_DONT_UPDATE_DIGESTS_ON_CLOSE)
typedef struct _XCONTENT_MOUNTED_PACKAGE
{
PVOID pvFsDeviceObject;
PVOID pvFsBlockCache;
LIST_ENTRY leMountedPackages;
DWORD dwFlags;
HANDLE hPackageFile;
DWORD dwOpenRefCount;
RTL_CRITICAL_SECTION csHeaderLock;
XCONTENT_HEADER ContentHeader;
XCONTENT_METADATA ContentMetaData;
PBYTE pbOtherMetaData;
DWORD dwOtherMetaDataSize;
XCONTENTDEVICEID DeviceIDLocked;
CHAR szFsDeviceName[XCONTENT_MAX_PACKAGE_FS_DEVICE_NAME];
CHAR szPackageFilePath[MAX_PATH];
} XCONTENT_MOUNTED_PACKAGE, *PXCONTENT_MOUNTED_PACKAGE;
#define XCONTENT_CREATEPKG_KEEP_OPEN_ON_TITLE_TERMINATE XCONTENT_PKGFLAG_KEEP_OPEN_ON_TITLE_TERMINATE
#define XCONTENT_CREATEPKG_DONT_UPDATE_DIGESTS_ON_CLOSE XCONTENT_PKGFLAG_DONT_UPDATE_DIGESTS_ON_CLOSE
#define XCONTENT_CREATEPKG_OVERWRITE 0x00010000
#define VALID_XCONTENT_CREATEPKG_FLAGS (XCONTENT_CREATEPKG_KEEP_OPEN_ON_TITLE_TERMINATE | \
XCONTENT_CREATEPKG_DONT_UPDATE_DIGESTS_ON_CLOSE | \
XCONTENT_CREATEPKG_OVERWRITE)
DWORD
XamContentCreateAndMountPackage(
IN LPCSTR szPackagePath,
IN HANDLE hFileToUse OPTIONAL,
IN CONST XCONTENT_METADATA* pMetaData,
IN CONST BYTE* pbOtherMetaData OPTIONAL,
IN DWORD dwOtherMetaDataSize,
IN DWORD dwFlags,
IN XCONTENTDEVICEID DeviceIDToLock,
OUT PXCONTENT_MOUNTED_PACKAGE* ppMountedPackage
);
#define XCONTENT_OPENPKG_DONT_VERIFY_SIGNATURE 0x00010000
#define XCONTENT_OPENPKG_COPY_EXISTING_HANDLE 0x00020000
#define VALID_XCONTENT_OPENPKG_FLAGS (XCONTENT_OPENPKG_DONT_VERIFY_SIGNATURE | \
XCONTENT_OPENPKG_COPY_EXISTING_HANDLE)
DWORD
XamContentOpenPackageFile(
IN LPCSTR szPackagePath,
IN DWORD dwContentType,
IN DWORD dwFlags,
OUT HANDLE * phPackageFile,
OUT PXCONTENT_MOUNTED_PACKAGE* ppExistingMountedPackage,
OUT XCONTENT_HEADER * pContentHeader,
OUT XCONTENT_METADATA * pContentMetaData,
OUT BYTE * pbOtherMetaData OPTIONAL,
IN OUT DWORD * pdwOtherMetaDataSize OPTIONAL
);
#define XCONTENT_MOUNTPKG_KEEP_OPEN_ON_TITLE_TERMINATE XCONTENT_PKGFLAG_KEEP_OPEN_ON_TITLE_TERMINATE
#define XCONTENT_MOUNTPKG_DONT_UPDATE_DIGESTS_ON_CLOSE XCONTENT_PKGFLAG_DONT_UPDATE_DIGESTS_ON_CLOSE
#define VALID_XCONTENT_MOUNTPKG_FLAGS (XCONTENT_MOUNTPKG_KEEP_OPEN_ON_TITLE_TERMINATE | \
XCONTENT_MOUNTPKG_DONT_UPDATE_DIGESTS_ON_CLOSE)
DWORD
XamContentMountPackage(
IN HANDLE hPackageFile,
IN LPCSTR szPackagePath,
IN const XCONTENT_HEADER * pContentHeader,
IN const XCONTENT_METADATA * pContentMetaData,
IN const BYTE * pbOtherMetaData OPTIONAL,
IN DWORD dwOtherMetaDataSize,
IN DWORD dwFlags,
IN XCONTENTDEVICEID DeviceIDToLock,
OUT PXCONTENT_MOUNTED_PACKAGE * ppMountedPackage
);
DWORD
XamContentWritePackageHeader(
IN XCONTENT_MOUNTED_PACKAGE * pMountedPackage
);
DWORD
XamContentFlushPackage(
IN XCONTENT_MOUNTED_PACKAGE * pMountedPackage
);
DWORD
XamContentDismountAndClosePackage(
IN XCONTENT_MOUNTED_PACKAGE * pMountedPackage
);
DWORD
XamContentClosePackageFile(
IN HANDLE hPackageFile
);
DWORD
XamContentLockUnlockPackageHeaders(
IN XCONTENT_MOUNTED_PACKAGE * pMountedPackage,
IN BOOL fLock
);
DWORD
XamContentEstimatePackageSize(
IN DWORD cbContentSize
);
#define XamContentReferencePackage(pkg) ObReferenceObject((pkg)->pvFsDeviceObject)
#define XamContentDereferencePackage(pkg) ObDereferenceObject((pkg)->pvFsDeviceObject)
#define XamContentSetPackageFlags(pkg, flags) ((DWORD) InterlockedOr((LONG*) (&(pkg)->dwFlags), (LONG) (flags)))
#define XamContentClearPackageFlags(pkg, flags) ((DWORD) InterlockedAnd((LONG*) (&(pkg)->dwFlags), (LONG) (~(flags))))
DWORD
XamContentLaunchImage(
IN DWORD dwUserIndex,
IN CONST XCONTENT_DATA* pContentData,
IN LPCSTR pszImagePath
);
DWORD
XamContentLaunchImageInternal(
IN CONST XCONTENT_DATA_INTERNAL* pContentData,
IN LPCSTR pszImagePath
);
typedef struct _XDEVICERENAMEPARAM
{
XCONTENTDEVICEID DeviceID;
LPCWSTR pwszName;
DWORD cchName;
} XDEVICERENAMEPARAM, *PXDEVICERENAMEPARAM;
//------------------------------------------------------------------------------
// XamUser functions and flags
//------------------------------------------------------------------------------
#define XAMUSER_NONE 0x00000000
#define XAMUSER_XUID_OFFLINE 0x00000001
#define XAMUSER_XUID_ONLINE 0x00000002
#define XAMUSER_XUID_GUEST 0x00000004
#define XAMUSER_RECOVER_ACCOUNT 0x80000000
#define XAMUSERLOGON_OFFLINEONLY 0x00000001
#define XAMUSERLOGON_FORCELIVELOGOFF 0x00000002 // requires XAMUSERLOGON_OFFLINEONLY
#define XAMUSERLOGON_ADDUSERS 0x00000004
#define XAMUSERLOGON_REMOVEUSERS 0x00000008
#define XAMUSERLOGON_FOREGROUNDPRI 0x00000010
#define XAMUSERLOGON_NOPOPUPNOTIFICATION 0x00000020
#define XAMUSERLOGON_DONTWAITFORCOMPLETION 0x00000040
#define XAMUSERLOGON_ALLOWMACHINEACCOUNTONLY 0x00000080
#define XAMUSERLOGON_CHECKONLINETICKETSONLY 0x00000100
#define XAMUSERLOGON_ALLOWDEFAULTUSER 0x00000200
#define XAMUSERLOGON_ALLOWUSERSWITHREQUIREDMESSAGE 0x00000400
#define XAMUSERLOGON_RESTRICTEDPOPUPNOTIFICATION 0x00000800
HRESULT
WINAPI
XamUserGetXUID(
IN DWORD dwUserIndex,
IN DWORD dwFlags, // XAMUSER_XUID_ONLINE, OFFLINE or EITHER
OUT PXUID pxuid
);
HRESULT
WINAPI
XamUserGetIndexFromXUID(
IN XUID xuid,
IN DWORD dwFlags,
OUT PDWORD pdwUserIndex
);
HRESULT
WINAPI
XamUserGetGamerTag(
IN DWORD dwUserIndex,
OUT LPWSTR pszGamerTag,
IN DWORD cchGamerTag
);
HRESULT
WINAPI
XamUserLogon(
IN CONST XUID* rgUsers,
IN DWORD dwFlags,
IN PXOVERLAPPED pOverlapped OPTIONAL
);
#ifndef PROFILEENUMRESULT
typedef struct _PROFILEENUMRESULT PROFILEENUMRESULT;
#endif
HRESULT
WINAPI
XamUserLogonEx(
IN CONST PROFILEENUMRESULT* rgUsers,
IN DWORD dwFlags,
IN PXOVERLAPPED pOverlapped OPTIONAL
);
HRESULT
WINAPI
XamUserFlushLogonQueue(
IN PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
WINAPI
XamUserGetUserIndexMask(
IN DWORD dwFlags // See XAMUSER_
);
DWORD
WINAPI
XamUserGetRequestedUserIndexMask(
IN DWORD dwFlags // See XAMUSER_
);
DWORD
WINAPI
XamGetUserPresetPresenceState(
IN DWORD dwUserIndex
);
VOID
WINAPI
XamSetUserPresetPresenceState(
IN DWORD dwUserIndex,
IN DWORD dwStateFlags
);
BOOL
WINAPI
XamUserIsOnlineEnabled(
IN DWORD dwUserIndex
);
DWORD
WINAPI
XamUserGetUserFlags(
IN DWORD dwUserIndex
);
DWORD
WINAPI
XamUserGetUserFlagsFromXUID(
IN XUID xuid
);
DWORD
WINAPI
XamUserGetCachedUserFlags(
IN DWORD dwUserIndex
);
BYTE
WINAPI
XamUserGetOnlineCountryFromXUID(
IN XUID xuid
);
BYTE
WINAPI
XamUserGetMembershipTier(
IN DWORD dwUserIndex
);
BYTE
WINAPI
XamUserGetMembershipTierFromXUID(
IN XUID xuid
);
BOOL
WINAPI
XamUserIsGuest(
IN DWORD dwUserIndex
);
// Macros to use with XamUserGetUserIndexMask. Given a user index and a bit
// mask, tells if a user index bit is on or off.
#define XAMUSER_MASK_USERINDEX_X(__dwUserIndex__, __dw__) (!!((__dw__) & (1 << (__dwUserIndex__))))
#define XAMUSER_MASK_USERINDEX_0(__dw__) XAMUSER_USERINDEX_X(0, __dw__)
#define XAMUSER_MASK_USERINDEX_1(__dw__) XAMUSER_USERINDEX_X(1, __dw__)
#define XAMUSER_MASK_USERINDEX_2(__dw__) XAMUSER_USERINDEX_X(2, __dw__)
#define XAMUSER_MASK_USERINDEX_3(__dw__) XAMUSER_USERINDEX_X(3, __dw__)
HRESULT
WINAPI
XamUserGetDeviceContext(
IN DWORD dwUserIndex,
IN UCHAR ucDeviceCategory,
OUT PULONG_PTR pulDeviceContext
);
HRESULT
WINAPI
XamUserLookupDevice(
IN ULONG_PTR ulDeviceContext,
IN UCHAR ucDeviceCategory,
OUT PDWORD pdwUserIndex
);
HRESULT
WINAPI
XamUserBindDeviceCallback(
IN ULONG_PTR ulUserIdentifier,
IN ULONG_PTR ulDeviceContext,
IN UCHAR ucDeviceCategory,
IN BOOLEAN fUnbindUser,
OUT PUCHAR pucAssignedUser
);
DWORD
WINAPI
XamUserCheckPrivilege(
IN DWORD dwUserIndex,
IN DWORD PrivilegeType,
OUT PBOOL pfResult
);
DWORD
WINAPI
XamUserAreUsersFriends(
IN DWORD dwUserIndex,
IN PXUID pXuids,
IN DWORD dwXuidCount,
OUT PBOOL pfResult OPTIONAL,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
// Defines for XAMACCOUNTINFO's dwMask, indicate valid fields.
// Keep these bits packed together as much as possible. Might use some
// remaining bits for versioning at a later time.
#define XAMPROFILE_NONE 0x00000000
#define XAMPROFILE_PASSCODE 0x10000000 // set if password field is valid
#define XAMPROFILE_ONLINEENABLED 0x20000000 // set if account is online enabled
#define XAMPROFILE_VERSIONMASK 0x000000FF
#define XAMPROFILE_VERSION1 1
#define XAMPROFILE_CURRENTVERSION XAMPROFILE_VERSION1
#define XAMPROFILE_MAX_HD 32
#define XAMPROFILE_MAX_MU 8
#define XAMACCOUNT_LIVEFLAG_ACCTREQUIRESMGMT 0x00000001
#define XAMACCOUNT_PASSCODELENGTH 4
#define XAMACCOUNT_ONLINEDOMAINSIZE 20
#define XAMACCOUNT_ONLINEKERBEROSREALMSIZE 24
#define XAMACCOUNT_ONLINEKEYLENGTH 16
#define XAMACCOUNT_USERPASSPORTMEMBERNAMESIZE (113 + 1)
#define XAMACCOUNT_USERPASSPORTPASSWORDSIZE (16 + 16)
#define XAMACCOUNT_OWNERPASSPORTMEMBERNAMESIZE XAMACCOUNT_USERPASSPORTMEMBERNAMESIZE
#define XAMUSER_ISTEAMXUID IsTeamXUID
#define XAMUSER_ISOFFLINEXUID IsOfflineXUID
#define XAMUSER_ISONLINEXUID IsOnlineXUID
#define XAMUSER_ISGUESTXUID IsGuestXUID
#pragma pack(push, 1)
typedef struct _XAMACCOUNTINFO
{
DWORD dwReserved; // Don't touch outside of XamProfile* functions
DWORD dwLiveFlags;
WCHAR szGamerTag[XUSER_NAME_SIZE];
XUID xuidOnline;
DWORD dwCachedUserFlags;
DWORD dwOnlineServiceNetworkID;
BYTE rgbPasscode[XAMACCOUNT_PASSCODELENGTH];
CHAR szOnlineDomain[XAMACCOUNT_ONLINEDOMAINSIZE];
CHAR szOnlineKerberosRealm[XAMACCOUNT_ONLINEKERBEROSREALMSIZE];
BYTE rgbOnlineKey[XAMACCOUNT_ONLINEKEYLENGTH];
CHAR szUserPassportMembername[XAMACCOUNT_USERPASSPORTMEMBERNAMESIZE];
CHAR rgcUserPassportPassword[XAMACCOUNT_USERPASSPORTPASSWORDSIZE];
CHAR szOwnerPassportMembername[XAMACCOUNT_OWNERPASSPORTMEMBERNAMESIZE];
} XAMACCOUNTINFO, *PXAMACCOUNTINFO;
#pragma pack(pop)
typedef struct _USER_PAYMENT_INFO USER_PAYMENT_INFO, *PUSER_PAYMENT_INFO;
typedef struct _PASSPORT_SESSION_TOKEN PASSPORT_SESSION_TOKEN;
HRESULT
WINAPI
XamProfileCreate(
IN DWORD dwFlags, // XAMUSER_XUID_ONLINE, OFFLINE or both
IN OUT PXCONTENTDEVICEID pDeviceID,
IN XUID xuidOffline,
IN CONST XAMACCOUNTINFO* paccountinfo,
IN CONST USER_PAYMENT_INFO* puserpaymentinfo,
IN CONST PASSPORT_SESSION_TOKEN* puserPassportToken,
IN CONST PASSPORT_SESSION_TOKEN* pownerPassportToken,
OUT PVOID* ppvContext
);
HRESULT
WINAPI
XamProfileGetCreationStatus(
IN PVOID pvContext,
OUT PXUID pxuidOffline
);
HRESULT
WINAPI
XamProfileDelete(
IN XCONTENTDEVICEID DeviceID,
IN XUID xuidOffline
);
typedef struct _PROFILEENUMRESULT
{
XUID xuidOffline;
XAMACCOUNTINFO xai;
XCONTENTDEVICEID DeviceID;
} PROFILEENUMRESULT, *PPROFILEENUMRESULT;
DWORD
WINAPI
XamProfileCreateEnumerator(
IN XCONTENTDEVICEID DeviceID,
OUT PHANDLE phEnum
);
DWORD
WINAPI
XamProfileEnumerate(
IN HANDLE hEnum,
IN DWORD dwFlags,
OUT PPROFILEENUMRESULT pProfileEnumResult,
IN OUT PXOVERLAPPED pOverlapped OPTIONAL
);
DWORD
WINAPI
XamProfileFindAccount(
IN XUID xuidOffline,
OUT PXAMACCOUNTINFO pAccountInfo,
OUT PXCONTENTDEVICEID pDeviceID OPTIONAL
);
DWORD
WINAPI
XamProfileRenameAccount(
IN XUID xuidOffline,
IN LPCWSTR pszName
);
DWORD
WINAPI
XamProfileOpen(
IN XUID xuidOffline,
IN LPCSTR pszRootName,
IN DWORD dwFlags,
OUT PXCONTENT_DATA_INTERNAL pcdi OPTIONAL
);
DWORD
WINAPI
XamProfileClose(
IN LPCSTR pszRootName
);
HRESULT
WINAPI
XamProfileLoadAccountInfo(
IN XCONTENTDEVICEID DeviceID,
IN XUID xuidOffline,
OUT PXAMACCOUNTINFO pAccountInfo
);
HRESULT
WINAPI
XamProfileSaveAccountInfo(
IN XCONTENTDEVICEID DeviceID,
IN XUID xuidOffline,
IN XAMACCOUNTINFO * pAccountInfo
);
__inline
BOOL
XamProfileIsParentalControlled(
IN CONST XAMACCOUNTINFO* pAccountInfo
)
{
return ((pAccountInfo->dwCachedUserFlags & XONLINE_USER_PARENTAL_CONTROLLED) != 0);
}
BOOL
WINAPI
XamAreMixedAccountsSignedIn(
);
//
// Contains information need to process an async message. This structure
// is pointed to by the InternalContext field from the XOVERLAPPED structure.
// In some cases, when some user data needs to be associated with the message,
// memory for the user data and this structure is allocated in a single
// allocation.
//
typedef struct _XASYNCMESSAGE
{
HXAMAPP hxamapp;
DWORD dwMessage;
PXOVERLAPPED pOverlapped;
PVOID pBuffer;
PVOID UserEvent;
PVOID Apc;
HXAMTASK hXamTask;
} XASYNCMESSAGE, *PXASYNCMESSAGE;
//
// XAM Boot Data
//
// This is shared between XAM and XBDM, so be sure to keep it backward
// compatible.
//
typedef enum _XAM_BOOT_REASON
{
XAM_BOOT_SYSTEM_START = 0,
XAM_BOOT_LAUNCH_MEDIA,
XAM_BOOT_LAUNCH_NEW_IMAGE,
XAM_BOOT_USER_REQUEST,
XAM_BOOT_DEBUG_REQUEST,
XAM_BOOT_RECOVERY,
XAM_BOOT_MFG_LOADER,
XAM_BOOT_DUMP,
XAM_BOOT_LAUNCH_DASHBOARD,
XAM_BOOT_LAUNCH_ANY_DASHBOARD,
} XAM_BOOT_REASON;
#define XAM_MAX_LAUNCH_PATH 256
#define XAM_BOOT_DATA_FLAG_TITLE 0x00000001
#define XAM_BOOT_DATA_FLAG_UNLOAD_HUD 0x00000002
#define XAM_BOOT_DATA_FLAG_BOUND_PATH 0x00000004
#define XAM_BOOT_DATA_FLAG_ASSUME_DVD 0x00000010
#define XAM_BOOT_DATA_FLAG_DASH_ARCADE 0x00000020
#define XAM_BOOT_DATA_FLAG_HYBRID_FORCE_DVD 0x00000040
#define XAM_BOOT_DATA_FLAG_HYBRID_FORCE_GAME 0x00000080
#define XAM_BOOT_DATA_FLAG_HYBRID_NO_NOTIFY 0x00000100
#pragma pack(push, 4)
typedef struct _XAM_BOOT_DATA_BLOCK
{
//
// Base (1888) structure
//
XAM_BOOT_REASON Reason;
DWORD Flags;
PVOID ImagePhysicalBase;
ULONG ImageSize;
CHAR ImageName[XAM_MAX_LAUNCH_PATH];
CHAR DDrive[XAM_MAX_LAUNCH_PATH];
CHAR CommandLine[XAM_MAX_LAUNCH_PATH];
//
// Fields added after build 1888
//
DWORD MinVersion;
} XAM_BOOT_DATA_BLOCK;
#pragma pack(pop)
HRESULT
WINAPI
XMsgAcquireAsyncMessageFromOverlapped(
IN PXOVERLAPPED pOverlapped,
OUT PXASYNCMESSAGE* ppMsg
);
HRESULT
WINAPI
XMsgReleaseAsyncMessageToOverlapped(
IN PXASYNCMESSAGE pMsg,
IN PXOVERLAPPED pOverlapped
);
//------------------------------------------------------------------------------
// System-defined string ids used in the SPA file
//------------------------------------------------------------------------------
#define X_STRINGID_TITLE 0x8000
typedef struct
{
DWORD dwTitleId;
ULONGLONG qwId;
DWORD dwUserIndex;
WCHAR* pwsz;
PDWORD pcch;
} XGI_READSTRING_MSG;
//------------------------------------------------------------------------------
// Tiles/Images/Pictures
//------------------------------------------------------------------------------
typedef enum
{
XTILETYPE_ACHIEVEMENT = 0,
XTILETYPE_GAME_ICON = 1,
XTILETYPE_GAMER_TILE = 2,
XTILETYPE_GAMER_TILE_SMALL = 3,
XTILETYPE_LOCAL_GAMER_TILE = 4,
XTILETYPE_LOCAL_GAMER_TILE_SMALL = 5,
XTILETYPE_BKGND = 6,
XTILETYPE_AWARDED_GAMER_TILE = 7,
XTILETYPE_AWARDED_GAMER_TILE_SMALL = 8,
XTILETYPE_GAMER_TILE_BY_IMAGE_ID = 9,
} XTILETYPE;
#define X_IMAGEID_FLAGS_LARGE 0x00020000
#define X_IMAGEID_FLAGS_SMALL 0x00010000
// number of tiles available to users to pick
#define NUM_FLASH_TILES 12
// total number of tiles available, including one for xbox 1 users
#define NUM_FLASH_TILES_ALL NUM_FLASH_TILES + 1
//
// System defined image ids
//
#define X_IMAGEID_DEFAULT_TITLEID XENON_DASH_TITLE_ID
#define X_IMAGEID_DEFAULT_TILE 0x0 + X_IMAGEID_FLAGS_LARGE
#define X_IMAGEID_DEFAULT_TILE_SMALL 0x0 + X_IMAGEID_FLAGS_SMALL
#define X_IMAGEID_GAME 0x8000
#define X_IMAGEID_GAMER 0x8001
#define X_IMAGEID_GAMER_SMALL 0x8002
#define X_IMAGEID_BKGND 0x8003
#define X_IMAGEID_GAME_MARKETPLACE 0x8004
typedef struct
{
DWORD dwUserIndex;
DWORD dwNumXuids;
CONST XUID* rgXuids;
} XGI_PREPAREGAMERTILES_MSG;
typedef struct
{
XTILETYPE eTileType;
DWORD dwTitleId; // Used for game tile and achievements
ULONGLONG qwImageId;
DWORD dwUserIndex; // Used for achievements
PBYTE pbImage;
PDWORD pcbBuffer;
DWORD cbBuffer;
DWORD dwPitch;
DWORD dwHeight;
} XGI_READWRITETILE_MSG;
typedef struct
{
BOOL fForEnumerate; // Making available for enumeration, or making it the gamer's tile?
DWORD dwUserIndex;
DWORD dwTitleId; // Title id of the granting title
DWORD dwImageId; // Image id of the 64x64 tile
DWORD dwImageIdSmall; // Image id of the 32x32 tile
BOOL fUpdateSetting; // Update profile setting as a part of writing tile? (only if fForEnumeate = false)
} XGI_WRITEGAMERTILE_MSG;
XBOXAPI
DWORD
WINAPI
XamUserCreateAchievementEnumerator(
IN DWORD dwTitleId, // A title in your family or 0 for the current title
IN DWORD dwUserIndex, // User index of locally signed-in user making the request
IN XUID xuidRequestee, // XUID of remote user whose titles are enumerated (or INVALID_XUID for a local enumeration)
IN DWORD dwDetailFlags, // Get the descriptions, etc.
IN DWORD dwStartingIndex, // Number of achievements to skip before enumerating
IN DWORD cItem, // Number of achievements to retrieve per enumeration
OUT PDWORD pcbBuffer, // Size of buffer needed to enumerate
OUT PHANDLE ph // Handle to created enumerator
);
XBOXAPI
DWORD
WINAPI
XamUserCreateStatsEnumerator(
IN DWORD dwTitleId, // Title id to read stats for, 0 if current
IN XGI_STATS_ENUMERATOR_TYPE enumType, // Type of enumeration to be performed
IN ULONGLONG qwPivot, // Rank, rating to start from, or user to pivot around, depending on type
IN DWORD dwNumRows, // Number of rows to retrieve
IN DWORD dwNumStatsSpecs, // Number of specs in the pSpecs parameter
IN CONST XUSER_STATS_SPEC* pSpecs, // Array of stats specs to retrieve
OUT PDWORD pcbBuffer, // Size of buffer needed to enumerate
OUT PHANDLE ph // Handle to created enumerator
);
XBOXAPI
DWORD
WINAPI
XamUserCreateTitlesPlayedEnumerator(
IN DWORD dwTitleId, // A title in your family or 0 for the current title
IN DWORD dwUserIndex, // User index of locally signed-in user making the request
IN XUID xuid, // XUID of remote user whose titles are enumerated (or INVALID_XUID for a local enumeration)
IN DWORD dwStartingIndex, // Number to skip before enumerating
IN DWORD cItem, // Number to retrieve per enumeration
OUT PDWORD pcbBuffer, // Size of buffer needed to enumerate
OUT PHANDLE ph // Handle to created enumerator
);
void
XamInitFlashTiles(void);
XBOXAPI
DWORD
WINAPI
XamPrepareGamerTiles(
IN DWORD dwUserIndex, // User index of user reading gamer tiles
IN DWORD dwNumXuids, // number of xuids in rgXuids
IN CONST XUID* rgXuids // List of users to prepare tiles for
);
XBOXAPI
DWORD
WINAPI
XamReadTile(
IN XTILETYPE eTileType,
IN DWORD dwTitleId,
IN ULONGLONG qwImageId,
IN DWORD dwUserIndex, // User index of profile to search in
IN PBYTE pbImage,
IN OUT PDWORD pcbBuffer,
IN OUT PXOVERLAPPED pXOverlapped OPTIONAL
);
XBOXAPI
DWORD
WINAPI
XamReadTileToTexture(
IN XTILETYPE eTileType,
IN DWORD dwTitleId,
IN ULONGLONG qwImageId,
IN DWORD dwUserIndex, // User index of profile to search in
IN OUT PBYTE pbTextureBuffer,
IN DWORD dwPitch,
IN DWORD dwHeight,
IN OUT PXOVERLAPPED pXOverlapped OPTIONAL
);
XBOXAPI
DWORD
WINAPI
XamWriteGamerTile(
IN DWORD dwUserIndex,
IN DWORD dwTitleId,
IN DWORD dwImageId,
IN DWORD dwImageIdSmall,
IN BOOL fForEnumeration,
IN OUT PXOVERLAPPED pXOverlapped OPTIONAL
);
XBOXAPI
DWORD
WINAPI
XamWriteTile(
IN XTILETYPE eTileType,
IN DWORD dwTitleId,
IN ULONGLONG qwImageId,
IN DWORD dwUserIndex,
IN PBYTE pbImage,
IN OUT DWORD cbImage,
IN OUT PXOVERLAPPED pXOverlapped OPTIONAL
);
DWORD
WINAPI
XamParseGamerTileKey(
IN PXUSER_DATA pKey,
OUT PDWORD pdwTitleId,
OUT PDWORD pdwImageId,
OUT PDWORD pdwImageIdSmall
);
XBOXAPI
DWORD
WINAPI
XamReadString(
IN DWORD dwTitleId,
IN ULONGLONG qwStringId,
IN DWORD dwUserIndex, // User index of profile to search in
IN WCHAR* pwsz,
IN OUT PDWORD pcch,
IN OUT PXOVERLAPPED pXOverlapped OPTIONAL
);
XBOXAPI
DWORD
XamGetCachedTitleName(
IN DWORD dwTitleId,
OUT LPWSTR pwsz,
IN OUT PDWORD pcch
);
XBOXAPI
DWORD
XamGetCachedGamerTag(
IN XUID xuid,
OUT LPSTR psz,
IN OUT PDWORD pcch
);
XBOXAPI
DWORD
XamGetCachedGamerTagW(
IN XUID xuid,
OUT LPWSTR pwsz,
IN OUT PDWORD pcch
);
XBOXAPI
HRESULT
WINAPI
XamReadImage(
IN DWORD dwTileFlags,
IN DWORD dwTitleId,
IN DWORD dwUserIndex,
IN ULONGLONG qwImageId,
OUT HXUIBRUSH* phBrush
);
XBOXAPI
HRESULT
WINAPI
XamDecompressPNGToTexture(
IN PBYTE pbPng,
IN DWORD cbPng,
IN PBYTE pbTexture,
IN DWORD dwPitch,
IN DWORD dwHeight
);
//------------------------------------------------------------------------------
// Server synchronization (profile settings, achievements, title list, etc.)
//------------------------------------------------------------------------------
typedef struct
{
DWORD dwUserIndexMask;
} XGI_SYNC_MSG;
XBOXAPI
DWORD
WINAPI
XamUserProfileSync(
IN DWORD dwUserIndexMask, // Who to sync (bitmap of user indexes (LSB == user index 0))
IN OUT PXOVERLAPPED pXOverlapped OPTIONAL
);
//------------------------------------------------------------------------------
// Title tracking and recovery
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Titles-played list
//------------------------------------------------------------------------------
// The XUSER_TITLE_PLAYED structure defines the info stored for each title
// ever played. It's used in both the SPIs and as the format stored in a profile
// file.
//
// If this format changes then all existing title records in all profiles will
// be invalidated. That's why there are unused members for adding new info later.
// Just be sure that the size of the structure (including alignment packing)
// remains the same!
typedef struct tagXUSER_TITLE_PLAYED
{
DWORD dwTitleId;
DWORD dwAchievementsPossible;
DWORD dwAchievementsEarned;
DWORD dwCredPossible;
DWORD dwCredEarned;
DWORD dwUnused1;
DWORD dwUnused2;
DWORD dwUnused3;
FILETIME ftLastLoaded; // Only changed if online
WCHAR wszTitleName[64]; // Includes null-terminator
} XUSER_TITLE_PLAYED;
typedef struct
{
DWORD dwUserIndex;
CONST XUSER_TITLE_PLAYED* pTitleToRecover;
} XGI_RECOVERTITLE_MSG;
XBOXAPI
DWORD
WINAPI
XamProfileRecoverTitle(
IN DWORD dwUserIndex,
IN CONST XUSER_TITLE_PLAYED* pTitleToRecover,
IN OUT PXOVERLAPPED pXOverlapped OPTIONAL
);
//------------------------------------------------------------------------------
// Profile settings
//------------------------------------------------------------------------------
XBOXAPI
DWORD
WINAPI
XamUserReadProfileSettings(
IN DWORD dwTitleId, // A title in your family or 0 for the current title
IN DWORD dwUserIndexRequester, // User index of requesting user. Used for permission checking.
IN DWORD dwNumFor, // Count of XUIDs in pxuidFor
IN CONST XUID* pxuidFor, // Pointer to array of XUIDs to request settings for
IN DWORD dwNumSettingIds, // Count of setting ids in pdwSettingIds
IN CONST DWORD* pdwSettingIds, // Pointer to array of settings to retrieve
IN OUT DWORD* pcbResults, // Size of pResults buffer. If *pchResults is 0 then required size is returned.
IN OUT PXUSER_READ_PROFILE_SETTING_RESULT pResults,
IN OUT PXOVERLAPPED pXOverlapped OPTIONAL
);
XBOXAPI
DWORD
WINAPI
XamUserWriteProfileSettings(
IN DWORD dwTitleId,
IN DWORD dwUserIndex, // User index of player whose settings are written
IN DWORD dwNumSettings, // Count of settings in pSettings
IN CONST PXUSER_PROFILE_SETTING pSettings, // Pointer to array of settings to set
IN PXOVERLAPPED pXOverlapped OPTIONAL
);
//------------------------------------------------------------------------------
// Messaging UI APIs
//------------------------------------------------------------------------------
XBOXAPI
DWORD
WINAPI
XamShowMessageComposeUI(
IN DWORD dwUserIndex,
IN CONST XUID* pXuidRecipients OPTIONAL,
IN UINT cRecipients,
IN LPCWSTR pszText OPTIONAL
);
XBOXAPI
DWORD
WINAPI
XamShowGameInviteUI(
IN DWORD dwUserIndex,
IN CONST XUID* pXuidRecipients OPTIONAL,
IN UINT cRecipients,
IN LPCWSTR pszText OPTIONAL
);
XBOXAPI
DWORD
WINAPI
XamShowFriendRequestUI(
IN DWORD dwUserIndex,
IN XUID xuidUser
);
XBOXAPI
DWORD
WINAPI
XamShowPrivateChatInviteUI(
IN DWORD dwUserIndex,
IN DWORD dwChannel
);
//------------------------------------------------------------------------------
// Virtual keyboard API
//------------------------------------------------------------------------------
typedef struct _XVIRTUALKBDUI_PARAMS
{
DWORD dwUserIndex;
DWORD cchResultText;
DWORD dwFlags;
LPCWSTR pDefaultText;
LPCWSTR pTitleText;
LPCWSTR pDescriptionText;
LPWSTR pResultText;
PXOVERLAPPED pOverlapped;
} XVIRTUALKBDUI_PARAMS, *PXVIRTUALKBDUI_PARAMS;
XBOXAPI
DWORD
WINAPI
XamShowKeyboardUI(
IN DWORD dwUserIndex,
IN DWORD dwFlags,
IN LPCWSTR pDefaultText,
IN LPCWSTR pTitleText,
IN LPCWSTR pDescriptionText,
OUT LPWSTR pResultText,
IN DWORD cchResultText,
IN OUT PXOVERLAPPED pOverlapped
);
//------------------------------------------------------------------------------
// QuickChat UI API
//------------------------------------------------------------------------------
typedef struct _XSHOWQUICKCHATUI_PARAMS
{
DWORD dwUserIndex;
} XSHOWQUICKCHATUI_PARAMS, *PXSHOWQUICKCHATUI_PARAMS;
XBOXAPI
DWORD
WINAPI
XamShowQuickChatUI(
IN DWORD dwUserIndex
);
//------------------------------------------------------------------------------
// VoiceMail application API
//------------------------------------------------------------------------------
#define XSHOWVOICEMAILUI_RESULTS_NONE 0x00000000
#define XSHOWVOICEMAILUI_RESULTS_RECORDED 0x00000001
#define XSHOWVOICEMAILUI_RESULTS_ACCEPTED 0x00000002
typedef struct _XVOICEMAILUI_RESULTS
{
DWORD dwResults;
DWORD cbRecordedBufferSize;
} XVOICEMAILUI_RESULTS, *PXVOICEMAILUI_RESULTS;
#define XSHOWVOICEMAILUI_FLAGS_PLAYVOICE 0x00000001
#define XSHOWVOICEMAILUI_FLAGS_RECORDVOICE 0x00000002
#define XSHOWVOICEMAILUI_FLAGS_RESERVED1 0x00000004
#define XSHOWVOICEMAILUI_FLAGS_RESERVED2 0x00000008
typedef struct _XVOICEMAILUI_PARAMS
{
DWORD dwUserIndex;
DWORD dwFlags;
PBYTE pbBuffer;
DWORD cbBufferSize;
DWORD cbRecordedBufferSize;
WORD wCodec;
PXVOICEMAILUI_RESULTS pResults;
} XVOICEMAILUI_PARAMS, *PXVOICEMAILUI_PARAMS;
XBOXAPI
DWORD
WINAPI
XamShowVoiceMailUI(
IN DWORD dwUserIndex,
IN DWORD dwFlags,
IN PBYTE pbBuffer,
IN DWORD cbBufferSize,
IN DWORD cbRecordedBufferSize,
IN WORD wCodec,
OUT PXVOICEMAILUI_RESULTS pResults
);
//------------------------------------------------------------------------------
// GamerProfile application API types
//------------------------------------------------------------------------------
#define XGAMERPROFILE_MODE_GAMERCARD 0x00
#define XGAMERPROFILE_MODE_GAMES 0x01
#define XGAMERPROFILE_MODE_ACHIEVEMENTS 0x02
#define XGAMERPROFILE_MODE_EDIT 0x03
typedef struct _XGAMERPROFILE_PARAMS
{
DWORD dwUserIndex;
DWORD dwMode;
XUID xuidTarget;
DWORD dwTitleId;
} XGAMERPROFILE_PARAMS, *PXGAMERPROFILE_PARAMS;
//------------------------------------------------------------------------------
// GamerProfile application APIs
//------------------------------------------------------------------------------
XBOXAPI
DWORD
WINAPI
XamShowGamerCardUI(
IN DWORD dwUserIndex
);
XBOXAPI
DWORD
WINAPI
XamShowGamerCardUIForXUID(
IN DWORD dwUserIndex,
IN XUID xuidPlayer,
IN BOOL fDisableChatButton
);
//
// API to show the Achievements UI
//
XBOXAPI
DWORD
WINAPI
XamShowAchievementsUI(
IN DWORD dwUserIndex,
IN DWORD dwTitleId
);
XBOXAPI
DWORD
WINAPI
XamShowGamesUI(
IN DWORD dwUserIndex,
IN XUID xuidTarget
);
typedef struct _XSHOWFRIENDSUI_PARAMS
{
DWORD dwUserIndex;
DWORD dwFlags;
XUID rgXuidRecipients[100];
UINT cRecipients;
WCHAR szText[256];
ULONGLONG qwParam;
DWORD dwChannel;
} XSHOWFRIENDSUI_PARAMS, *PXSHOWFRIENDSUI_PARAMS;
#define XSHOWFRIENDSUI_FLAGS_SHOWMESSAGES (0x01)
#define XSHOWFRIENDSUI_FLAGS_COMPOSEMESSAGE (0x02)
#define XSHOWFRIENDSUI_FLAGS_GAMEINVITE (0x04)
#define XSHOWFRIENDSUI_FLAGS_FRIENDREQUEST (0x08)
#define XSHOWFRIENDSUI_FLAGS_SHOWPLAYERS (0x10)
#define XSHOWFRIENDSUI_FLAGS_GAMERPROFILE (0x20)
#define XSHOWFRIENDSUI_FLAGS_QUICKCHAT (0x40)
#define XSHOWFRIENDSUI_FLAGS_DISABLECHAT (0x80)
#define XSHOWFRIENDSUI_FLAGS_PRIVATECHATINVITE (0x100)
#define XSHOWFRIENDSUI_FLAGS_SHOWRECENTMESSAGE (0x200)
#define XSHOWFRIENDSUI_FLAGS_PRIVATECHATCHANNEL (0x400)
#define XSHOWFRIENDSUI_FLAGS_INVOKEDBYPRIVATECHAT (0x800)
XBOXAPI
DWORD
WINAPI
XamShowFriendsUI(
IN DWORD dwUserIndex
);
XBOXAPI
DWORD
WINAPI
XamShowPlayersUI(
IN DWORD dwUserIndex
);
XBOXAPI
DWORD
WINAPI
XamShowMessagesUI(
IN DWORD dwUserIndex
);
XBOXAPI
DWORD
WINAPI
XamShowMessagesUIEx(
IN DWORD dwUserIndex,
IN DWORD dwFlags
);
XBOXAPI
DWORD
WINAPI
XamShowRecentMessageUI(
IN DWORD dwUserIndex,
IN ULONGLONG qwParam
);
XBOXAPI
DWORD
WINAPI
XamShowRecentMessageUIEx(
IN DWORD dwFlags,
IN DWORD dwUserIndex,
IN ULONGLONG qwParam,
IN DWORD dwChannel
);
XBOXAPI
DWORD
WINAPI
XamShowFriendsUIp(
IN DWORD dwUserIndex,
IN DWORD dwFlags
);
typedef struct _XSHOWSIGNINUI_PARAMS
{
DWORD dwUserIndex;
DWORD cPanes;
DWORD dwFlags;
PXOVERLAPPED pOverlapped;
} XSHOWSIGNINUI_PARAMS, *PXSHOWSIGNINUI_PARAMS;
XBOXAPI
DWORD
WINAPI
XamShowSigninUI(
IN DWORD cPanes,
IN DWORD dwFlags
);
XBOXAPI
DWORD
WINAPI
XamShowSigninUIEx(
IN DWORD cPanes,
IN DWORD dwFlags,
IN OUT PXOVERLAPPED pxov
);
XBOXAPI
DWORD
WINAPI
XamShowSigninUIp(
IN DWORD dwUserIndex,
IN DWORD cPanes,
IN DWORD dwFlags
);
XBOXAPI
DWORD
WINAPI
XamShowPasscodeVerifyUI(
IN DWORD dwUserIndex,
OUT PMESSAGEBOX_RESULT pResult,
IN OUT PXOVERLAPPED pOverlapped
);
XBOXAPI
DWORD
WINAPI
XamShowDirtyDiscErrorUI(
IN DWORD dwUserIndex
);
//------------------------------------------------------------------------------
// Feedback application APIs
//------------------------------------------------------------------------------
//
// Feedback API
//
#define FEEDBACK_ENTRYPOINT_PLAYERREVIEW 0
#define FEEDBACK_ENTRYPOINT_COMPLAINT 1
#define FEEDBACK_ENTRYPOINT_REPUTATION 2
typedef struct _XSHOWFEEDBACKUI_PARAMS
{
DWORD dwUserIndex;
XUID _xuidFeedbackTarget;
DWORD _dEntryPoint;
} XSHOWFEEDBACKUI_PARAMS, *PXSHOWFEEDBACKUI_PARAMS;
//
// API to show the feedback UI
//
XBOXAPI
DWORD
WINAPI
XamShowPlayerReviewUI(
IN DWORD dwUserIndex,
IN XUID XuidFeedbackTarget
);
XBOXAPI
DWORD
WINAPI
XamShowComplaintUI(
IN DWORD dwUserIndex,
IN XUID XuidFeedbackTarget
);
XBOXAPI
DWORD
WINAPI
XamShowReputationUI(
IN DWORD dwUserIndex
);
XBOXAPI
DWORD
WINAPI
XamContentGetMarketplaceCounts(
IN DWORD dwUserIndex,
IN DWORD dwContentCategories,
IN DWORD cbResults,
IN OUT XOFFERING_CONTENTAVAILABLE_RESULT* pResults,
IN PXOVERLAPPED pXOverlapped OPTIONAL
);
#define XSHOWMARKETPLACEUI_ACTIVETITLEID 0
typedef struct _MP_BILLING_ACCOUNT_INFO
{
BOOL fEditMode;
BYTE bPaymentTypeId;
WCHAR wszPaymentInstrumentId[MAX_INSTANCE_ID_LENGTH];
WCHAR wszStreet1[MAX_STREET_SIZE];
WCHAR wszStreet2[MAX_STREET_SIZE];
WCHAR wszCity[MAX_CITY_SIZE];
WCHAR wszDistrict[MAX_DISTRICT_SIZE];
WCHAR wszState[MAX_STATE_SIZE];
WCHAR wszPostalCode[MAX_POSTALCODE_SIZE];
WCHAR wszPhonePrefix[MAX_PHONE_PREFIX_SIZE];
WCHAR wszPhoneNumber[MAX_PHONE_NUMBER_SIZE];
WCHAR wszPhoneExtension[MAX_PHONE_EXTENSION_SIZE];
BYTE bCardTypeId;
WCHAR wszCreditAccountHolderName[MAX_CC_NAME_SIZE];
WCHAR wszCreditAccountNumber[MAX_CC_NUMBER_SIZE];
WCHAR wszCreditCCVNumber[MAX_CC_CCV_NUMBER_SIZE];
FILETIME ftExpirationDate;
WCHAR wszDebitAccountHolderName[MAX_DD_NAME_SIZE];
WCHAR wszDebitAccountNumber[MAX_DD_NUMBER_SIZE];
WCHAR wszDebitBankCode[MAX_DD_BANK_CODE_SIZE];
WCHAR wszDebitBranchCode[MAX_DD_BRANCH_CODE_SIZE];
WCHAR wszDebitCheckDigits[MAX_DD_CHECK_DIGITS_SIZE];
} MP_BILLING_ACCOUNT_INFO, *PMP_BILLING_ACCOUNT_INFO;
typedef struct _XSHOWMARKETPLACEUI_PARAMS
{
DWORD dwUserIndex;
XUID UserXuid;
DWORD dwEntryPoint;
ULONGLONG qwOfferID;
DWORD dwOfferType;
DWORD dwContentCategories;
DWORD dwTitleId;
BYTE bOnlineCountry;
PMP_BILLING_ACCOUNT_INFO pBillingInfo;
PXOVERLAPPED pOverlapped;
} XSHOWMARKETPLACEUI_PARAMS, *PXSHOWMARKETPLACEUI_PARAMS;
//
// XamShowMarketplaceUI - This is a private SPI that will be called by the Dashboard
// and the public XShowMarketplaceUI to display and
// enumerate content specific to the title specified by the
// dwTitleId parameter.
//
// dwUserIndex - The index of the currently signed in user for which content
// should be displayed
// dwEntryPoint - The starting location of the Marketplace HUD UI (See the
// XSHOWMARKETPLACEUI_ENTRYPOINTS enum)
// qwOfferID - If the entry point is specific to an offer the offering
// ID needs to be provided, otherwise this can be 0.
// dwOfferType - This can be used to filter the content list by offer type.
// dwContentCategories - If the title wishes to display only certain types of
// items (i.e. cars, maps, weapons, etc), they can use
// this category bit filter.
// dwTitleId - The Title Id of the the title that the content should be
// displayed for.
//
XBOXAPI
DWORD
WINAPI
XamShowMarketplaceUI(
IN DWORD dwUserIndex,
IN DWORD dwEntryPoint,
IN ULONGLONG qwOfferID,
IN DWORD dwOfferType,
IN DWORD dwContentCategories,
IN DWORD dwTitleId
);
XBOXAPI
DWORD
WINAPI
XamShowForcedNameChangeUI(
IN DWORD dwUserIndex
);
XBOXAPI
DWORD
WINAPI
XamShowSignupCreditCardUI(
IN BYTE bOnlineCountry,
IN OUT PMP_BILLING_ACCOUNT_INFO pCreditCardInfo,
IN BOOL fParentCreditCard,
IN OUT PXOVERLAPPED pOverlapped
);
typedef struct _XSHOWDEVICESELECTORUI_PARAMS
{
DWORD dwUserIndex;
DWORD dwContentType;
DWORD dwContentFlags;
ULARGE_INTEGER uliBytesRequested;
PXCONTENTDEVICEID pDeviceID;
PXOVERLAPPED pOverlapped;
} XSHOWDEVICESELECTORUI_PARAMS, *PXSHOWDEVICESELECTORUI_PARAMS;
XBOXAPI
DWORD
WINAPI
XamShowDeviceSelectorUI(
IN DWORD dwUserIndex,
IN DWORD dwContentType,
IN DWORD dwContentFlags,
IN ULARGE_INTEGER uliBytesRequested,
OUT PXCONTENTDEVICEID pDeviceID,
IN OUT PXOVERLAPPED pOverlapped
);
//------------------------------------------------------------------------------
// Updater application APIs
//------------------------------------------------------------------------------
#define XSHOWUPDATER_UPDATESOURCE_LIVE 0x00000001
#define XSHOWUPDATER_UPDATESOURCE_GAMEDISC 0x00000002
#define XSHOWUPDATER_UPDATESOURCE_STORAGE 0x00000003
#define XSHOWUPDATER_UPDATESOURCE_CACHE 0x00000004
#define XSHOWUPDATER_UPDATESOURCEMASK 0x0000000F
#define XSHOWUPDATER_LAUNCHING_DASH 0x00000010
typedef struct _XSHOWUPDATERUI_PARAMS
{
DWORD dwUserIndex;
DWORD dwUpdateFlags;
char szUpdatePath[MAX_PATH];
XEX_EXECUTION_ID ExecutionId;
char szTitleToLaunchWhenDone[XAM_MAX_LAUNCH_PATH];
char szTitleToLaunchDDrive[XAM_MAX_LAUNCH_PATH];
} XSHOWUPDATERUI_PARAMS, *PXSHOWUPDATERUI_PARAMS;
XBOXAPI
DWORD
WINAPI
XamShowUpdaterUI(
IN DWORD dwUserIndex,
IN DWORD dwUpdateFlags,
IN LPCSTR pszUpdatePath OPTIONAL,
IN CONST XEX_EXECUTION_ID* pExecutionId OPTIONAL,
IN LPCSTR pszTitleToLaunchWhenDone OPTIONAL,
IN LPCSTR pszTitleToLaunchDDrive OPTIONAL
);
XBOXAPI
HRESULT
WINAPI
XamUpdateStart(
IN CONST CHAR* pszUpdatePath OPTIONAL,
IN DWORD dwShowUpdaterFlags,
IN CONST XEX_EXECUTION_ID* pExecutionId OPTIONAL,
IN CONST CHAR* pszTitleToLaunchWhenDone OPTIONAL,
IN CONST CHAR* pszTitleToLaunchDDrive OPTIONAL,
OUT PHANDLE phUpdate
);
XBOXAPI
HRESULT
WINAPI
XamUpdateGetProgress(
IN HANDLE hUpdate,
OUT PDWORD pdwUpdateStateId OPTIONAL,
OUT PDWORD pdwPercentComplete OPTIONAL,
OUT ULONGLONG* pqwNumerator OPTIONAL,
OUT ULONGLONG* pqwDenominator OPTIONAL
);
XBOXAPI
void
WINAPI
XamUpdateGetExtenderInstance(
IN HANDLE hUpdate,
IN CONST CHAR* szSectionName,
OUT HINSTANCE* phInstance
);
XBOXAPI
void
WINAPI
XamUpdateFinish(
IN HANDLE hUpdate
);
XBOXAPI
HRESULT
WINAPI
XamUpdateAllocateExtenderBuffer(
IN HANDLE hUpdate,
IN DWORD dwExtenderSize,
OUT BYTE** ppbBuffer
);
XBOXAPI
HRESULT
WINAPI
XamUpdateAttachExtenderInstance(
IN HANDLE hUpdate,
IN HINSTANCE hInstance
);
XBOXAPI
VOID
WINAPI
XamRestartTitleLoadAfterUpdate(
VOID
);
XBOXAPI
VOID
WINAPI
XamUIThreadDisableFontPatching(
VOID
);
XBOXAPI
VOID
WINAPI
XamUIThreadEnableFontPatching(
VOID
);
XBOXAPI
DWORD
WINAPI
XamUpdateGetBaseSystemVersion(
VOID
);
XBOXAPI
DWORD
WINAPI
XamUpdateGetCurrentSystemVersion(
VOID
);
//------------------------------------------------------------------------------
// MessageBox and Live Upsell UI APIs (both are provided by the HUD sysapp)
//------------------------------------------------------------------------------
#define MESSAGEBOX_OPTION_MESSAGEBOX 0
#define MESSAGEBOX_OPTION_LIVEUPSELL 1
#define XMB_TITLEMAX 32
#define XMB_TEXTMAX 256
#define XMB_BUTTONTEXTMAX 32
typedef struct _MESSAGEBOX_PARAMS
{
DWORD dwOption;
DWORD dwUserIndex;
WCHAR szTitle[XMB_TITLEMAX];
WCHAR szText[XMB_TEXTMAX];
DWORD cButtons;
WCHAR rgButtons[XMB_MAXBUTTONS][XMB_BUTTONTEXTMAX];
DWORD dwFocusButton;
DWORD dwFlags;
PMESSAGEBOX_RESULT pResult;
PXOVERLAPPED pOverlapped;
} MESSAGEBOX_PARAMS, *PMESSAGEBOX_PARAMS;
XBOXAPI
DWORD
WINAPI
XamShowMessageBoxUI(
IN DWORD dwUserIndex,
IN LPCWSTR pszTitle,
IN LPCWSTR pszText,
IN DWORD cButtons,
IN LPCWSTR* rgButtons,
IN DWORD dwFocusButton,
IN DWORD dwFlags,
OUT PMESSAGEBOX_RESULT pResult,
IN OUT PXOVERLAPPED pOverlapped
);
#define MESSAGEBOXEX_ID_PAL50_INCOMPATIBLE 1
XBOXAPI
DWORD
WINAPI
XamShowMessageBoxUIEx(
IN DWORD dwUserIndex,
IN LPCWSTR pszTitle,
IN LPCWSTR pszText,
IN DWORD cButtons,
IN LPCWSTR* rgButtons,
IN DWORD dwFocusButton,
IN DWORD dwFlags,
IN DWORD dwMessageID,
OUT PMESSAGEBOX_RESULT pResult,
IN OUT PXOVERLAPPED pOverlapped
);
XBOXAPI
DWORD
WINAPI
XamShowLiveUpsellUI(
VOID
);
//------------------------------------------------------------------------------
// Create Profile UI API
//------------------------------------------------------------------------------
#define XCREATEPROFILE_MODE_CREATENEW 0x00
#define XCREATEPROFILE_MODE_SIGNUP 0x01
#define XCREATEPROFILE_MODE_RECOVER 0x02
typedef struct _XCREATEPROFILEUI_PARAMS
{
DWORD dwUserIndex;
DWORD dwMode;
XUID xuid;
} XCREATEPROFILEUI_PARAMS, *PXSHOWCREATEPROFILEUI_PARAMS;
#define XENON_SIGNUP_TITLE_ID 0xFFFE07DE
XBOXAPI
DWORD
WINAPI
XamShowCreateProfileUI(
IN DWORD dwUserIndex
);
XBOXAPI
DWORD
WINAPI
XamShowLiveSignupUI(
IN DWORD dwUserIndex,
IN BOOL fRecoverAccount
);
//------------------------------------------------------------------------------
// RecentPlayers Cache APIs
//------------------------------------------------------------------------------
XBOXAPI
DWORD
WINAPI
XamUserAddRecentPlayer(
IN DWORD dwUserIndex,
IN XUID pUser,
IN DWORD dwFlags,
IN DWORD dwTitleID,
IN DWORD dwRating,
IN LPCSTR szGamertag
);
XBOXAPI
DWORD
WINAPI
XamUserUpdateRecentPlayer(
IN DWORD dwUserIndex,
IN XUID xuidUser,
IN DWORD dwFlags,
IN DWORD dwRating,
IN LPCSTR szGamertag
);
XBOXAPI
DWORD
WINAPI
XamUserCreatePlayerEnumerator(
IN DWORD dwUserIndex,
IN DWORD dwStartingIndex,
IN DWORD cItem,
OUT PDWORD pcbBuffer,
OUT PHANDLE ph
);
//------------------------------------------------------------------------------
// Error code helpers
//------------------------------------------------------------------------------
__inline
DWORD
Win32FromHRESULT(
IN HRESULT hr
)
{
DWORD dw;
if (SUCCEEDED(hr))
{
dw = ERROR_SUCCESS;
}
else if (FACILITY_WIN32 == HRESULT_FACILITY(hr))
{
dw = (hr & ~0xFFFF0000);
}
else
{
dw = ERROR_FUNCTION_FAILED;
}
return dw;
}
//------------------------------------------------------------------------------
// XN_SYS_DISCMEDIACHANGED parameter and support API
//------------------------------------------------------------------------------
#define XDISCMEDIATYPE_NONE 0
#define XDISCMEDIATYPE_GAMEDISC 1
#define XDISCMEDIATYPE_XBOXGAME 2
#define XDISCMEDIATYPE_UNKNOWN 3
#define XDISCMEDIATYPE_DVDA 4
#define XDISCMEDIATYPE_DVD 5
#define XDISCMEDIATYPE_VCD 6
#define XDISCMEDIATYPE_CDAUDIO 7
#define XDISCMEDIATYPE_CDDATA 8
#define XDISCMEDIATYPE_GAMEDVDHYBRID 9
#define MAX_TITLE_TILE 16384
#define MAX_TITLE_NAME 23 // Includes null-terminator
typedef struct _XGAMEINFO
{
DWORD dwTitleId;
WCHAR wszTitleName[MAX_TITLE_NAME];
} XGAMEINFO, *PXGAMEINFO;
HRESULT
WINAPI
XamGetGameInfo(
OUT PXGAMEINFO pGameDiscInfo
);
XBOXAPI
VOID
WINAPI
XamGetMediaInfo(
DWORD* pdwMediaType,
DWORD* pdwTitleId
);
//------------------------------------------------------------------------------
// Inactivity settings SPI
//------------------------------------------------------------------------------
#define XAMINACTIVITY_SCREENSAVER 0
#define XAMINACTIVITY_AUTOSHUTOFF 1
#define XAMINACTIVITY_COUNT 2
#define XAMSCREENSAVER_OFFVALUE 4096
#define XAMSCREENSAVER_ONVALUE 10
HRESULT
WINAPI
XamEnableInactivityProcessing(
IN DWORD InactivityIndex,
IN BOOL Enable
);
HRESULT
WINAPI
XamSetInactivityTime(
IN DWORD InactivityIndex,
IN DWORD Minutes
);
VOID
WINAPI
XamSetInactivityTimeFromConfig(
DWORD InactivityIndex
);
VOID
XamResetInactivity(
VOID
);
XBOXAPI
BOOL
WINAPI
XamIsSysUiInvokedByXenonButton(
VOID
);
XBOXAPI
BOOL
WINAPI
XamIsSysUiInvokedByTitle(
VOID
);
XBOXAPI
BOOL
WINAPI
XamIsUIActive(
VOID
);
XBOXAPI
VOID
WINAPI
XamSysUiDisableAutoClose(
BOOL fLeaveOpen
);
//------------------------------------------------------------------------------
// Power Management SPI
//------------------------------------------------------------------------------
typedef enum _XAMPOWERMODE
{
XAMPOWERMODE_QUIET = 0,
XAMPOWERMODE_FULL,
} XAMPOWERMODE, *PXAMPOWERMODE;
XBOXAPI
DWORD
WINAPI
XamSetPowerMode(
IN XAMPOWERMODE PowerMode
);
//------------------------------------------------------------------------------
// Challenge Response SPI
//------------------------------------------------------------------------------
XBOXAPI
DWORD
WINAPI
XamExecuteChallenge(
IN PBYTE Image,
IN DWORD ImageSize,
IN PBYTE Arguments,
IN DWORD ArgumentsSize,
IN PBYTE ResultBuffer,
IN DWORD ResultBufferSize
);
//-----------------------------------------------------------------------------
// Internal Utility methods that are NOT exported via DLL.
//-----------------------------------------------------------------------------
NTSTATUS
XamQuerySymbolicLink(
LPCSTR SymbolicLinkName,
LPSTR DeviceNameBuffer,
DWORD DeviceNameBufferSize
);
#ifdef __cplusplus
};
#endif
#pragma warning(pop)
#endif // __XAMP_H__