560 lines
14 KiB
C
560 lines
14 KiB
C
/*++
|
|
|
|
Copyright (c) 1996-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ocmanage.h
|
|
|
|
Abstract:
|
|
|
|
Public header file for Optional Component Manager.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
//
|
|
// Define type for optional component setup dll interface entry point.
|
|
// Note the strings are declared with VOID typing since we don't
|
|
// know in advance what the character width is.
|
|
//
|
|
typedef
|
|
DWORD
|
|
(*POCSETUPPROC) (
|
|
IN LPCVOID ComponentId,
|
|
IN LPCVOID SubcomponentId,
|
|
IN UINT Function,
|
|
IN UINT_PTR Param1,
|
|
IN OUT PVOID Param2
|
|
);
|
|
|
|
//
|
|
// Define interface function codes.
|
|
//
|
|
#define OC_PREINITIALIZE 0x00000000
|
|
#define OC_INIT_COMPONENT 0x00000001
|
|
#define OC_SET_LANGUAGE 0x00000002
|
|
#define OC_QUERY_IMAGE 0x00000003
|
|
#define OC_REQUEST_PAGES 0x00000004
|
|
#define OC_QUERY_CHANGE_SEL_STATE 0x00000005
|
|
#define OC_CALC_DISK_SPACE 0x00000006
|
|
#define OC_QUEUE_FILE_OPS 0x00000007
|
|
#define OC_NOTIFICATION_FROM_QUEUE 0x00000008
|
|
#define OC_QUERY_STEP_COUNT 0x00000009
|
|
#define OC_COMPLETE_INSTALLATION 0x0000000a
|
|
#define OC_CLEANUP 0x0000000b
|
|
#define OC_QUERY_STATE 0x0000000c
|
|
#define OC_NEED_MEDIA 0x0000000d
|
|
#define OC_ABOUT_TO_COMMIT_QUEUE 0x0000000e
|
|
#define OC_QUERY_SKIP_PAGE 0x0000000f
|
|
#define OC_WIZARD_CREATED 0x00000010
|
|
#define OC_FILE_BUSY 0x00000011
|
|
#define OC_EXTRA_ROUTINES 0x00000012
|
|
#define OC_QUERY_IMAGE_EX 0x00000013
|
|
|
|
#define OC_QUERY_ERROR 0x000000FF // dead
|
|
|
|
//#define OC_OSSETUP_GET_WIZARD_TITLE 0x00000400
|
|
//#define OC_OSSETUP_GET_COMPUTER_NAME 0x00000401
|
|
//#define OC_OSSETUP_GET_SERVER_TYPE 0x00000402
|
|
|
|
#define OC_PRIVATE_BASE 0x00010000
|
|
|
|
//
|
|
// Define OC Manager directory IDs, available in per-component INFs.
|
|
//
|
|
#define DIRID_OCM_MASTERINF 987654321 // full path
|
|
#define DIRID_OCM_PLATFORM 987654322 // alpha, i386, etc
|
|
#define DIRID_OCM_PLATFORM_ALTERNATE 987654323 // alpha, x86, etc
|
|
#define DIRID_OCM_COMPONENT 987654324 // component shortname
|
|
|
|
|
|
//
|
|
// Define structure used as a table of helper/callback entry points
|
|
// into the OC Manager, and the associated function prototypes.
|
|
//
|
|
typedef
|
|
VOID
|
|
(CALLBACK *PTICKGAUGE_ROUTINE) (
|
|
IN PVOID OcManagerContext
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(CALLBACK *PSETPROGRESSTEXT_ROUTINEA) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCSTR Text
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(CALLBACK *PSETPROGRESSTEXT_ROUTINEW) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCWSTR Text
|
|
);
|
|
|
|
typedef
|
|
UINT
|
|
(CALLBACK *PSETPRIVATEDATA_ROUTINEA) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCSTR Name,
|
|
IN PVOID Data,
|
|
IN UINT Size,
|
|
IN UINT Type
|
|
);
|
|
|
|
typedef
|
|
UINT
|
|
(CALLBACK *PSETPRIVATEDATA_ROUTINEW) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCWSTR Name,
|
|
IN PVOID Data,
|
|
IN UINT Size,
|
|
IN UINT Type
|
|
);
|
|
|
|
typedef
|
|
UINT
|
|
(CALLBACK *PGETPRIVATEDATA_ROUTINEA) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCSTR ComponentId,
|
|
IN LPCSTR Name,
|
|
OUT PVOID Data, OPTIONAL
|
|
IN OUT PUINT Size,
|
|
OUT PUINT Type
|
|
);
|
|
|
|
typedef
|
|
UINT
|
|
(CALLBACK *PGETPRIVATEDATA_ROUTINEW) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCWSTR ComponentId,
|
|
IN LPCWSTR Name,
|
|
OUT PVOID Data, OPTIONAL
|
|
IN OUT PUINT Size,
|
|
OUT PUINT Type
|
|
);
|
|
|
|
typedef
|
|
UINT
|
|
(CALLBACK *PSETSETUPMODE_ROUTINE) (
|
|
IN PVOID OcManagerContext,
|
|
IN DWORD SetupMode
|
|
);
|
|
|
|
typedef
|
|
UINT
|
|
(CALLBACK *PGETSETUPMODE_ROUTINE) (
|
|
IN PVOID OcManagerContext
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(CALLBACK *PQUERYSELECTIONSTATE_ROUTINEA) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCSTR SubcomponentId,
|
|
IN UINT StateType
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(CALLBACK *PQUERYSELECTIONSTATE_ROUTINEW) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCWSTR SubcomponentId,
|
|
IN UINT StateType
|
|
);
|
|
|
|
typedef
|
|
UINT
|
|
(CALLBACK *PCALLPRIVATEFUNCTION_ROUTINEA) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCSTR ComponentId,
|
|
IN LPCSTR SubcomponentId,
|
|
IN UINT Function,
|
|
IN UINT Param1,
|
|
IN OUT PVOID Param2,
|
|
OUT PUINT Result
|
|
);
|
|
|
|
typedef
|
|
UINT
|
|
(CALLBACK *PCALLPRIVATEFUNCTION_ROUTINEW) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCWSTR ComponentId,
|
|
IN LPCWSTR SubcomponentId,
|
|
IN UINT Function,
|
|
IN UINT Param1,
|
|
IN OUT PVOID Param2,
|
|
OUT PUINT Result
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(CALLBACK *PCONFIRMCANCEL_ROUTINE) (
|
|
IN HWND ParentWindow
|
|
);
|
|
|
|
typedef
|
|
HWND
|
|
(CALLBACK *PQUERYWIZARDDIALOGHANDLE_ROUTINE) (
|
|
IN PVOID OcManagerContext
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(CALLBACK *PSETREBOOT_ROUTINE) (
|
|
IN PVOID OcManagerContext,
|
|
IN BOOL Reserved
|
|
);
|
|
|
|
typedef
|
|
HINF
|
|
(CALLBACK *PGETINFHANDLE_ROUTINE) (
|
|
IN UINT InfIndex,
|
|
IN PVOID OcManagerContext
|
|
);
|
|
|
|
#define INFINDEX_UNATTENDED 1
|
|
|
|
typedef
|
|
BOOL
|
|
(__cdecl *PREPORTEXTERNALERROR_ROUTINEA) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCSTR ComponentId,
|
|
IN LPCSTR SubcomponentId, OPTIONAL
|
|
IN DWORD_PTR MessageId,
|
|
IN DWORD Flags,
|
|
...
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(__cdecl *PREPORTEXTERNALERROR_ROUTINEW) (
|
|
IN PVOID OcManagerContext,
|
|
IN LPCWSTR ComponentId,
|
|
IN LPCWSTR SubcomponentId, OPTIONAL
|
|
IN DWORD_PTR MessageId,
|
|
IN DWORD Flags,
|
|
...
|
|
);
|
|
|
|
typedef
|
|
VOID
|
|
(WINAPI *OCH_SHOWHIDEWIZARDPAGE)(
|
|
IN PVOID OcManagerContext,
|
|
IN BOOL bShow
|
|
);
|
|
|
|
#define ERRFLG_SYSTEM_MESSAGE 0x00000001
|
|
#define ERRFLG_IGNORE_INSERTS 0x00000002
|
|
#define ERRFLG_PREFORMATTED 0x00000004
|
|
|
|
typedef struct _OCMANAGER_ROUTINESA {
|
|
PVOID OcManagerContext;
|
|
PTICKGAUGE_ROUTINE TickGauge;
|
|
PSETPROGRESSTEXT_ROUTINEA SetProgressText;
|
|
PSETPRIVATEDATA_ROUTINEA SetPrivateData;
|
|
PGETPRIVATEDATA_ROUTINEA GetPrivateData;
|
|
PSETSETUPMODE_ROUTINE SetSetupMode;
|
|
PGETSETUPMODE_ROUTINE GetSetupMode;
|
|
PQUERYSELECTIONSTATE_ROUTINEA QuerySelectionState;
|
|
PCALLPRIVATEFUNCTION_ROUTINEA CallPrivateFunction;
|
|
PCONFIRMCANCEL_ROUTINE ConfirmCancelRoutine;
|
|
PQUERYWIZARDDIALOGHANDLE_ROUTINE QueryWizardDialogHandle;
|
|
PSETREBOOT_ROUTINE SetReboot;
|
|
PGETINFHANDLE_ROUTINE GetInfHandle;
|
|
PREPORTEXTERNALERROR_ROUTINEA ReportExternalError;
|
|
OCH_SHOWHIDEWIZARDPAGE ShowHideWizardPage;
|
|
} OCMANAGER_ROUTINESA, *POCMANAGER_ROUTINESA;
|
|
|
|
typedef struct _OCMANAGER_ROUTINESW {
|
|
PVOID OcManagerContext;
|
|
PTICKGAUGE_ROUTINE TickGauge;
|
|
PSETPROGRESSTEXT_ROUTINEW SetProgressText;
|
|
PSETPRIVATEDATA_ROUTINEW SetPrivateData;
|
|
PGETPRIVATEDATA_ROUTINEW GetPrivateData;
|
|
PSETSETUPMODE_ROUTINE SetSetupMode;
|
|
PGETSETUPMODE_ROUTINE GetSetupMode;
|
|
PQUERYSELECTIONSTATE_ROUTINEW QuerySelectionState;
|
|
PCALLPRIVATEFUNCTION_ROUTINEW CallPrivateFunction;
|
|
PCONFIRMCANCEL_ROUTINE ConfirmCancelRoutine;
|
|
PQUERYWIZARDDIALOGHANDLE_ROUTINE QueryWizardDialogHandle;
|
|
PSETREBOOT_ROUTINE SetReboot;
|
|
PGETINFHANDLE_ROUTINE GetInfHandle;
|
|
PREPORTEXTERNALERROR_ROUTINEW ReportExternalError;
|
|
OCH_SHOWHIDEWIZARDPAGE ShowHideWizardPage;
|
|
} OCMANAGER_ROUTINESW, *POCMANAGER_ROUTINESW;
|
|
|
|
#ifdef UNICODE
|
|
typedef OCMANAGER_ROUTINESW OCMANAGER_ROUTINES;
|
|
typedef POCMANAGER_ROUTINESW POCMANAGER_ROUTINES;
|
|
#else
|
|
typedef OCMANAGER_ROUTINESA OCMANAGER_ROUTINES;
|
|
typedef POCMANAGER_ROUTINESA POCMANAGER_ROUTINES;
|
|
#endif
|
|
|
|
typedef
|
|
BOOL
|
|
(__cdecl *PLOGERROR_ROUTINEA) (
|
|
IN PVOID OcManagerContext,
|
|
IN DWORD ErrorLevel,
|
|
IN LPCSTR Msg,
|
|
...
|
|
);
|
|
|
|
typedef
|
|
BOOL
|
|
(__cdecl *PLOGERROR_ROUTINEW) (
|
|
IN PVOID OcManagerContext,
|
|
IN DWORD ErrorLevel,
|
|
IN LPCWSTR Msg,
|
|
...
|
|
);
|
|
|
|
typedef struct _EXTRA_ROUTINESA {
|
|
DWORD size;
|
|
PLOGERROR_ROUTINEA LogError;
|
|
} EXTRA_ROUTINESA, *PEXTRA_ROUTINESA;
|
|
|
|
typedef struct _EXTRA_ROUTINESW {
|
|
DWORD size;
|
|
PLOGERROR_ROUTINEW LogError;
|
|
} EXTRA_ROUTINESW, *PEXTRA_ROUTINESW;
|
|
|
|
#ifdef UNICODE
|
|
typedef EXTRA_ROUTINESW EXTRA_ROUTINES;
|
|
typedef PEXTRA_ROUTINESW PEXTRA_ROUTINES;
|
|
#else
|
|
typedef EXTRA_ROUTINESA EXTRA_ROUTINES;
|
|
typedef PEXTRA_ROUTINESA PEXTRA_ROUTINES;
|
|
#endif
|
|
|
|
|
|
// for error handler
|
|
|
|
typedef enum {
|
|
OcErrLevInfo = 0x00000000,
|
|
OcErrLevWarning = 0x01000000,
|
|
OcErrLevError = 0x02000000,
|
|
OcErrLevFatal = 0x03000000,
|
|
OcErrLevMax = 0x04000000,
|
|
OcErrBatch = 0x10000000,
|
|
OcErrMask = 0xFF000000
|
|
} OcErrorLevel;
|
|
|
|
//
|
|
// Flags.
|
|
//
|
|
#define OCFLAG_UNICODE 0x00000001
|
|
#define OCFLAG_ANSI 0x00000002
|
|
|
|
//
|
|
// master component flags
|
|
//
|
|
#define OCFLAG_NOWIZPAGES 0x00000001
|
|
#define OCFLAG_NOQUERYSKIP 0x00000002
|
|
#define OCFLAG_NOEXTRAFLAGS 0x00000004
|
|
|
|
//
|
|
// Selection state types (for QuerySelectionState and OC_QUERY_STATE).
|
|
//
|
|
#define OCSELSTATETYPE_ORIGINAL 0
|
|
#define OCSELSTATETYPE_CURRENT 1
|
|
#define OCSELSTATETYPE_FINAL 2
|
|
|
|
//
|
|
// Setup data structure. Passed within a SETUP_INIT_COMPONENT structure
|
|
// as OC_INIT_COMPONENT time.
|
|
//
|
|
typedef struct _SETUP_DATAA {
|
|
DWORD SetupMode;
|
|
DWORD ProductType;
|
|
DWORDLONG OperationFlags;
|
|
CHAR SourcePath[MAX_PATH];
|
|
CHAR UnattendFile[MAX_PATH];
|
|
} SETUP_DATAA, *PSETUP_DATAA;
|
|
|
|
typedef struct _SETUP_DATAW {
|
|
DWORD SetupMode;
|
|
DWORD ProductType;
|
|
DWORDLONG OperationFlags;
|
|
WCHAR SourcePath[MAX_PATH];
|
|
WCHAR UnattendFile[MAX_PATH];
|
|
} SETUP_DATAW, *PSETUP_DATAW;
|
|
|
|
#ifdef UNICODE
|
|
typedef SETUP_DATAW SETUP_DATA;
|
|
typedef PSETUP_DATAW PSETUP_DATA;
|
|
#else
|
|
typedef SETUP_DATAA SETUP_DATA;
|
|
typedef PSETUP_DATAA PSETUP_DATA;
|
|
#endif
|
|
|
|
|
|
//
|
|
// Values for SetupMode
|
|
//
|
|
#define SETUPMODE_UNKNOWN (-1)
|
|
#define SETUPMODE_MINIMAL 0
|
|
#define SETUPMODE_TYPICAL 1
|
|
#define SETUPMODE_LAPTOP 2
|
|
#define SETUPMODE_CUSTOM 3
|
|
|
|
#define SETUPMODE_PRIVATE(x) ((x) & SETUPMODE_PRIVATE_MASK)
|
|
|
|
//
|
|
// Predefined upgrade modes
|
|
//
|
|
#define SETUPMODE_UPGRADEONLY 0x20000100
|
|
#define SETUPMODE_ADDEXTRACOMPS 0x20000200
|
|
|
|
//
|
|
// Predefined mainteance modes
|
|
//
|
|
#define SETUPMODE_ADDREMOVE 0x10000100
|
|
#define SETUPMODE_REINSTALL 0x10000200
|
|
#define SETUPMODE_REMOVEALL 0x10000400
|
|
|
|
//
|
|
// Predefined fresh modes
|
|
//
|
|
#define SETUPMODE_FRESH 0x00000000
|
|
#define SETUPMODE_MAINTENANCE 0x10000000
|
|
#define SETUPMODE_UPGRADE 0x20000000
|
|
|
|
#define SETUPMODE_STANDARD_MASK 0x000000ff
|
|
#define SETUPMODE_PRIVATE_MASK 0xffffff00
|
|
//
|
|
// Flag for NeedMedia Callback, Ored in to
|
|
// Return code to allow NeedMedia to return
|
|
// FILEOP_ Return Codes
|
|
//
|
|
#define NEEDMEDIA_USEFILEOP 0x80000000
|
|
|
|
|
|
//
|
|
// Values for ProductType. Notice careful definitions
|
|
// such that low bit on means some kind of DC.
|
|
//
|
|
#define PRODUCT_WORKSTATION 0
|
|
#define PRODUCT_SERVER_PRIMARY 1
|
|
#define PRODUCT_SERVER_STANDALONE 2
|
|
#define PRODUCT_SERVER_SECONDARY 3
|
|
|
|
//
|
|
// Bit flags for OperationFlags. Note that this is a 64-bit field.
|
|
//
|
|
#define SETUPOP_WIN31UPGRADE 0x0000000000000001
|
|
#define SETUPOP_WIN95UPGRADE 0x0000000000000002
|
|
#define SETUPOP_NTUPGRADE 0x0000000000000004
|
|
#define SETUPOP_BATCH 0x0000000000000008
|
|
#define SETUPOP_STANDALONE 0x0000000000000010
|
|
#define SETUPOP_AMD64_FILES_AVAIL 0x0000000100000000
|
|
#define SETUPOP_OBSOLETE1_FILES_AVAIL 0x0000000200000000
|
|
#define SETUPOP_OBSOLETE2_FILES_AVAIL 0x0000000400000000
|
|
#define SETUPOP_X86_FILES_AVAIL 0x0000000800000000
|
|
#define SETUPOP_IA64_FILES_AVAIL 0x0000001000000000
|
|
|
|
|
|
//
|
|
// Component initialization structure, passed at OC_INIT_COMPONENT time.
|
|
//
|
|
typedef struct _SETUP_INIT_COMPONENTA {
|
|
UINT OCManagerVersion;
|
|
UINT ComponentVersion;
|
|
HINF OCInfHandle;
|
|
HINF ComponentInfHandle;
|
|
SETUP_DATAA SetupData;
|
|
OCMANAGER_ROUTINESA HelperRoutines;
|
|
} SETUP_INIT_COMPONENTA, *PSETUP_INIT_COMPONENTA;
|
|
|
|
typedef struct _SETUP_INIT_COMPONENTW {
|
|
UINT OCManagerVersion;
|
|
UINT ComponentVersion;
|
|
HINF OCInfHandle;
|
|
HINF ComponentInfHandle;
|
|
SETUP_DATAW SetupData;
|
|
OCMANAGER_ROUTINESW HelperRoutines;
|
|
} SETUP_INIT_COMPONENTW, *PSETUP_INIT_COMPONENTW;
|
|
|
|
#ifdef UNICODE
|
|
typedef SETUP_INIT_COMPONENTW SETUP_INIT_COMPONENT;
|
|
typedef PSETUP_INIT_COMPONENTW PSETUP_INIT_COMPONENT;
|
|
#else
|
|
typedef SETUP_INIT_COMPONENTA SETUP_INIT_COMPONENT;
|
|
typedef PSETUP_INIT_COMPONENTA PSETUP_INIT_COMPONENT;
|
|
#endif
|
|
|
|
//
|
|
// Current OC Manager version, major and minor.
|
|
//
|
|
#define OCVER_MAJOR 5
|
|
#define OCVER_MINOR 0
|
|
|
|
#define OCMANAGER_VERSION ((DWORD)MAKELONG(OCVER_MINOR,OCVER_MAJOR))
|
|
|
|
//
|
|
// Wizard page request structure, used with OC_REQUEST_PAGES.
|
|
//
|
|
typedef struct _SETUP_REQUEST_PAGES {
|
|
UINT MaxPages;
|
|
HPROPSHEETPAGE Pages[ANYSIZE_ARRAY];
|
|
} SETUP_REQUEST_PAGES, *PSETUP_REQUEST_PAGES;
|
|
|
|
|
|
//
|
|
// Flags used in Param2 of OC_QUERY_CHANGE_SEL_STATE notification
|
|
//
|
|
#define OCQ_ACTUAL_SELECTION 0x00000001
|
|
|
|
|
|
//
|
|
// Enumerated types.
|
|
//
|
|
|
|
typedef enum {
|
|
SubCompInfoSmallIcon, // the small icon associated with the subcomponent
|
|
SubCompInfoWatermark // the watermark image at the top of the wizard
|
|
} SubComponentInfo;
|
|
|
|
typedef struct _OC_QUERY_IMAGE_INFO {
|
|
DWORD SizeOfStruct;
|
|
SubComponentInfo ComponentInfo;
|
|
UINT DesiredWidth;
|
|
UINT DesiredHeight;
|
|
} OC_QUERY_IMAGE_INFO, *POC_QUERY_IMAGE_INFO;
|
|
|
|
|
|
typedef enum {
|
|
WizPagesWelcome, // welcome page
|
|
WizPagesMode, // setup mode page
|
|
WizPagesEarly, // pages that come after the mode page and before prenet pages
|
|
WizPagesPrenet, // pages that come before network setup
|
|
WizPagesPostnet, // pages that come after network setup
|
|
WizPagesLate, // pages that come after postnet pages and before the final page
|
|
WizPagesFinal, // final page
|
|
WizPagesTypeMax
|
|
} WizardPagesType;
|
|
|
|
typedef enum {
|
|
SubcompUseOcManagerDefault,
|
|
SubcompOn,
|
|
SubcompOff
|
|
} SubComponentState;
|
|
|
|
typedef enum {
|
|
OcPageComponentHierarchy,
|
|
OcPageMax
|
|
} OcManagerPage;
|
|
|
|
|
|
// use the assert from SetupAPI
|
|
#define sapiAssert MYASSERT
|
|
|
|
|