1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
* Gameux library private header
*
* Copyright (C) 2010 Mariusz Pluciński
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
extern HRESULT GameExplorer_create(IUnknown* pUnkOuter, IUnknown **ppObj) DECLSPEC_HIDDEN;
extern HRESULT GameStatistics_create(IUnknown* pUnkOuter, IUnknown **ppObj) DECLSPEC_HIDDEN;
/*******************************************************************************
* Helper functions and structures
*
* These are helper function and structures, which are used widely in gameux
* implementation. Details about usage and place of implementation is
* in description of each function/structure.
*/
/*******************************************************************************
* struct GAMEUX_GAME_DATA
*
* Structure which contains data about single game. It is used to transfer
* data inside of gameux module in various places.
*/
struct GAMEUX_GAME_DATA
{
LPWSTR sGDFBinaryPath; /* path to binary containing GDF */
LPWSTR sGameInstallDirectory; /* directory passed to AddGame/InstallGame methods */
GAME_INSTALL_SCOPE installScope;/* game's installation scope */
GUID guidInstanceId; /* game installation instance identifier */
GUID guidApplicationId; /* game's application identifier */
BSTR bstrName; /* game's title */
BSTR bstrDescription; /* game's description */
};
/*******************************************************************************
* GAMEUX_FindGameInstanceId
*
* Helper function. Searches for instance identifier of given game in given
* installation scope. Implemented in gameexplorer.c
*
* Parameters:
* sGDFBinaryPath [I] path to binary containing GDF
* installScope [I] game install scope to search in
* pInstanceId [O] instance identifier of given game
*
* Returns:
* S_OK id was returned properly
* S_FALSE id was not found in the registry
* E_OUTOFMEMORY problem while memory allocation
*/
HRESULT GAMEUX_FindGameInstanceId(
LPCWSTR sGDFBinaryPath,
GAME_INSTALL_SCOPE installScope,
GUID* pInstanceId) DECLSPEC_HIDDEN;
/*******************************************************************************
* GAMEUX_buildGameRegistryPath
*
* Helper function, builds registry path to key, where game's data are stored.
* Implemented in gameexplorer.c
*
* Parameters:
* installScope [I] the scope which was used in AddGame/InstallGame call
* gameInstanceId [I] game instance GUID. If NULL, then only
* path to scope will be returned
* lpRegistryPath [O] pointer which will receive address to string
* containing expected registry path. Path
* is relative to HKLM registry key. It
* must be freed by calling HeapFree(GetProcessHeap(), 0, ...)
*
* Name of game's registry key always follows patterns below:
* When game is installed for current user only (installScope is GIS_CURRENT_USER):
* HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\
* GameUX\[user's security ID]\[game instance ID]
*
* When game is installed for all users (installScope is GIS_ALL_USERS):
* HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\
* GameUX\Games\[game instance ID]
*
*
*/
HRESULT GAMEUX_buildGameRegistryPath(GAME_INSTALL_SCOPE installScope,
LPCGUID gameInstanceId,
LPWSTR* lpRegistryPath) DECLSPEC_HIDDEN;