/*++

Copyright (c) 1997 Microsoft Corporation

Module Name:

    migdbp.h

Abstract:

    Header file for implementing old AppDb functionality

Author:

    Calin Negreanu (calinn) 07-Ian-1998

Revision History:

    <alias> <date> <comments>

--*/

#include <cpl.h>
#include "dbattrib.h"

extern INT g_RegKeyPresentIndex;
extern HASHTABLE g_PerUserRegKeys;

typedef struct _MIGDB_REQ_FILE;

typedef struct _MIGDB_CONTEXT;

typedef struct _MIGDB_SECTION {
    BOOL    Satisfied;
    struct _MIGDB_CONTEXT *Context;
    struct _MIGDB_SECTION *Next;
} MIGDB_SECTION, *PMIGDB_SECTION;

typedef struct _MIGDB_CONTEXT {
    INT     ActionIndex;
    UINT    TriggerCount;
    BOOL    VirtualFile;
    PCSTR   SectName;
    PCSTR   SectLocalizedName;
    PCSTR   SectNameForDisplay;     // SectLocalizedName, or SectName if not localized
    PCSTR   Message;
    PCSTR   Arguments;
    GROWBUFFER FileList;
    PMIGDB_SECTION Sections;
    struct _MIGDB_CONTEXT *Next;
} MIGDB_CONTEXT, *PMIGDB_CONTEXT;

typedef struct _MIGDB_FILE {
    PMIGDB_SECTION Section;
    PMIGDB_ATTRIB  Attributes;
    struct _MIGDB_FILE *Next;
} MIGDB_FILE, *PMIGDB_FILE;

typedef struct _MIGDB_REQ_FILE {
    PCSTR   ReqFilePath;
    PMIGDB_ATTRIB FileAttribs;
    struct _MIGDB_REQ_FILE *Next;
} MIGDB_REQ_FILE, *PMIGDB_REQ_FILE;

typedef struct {
    PMIGDB_FILE First;
    PMIGDB_FILE Last;
} FILE_LIST_STRUCT, *PFILE_LIST_STRUCT;


//
// Declare the action functions prototype
//
typedef BOOL (ACTION_PROTOTYPE) (PMIGDB_CONTEXT Context);
typedef ACTION_PROTOTYPE * PACTION_PROTOTYPE;

//
// Declare MigDb hook function prototype
//
typedef BOOL (MIGDB_HOOK_PROTOTYPE) (PCSTR FileName, PMIGDB_CONTEXT Context, PMIGDB_SECTION Section, PMIGDB_FILE File, PMIGDB_ATTRIB Attrib);
typedef MIGDB_HOOK_PROTOTYPE * PMIGDB_HOOK_PROTOTYPE;


extern  HINF            g_MigDbInf;
extern  BOOL            g_InAnyDir;


PACTION_PROTOTYPE
MigDb_GetActionAddr (
    IN      INT ActionIdx
    );

INT
MigDb_GetActionIdx (
    IN      PCSTR ActionStr
    );

PCSTR
MigDb_GetActionName (
    IN      INT ActionIdx
    );

BOOL
MigDb_CallWhenTriggered (
    IN      INT ActionIdx
    );

BOOL
MigDb_CanHandleVirtualFiles (
    IN      INT ActionIdx
    );

BOOL
MigDb_CallAlways (
    IN      INT ActionIdx
    );

PMIGDB_HOOK_PROTOTYPE
SetMigDbHook (
    PMIGDB_HOOK_PROTOTYPE HookFunction
    );


PSTR
QueryVersionEntry (
    IN      PCSTR FileName,
    IN      PCSTR VersionEntry
    );

UINT
ComputeCheckSum (
    PFILE_HELPER_PARAMS Params
    );

#define UNKNOWN_MODULE  0
#define DOS_MODULE      1
#define W16_MODULE      2
#define W32_MODULE      3

DWORD
GetModuleType (
    IN      PCSTR ModuleName
    );


PCSTR
Get16ModuleDescription (
    IN      PCSTR ModuleName
    );

ULONG
GetPECheckSum (
    IN      PCSTR ModuleName
    );

BOOL
DeleteFileWithWarning (
    IN      PCTSTR FileName
    );


PSTR
GetHlpFileTitle (
    IN PCSTR FileName
    );


BOOL
ReportControlPanelApplet (
    IN      PCTSTR FileName,
    IN      PMIGDB_CONTEXT Context,         OPTIONAL
    IN      DWORD ActType
    );

BOOL
IsDisplayableCPL (
    IN      PCTSTR FileName
    );

ULONGLONG
GetBinFileVer (
    IN      PCSTR FileName
    );

ULONGLONG
GetBinProductVer (
    IN      PCSTR FileName
    );

DWORD
GetFileDateHi (
    IN      PCSTR FileName
    );

DWORD
GetFileDateLo (
    IN      PCSTR FileName
    );

DWORD
GetFileVerOs (
    IN      PCSTR FileName
    );

DWORD
GetFileVerType (
    IN      PCSTR FileName
    );

BOOL
GlobalVersionCheck (
    IN      PCSTR FileName,
    IN      PCSTR NameToCheck,
    IN      PCSTR ValueToCheck
    );