Commit 6f43c18f authored by Aric Stewart's avatar Aric Stewart Committed by Alexandre Julliard

A big rewrite of the whole RegisterClass, RegisterProgId,

RegisterExtension and RegisterMIME actions. We now handle verbs properly, handle dependancies and such properly and keep track of what we need to register and what we do not properly.
parent 426984dd
...@@ -18,15 +18,17 @@ ...@@ -18,15 +18,17 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#define IDENTIFIER_SIZE 96
typedef struct tagMSIFEATURE typedef struct tagMSIFEATURE
{ {
WCHAR Feature[96]; WCHAR Feature[IDENTIFIER_SIZE];
WCHAR Feature_Parent[96]; WCHAR Feature_Parent[IDENTIFIER_SIZE];
WCHAR Title[0x100]; WCHAR Title[0x100];
WCHAR Description[0x100]; WCHAR Description[0x100];
INT Display; INT Display;
INT Level; INT Level;
WCHAR Directory[96]; WCHAR Directory[IDENTIFIER_SIZE];
INT Attributes; INT Attributes;
INSTALLSTATE Installed; INSTALLSTATE Installed;
...@@ -40,12 +42,12 @@ typedef struct tagMSIFEATURE ...@@ -40,12 +42,12 @@ typedef struct tagMSIFEATURE
typedef struct tagMSICOMPONENT typedef struct tagMSICOMPONENT
{ {
WCHAR Component[96]; WCHAR Component[IDENTIFIER_SIZE];
WCHAR ComponentId[96]; WCHAR ComponentId[IDENTIFIER_SIZE];
WCHAR Directory[96]; WCHAR Directory[IDENTIFIER_SIZE];
INT Attributes; INT Attributes;
WCHAR Condition[0x100]; WCHAR Condition[0x100];
WCHAR KeyPath[96]; WCHAR KeyPath[IDENTIFIER_SIZE];
INSTALLSTATE Installed; INSTALLSTATE Installed;
INSTALLSTATE ActionRequest; INSTALLSTATE ActionRequest;
...@@ -56,6 +58,7 @@ typedef struct tagMSICOMPONENT ...@@ -56,6 +58,7 @@ typedef struct tagMSICOMPONENT
INT RefCount; INT RefCount;
LPWSTR FullKeypath; LPWSTR FullKeypath;
LPWSTR AdvertiseString;
} MSICOMPONENT; } MSICOMPONENT;
typedef struct tagMSIFOLDER typedef struct tagMSIFOLDER
...@@ -100,6 +103,81 @@ typedef struct tagMSIFILE ...@@ -100,6 +103,81 @@ typedef struct tagMSIFILE
BOOL Temporary; BOOL Temporary;
}MSIFILE; }MSIFILE;
typedef struct tagMSICLASS
{
WCHAR CLSID[IDENTIFIER_SIZE]; /* Primary Key */
WCHAR Context[IDENTIFIER_SIZE]; /* Primary Key */
INT ComponentIndex; /* Primary Key */
INT ProgIDIndex;
LPWSTR ProgIDText;
LPWSTR Description;
INT AppIDIndex;
LPWSTR FileTypeMask;
LPWSTR IconPath;
LPWSTR DefInprocHandler;
LPWSTR DefInprocHandler32;
LPWSTR Argument;
INT FeatureIndex;
INT Attributes;
/* not in the table, set during instalation */
BOOL Installed;
} MSICLASS;
typedef struct tagMSIEXTENSION
{
WCHAR Extension[256]; /* Primary Key */
INT ComponentIndex; /* Primary Key */
INT ProgIDIndex;
LPWSTR ProgIDText;
INT MIMEIndex;
INT FeatureIndex;
/* not in the table, set during instalation */
BOOL Installed;
INT VerbCount;
INT Verbs[100]; /* yes hard coded limit, but relisticly 100 verbs??? */
} MSIEXTENSION;
typedef struct tagMSIPROGID
{
LPWSTR ProgID; /* Primary Key */
INT ParentIndex;
INT ClassIndex;
LPWSTR Description;
LPWSTR IconPath;
/* not in the table, set during instalation */
BOOL InstallMe;
} MSIPROGID;
typedef struct tagMSIVERB
{
INT ExtensionIndex;
LPWSTR Verb;
INT Sequence;
LPWSTR Command;
LPWSTR Argument;
} MSIVERB;
typedef struct tagMSIMIME
{
LPWSTR ContentType; /* Primary Key */
INT ExtensionIndex;
WCHAR CLSID[IDENTIFIER_SIZE];
INT ClassIndex;
/* not in the table, set during instalation */
BOOL InstallMe;
} MSIMIME;
typedef struct tagMSIAPPID
{
WCHAR AppID[IDENTIFIER_SIZE]; /* Primary key */
LPWSTR RemoteServerName;
LPWSTR LocalServer;
LPWSTR ServiceParameters;
LPWSTR DllSurrogate;
BOOL ActivateAtStorage;
BOOL RunAsInteractiveUser;
} MSIAPPID;
UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action); UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action);
UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action); UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action);
......
...@@ -197,6 +197,19 @@ typedef struct tagMSIPACKAGE ...@@ -197,6 +197,19 @@ typedef struct tagMSIPACKAGE
LPWSTR ActionFormat; LPWSTR ActionFormat;
LPWSTR LastAction; LPWSTR LastAction;
struct tagMSICLASS *classes;
UINT loaded_classes;
struct tagMSIEXTENSION *extensions;
UINT loaded_extensions;
struct tagMSIPROGID *progids;
UINT loaded_progids;
struct tagMSIVERB *verbs;
UINT loaded_verbs;
struct tagMSIMIME *mimes;
UINT loaded_mimes;
struct tagMSIAPPID *appids;
UINT loaded_appids;
LPWSTR *DeferredAction; LPWSTR *DeferredAction;
UINT DeferredActionCount; UINT DeferredActionCount;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment