2 * Common prototypes for Action handlers
4 * Copyright 2005 Aric Stewart for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #define IDENTIFIER_SIZE 96
23 typedef struct tagMSIFEATURE
25 WCHAR Feature[IDENTIFIER_SIZE];
26 WCHAR Feature_Parent[IDENTIFIER_SIZE];
28 WCHAR Description[0x100];
31 WCHAR Directory[IDENTIFIER_SIZE];
34 INSTALLSTATE Installed;
35 INSTALLSTATE ActionRequest;
39 INT Components[1024]; /* yes hardcoded limit.... I am bad */
43 typedef struct tagMSICOMPONENT
45 WCHAR Component[IDENTIFIER_SIZE];
46 WCHAR ComponentId[IDENTIFIER_SIZE];
47 WCHAR Directory[IDENTIFIER_SIZE];
49 WCHAR Condition[0x100];
50 WCHAR KeyPath[IDENTIFIER_SIZE];
52 INSTALLSTATE Installed;
53 INSTALLSTATE ActionRequest;
61 LPWSTR AdvertiseString;
64 typedef struct tagMSIFOLDER
70 LPWSTR ResolvedTarget;
71 LPWSTR ResolvedSource;
72 LPWSTR Property; /* initially set property */
75 /* 0 = uninitialized */
77 /* 2 = created remove if empty */
78 /* 3 = created persist if empty */
83 typedef struct tagMSIFILE
96 /* 0 = uninitialize */
98 /* 2 = present but replace */
99 /* 3 = present do not replace */
106 typedef struct tagMSICLASS
108 WCHAR CLSID[IDENTIFIER_SIZE]; /* Primary Key */
109 WCHAR Context[IDENTIFIER_SIZE]; /* Primary Key */
110 INT ComponentIndex; /* Primary Key */
117 LPWSTR DefInprocHandler;
118 LPWSTR DefInprocHandler32;
122 /* not in the table, set during installation */
126 typedef struct tagMSIEXTENSION
128 WCHAR Extension[256]; /* Primary Key */
129 INT ComponentIndex; /* Primary Key */
134 /* not in the table, set during installation */
137 INT Verbs[100]; /* yes hard coded limit, but realistically 100 verbs??? */
140 typedef struct tagMSIPROGID
142 LPWSTR ProgID; /* Primary Key */
147 /* not in the table, set during installation */
153 typedef struct tagMSIVERB
162 typedef struct tagMSIMIME
164 LPWSTR ContentType; /* Primary Key */
166 WCHAR CLSID[IDENTIFIER_SIZE];
168 /* not in the table, set during installation */
172 typedef struct tagMSIAPPID
174 WCHAR AppID[IDENTIFIER_SIZE]; /* Primary key */
175 LPWSTR RemoteServerName;
177 LPWSTR ServiceParameters;
179 BOOL ActivateAtStorage;
180 BOOL RunAsInteractiveUser;
190 typedef struct tagMSISCRIPT
192 LPWSTR *Actions[TOTAL_SCRIPTS];
193 UINT ActionCount[TOTAL_SCRIPTS];
194 BOOL ExecuteSequenceRun;
195 BOOL CurrentlyScripting;
199 UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, BOOL force);
200 UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action);
201 void ACTION_FinishCustomActions( MSIPACKAGE* package);
202 UINT ACTION_CustomAction(MSIPACKAGE *package,const WCHAR *action, BOOL execute);
203 void ACTION_UpdateComponentStates(MSIPACKAGE *package, LPCWSTR szFeature);
204 UINT ACTION_AppSearch(MSIPACKAGE *package);
206 DWORD deformat_string(MSIPACKAGE *package, LPCWSTR ptr, WCHAR** data );
207 WCHAR *load_dynamic_stringW(MSIRECORD *row, INT index);
208 LPWSTR load_dynamic_property(MSIPACKAGE *package, LPCWSTR prop, UINT* rc);
209 LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
210 BOOL set_prop, MSIFOLDER **folder);
211 int get_loaded_component(MSIPACKAGE* package, LPCWSTR Component );
212 int get_loaded_feature(MSIPACKAGE* package, LPCWSTR Feature );
213 int get_loaded_file(MSIPACKAGE* package, LPCWSTR file);
214 int track_tempfile(MSIPACKAGE *package, LPCWSTR name, LPCWSTR path);
215 UINT schedule_action(MSIPACKAGE *package, UINT script, LPCWSTR action);
217 /* control event stuff */
218 VOID ControlEvent_FireSubscribedEvent(MSIPACKAGE *package, LPCWSTR event,
220 VOID ControlEvent_CleanupSubscriptions(MSIPACKAGE *package);
221 VOID ControlEvent_SubscribeToEvent(MSIPACKAGE *package, LPCWSTR event,
222 LPCWSTR control, LPCWSTR attribute);