/*++ 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 #define OCQ_DEPENDENT_SELECTION 0x80000000 // // 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