Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

374 lines
11 KiB

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
factoryp.h
Abstract:
Private top-level header file for Factory Pre-install module.
Author:
Donald McNamara (donaldm) 2/8/2000
Revision History:
- Added exported prototypes from preinstall.c: Jason Lawrence (t-jasonl) 6/7/2000
- Added DeleteTree() prototype: Jason Lawrence (t-jasonl) 6/7/2000
- Added additional prototypes from misc.c and log.c: Jason Lawrence (t-jasonl) 6/14/2000
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <ntpoapi.h>
#include <windows.h>
#include <tchar.h>
#include <stdlib.h>
#include <lmcons.h>
#include <lmerr.h>
#include <lmjoin.h>
#include <commctrl.h>
#include <setupapi.h>
#include <shlwapi.h>
#include <cfgmgr32.h>
#include <devguid.h>
#include <lmuse.h>
#include <msi.h>
#include <msiquery.h>
#include <regstr.h>
#include <limits.h>
#include <powrprof.h>
#include <syssetup.h>
#include <opklib.h> // OPK common functions
#include <strsafe.h>
#include <ntverp.h>
#include "msg.h"
#include "res.h"
#include "winbom.h"
#include "status.h"
//
// Defined Value(s):
//
// Flags for Logging
//
// Some of these flags are also defined in opklib.h. ( Planning to use opklib for all logging in the future. )
//
#define LOG_DEBUG 0x00000003 // Only log in debug builds if this is specified. (Debug Level for logging.)
#define LOG_LEVEL_MASK 0x0000000F // Mask to only show the log level bits
#define LOG_MSG_BOX 0x00000010 // Display the message boxes if this is enabled.
#define LOG_ERR 0x00000020 // Prefix the logged string with "Error:" if the message is level 0,
// or "WARNx" if the message is at level x > 0.
#define LOG_TIME 0x00000040 // Display time if this is enabled
#define LOG_NO_NL 0x00000080 // Don't add new Line to the end of log string if this is set.
// Other factory flags
//
#define FLAG_STOP_ON_ERROR 0x00000001 // Stop on error. We should not really use this.
#define FLAG_QUIET_MODE 0x00000002 // Quiet mode: do not display any message boxes.
#define FLAG_IA64_MODE 0x00000004 // Set if factory is running on an Itanium machine.
#define FLAG_LOG_PERF 0x00000008 // If set, log how long each state takes to run.
#define FLAG_PNP_DONE 0x00000010 // If set, we know for sure that pnp is done.
#define FLAG_PNP_STARTED 0x00000020 // If set, we have already started pnp.
#define FLAG_LOGGEDON 0x00000040 // Only set when we are logged in.
#define FLAG_NOUI 0x00000080 // Set if we don't want to show any UI in factory.
#define FLAG_OOBE 0x00000100 // Set if we are launched from OOBE.
// Flags for the STATE structure.
//
#define FLAG_STATE_NONE 0x00000000
#define FLAG_STATE_ONETIME 0x00000001 // Set if this state should only be executed once, not for every boot.
#define FLAG_STATE_NOTONSERVER 0x00000002 // Set if this state should not run on server SKUs.
#define FLAG_STATE_QUITONERR 0x00000004 // Set if no other states should run if this state fails.
#define FLAG_STATE_DISPLAYED 0x00000008 // Set only at run time, and only if the item is displayed in the status window.
#define ALWAYS DisplayAlways
#define NEVER NULL
// Log files.
//
#define WINBOM_LOGFILE _T("WINBOM.LOG")
// Registry strings.
//
#define REG_FACTORY_STATE _T("SOFTWARE\\Microsoft\\Factory\\State") // Registry path for the factory states.
// Extra debug Logging.
//
#ifdef DBG
#define DBGLOG FacLogFileStr
#else // DBG
#define DBGLOG
#endif // DBG
//
// Defined Macro(s):
//
//
// Type Definition(s):
//
typedef enum _FACTMODE
{
modeUnknown,
modeSetup,
modeMiniNt,
modeWinPe,
modeLogon,
modeOobe,
} FACTMODE, *PFACTMODE, *LPFACTMODE;
typedef enum _STATE
{
stateUnknown,
stateStart,
stateComputerName,
stateSetupNetwork,
stateUpdateDrivers,
stateInstallDrivers,
stateNormalPnP,
stateWaitPnP,
stateWaitPnP2,
stateSetDisplay,
stateSetDisplay2,
stateOptShell,
stateAutoLogon,
stateLogon,
stateUserIdent,
stateInfInstall,
statePidPopulate,
stateOCManager,
stateOemRunOnce,
stateOemRun,
stateReseal,
statePartitionFormat,
stateCopyFiles,
stateStartMenuMFU,
stateSetDefaultApps,
stateOemData,
stateSetPowerOptions,
stateSetFontOptions,
stateShellSettings,
stateShellSettings2,
stateHomeNet,
stateExtendPart,
stateResetSource,
stateTestCert,
stateSlpFiles,
stateWinpeReboot,
stateWinpeNet,
stateCreatePageFile,
stateFinish,
} STATE;
typedef struct _STATEDATA
{
LPTSTR lpszWinBOMPath;
STATE state;
BOOL bQuit;
} STATEDATA, *PSTATEDATA, *LPSTATEDATA;
typedef BOOL (WINAPI *STATEFUNC)(LPSTATEDATA);
typedef struct _STATES
{
STATE state; // State number.
STATEFUNC statefunc; // Function to call for this state.
STATEFUNC displayfunc; // Function that decides if this state is displayed or not.
INT nFriendlyName; // Resource ID of the name to be displayed in the log and UI for this state.
DWORD dwFlags; // Any flags for the state.
} STATES, *PSTATES, *LPSTATES;
//
// Function Prototype(s):
//
BOOL CheckParams(LPSTR lpCmdLine);
INT_PTR FactoryPreinstallDlgProc(HWND, UINT, WPARAM, LPARAM);
// In WINBOM.C:
//
BOOL ProcessWinBOM(LPTSTR lpszWinBOMPath, LPSTATES lpStates, DWORD cbStates);
BOOL DisplayAlways(LPSTATEDATA lpStateData);
// From MISC.C
TCHAR GetDriveLetter(UINT uDriveType);
BOOL ComputerName(LPSTATEDATA lpStateData);
BOOL DisplayComputerName(LPSTATEDATA lpStateData);
BOOL Reseal(LPSTATEDATA lpStateData);
BOOL DisplayReseal(LPSTATEDATA lpStateData);
// From PNPDRIVERS.C:
//
BOOL StartPnP();
BOOL WaitForPnp(DWORD dwTimeOut);
BOOL UpdateDrivers(LPSTATEDATA lpStateData);
BOOL DisplayUpdateDrivers(LPSTATEDATA lpStateData);
BOOL InstallDrivers(LPSTATEDATA lpStateData);
BOOL DisplayInstallDrivers(LPSTATEDATA lpStateData);
BOOL NormalPnP(LPSTATEDATA lpStateData);
BOOL DisplayWaitPnP(LPSTATEDATA lpStateData);
BOOL WaitPnP(LPSTATEDATA lpStateData);
BOOL SetDisplay(LPSTATEDATA lpStateData);
// From Net.c
BOOL InstallNetworkCard(PWSTR pszWinBOMPath, BOOL bForceIDScan);
BOOL SetupNetwork(LPSTATEDATA lpStateData);
NTSTATUS ForceNetbtRegistryRead(VOID);
// From mini.c
BOOL SetupMiniNT(VOID);
BOOL PartitionFormat(LPSTATEDATA lpStateData);
BOOL DisplayPartitionFormat(LPSTATEDATA lpStateData);
BOOL CopyFiles(LPSTATEDATA lpStateData);
BOOL DisplayCopyFiles(LPSTATEDATA lpStateData);
BOOL WinpeReboot(LPSTATEDATA lpStateData);
BOOL
IsRemoteBoot(
VOID
);
// From autologon.c
BOOL AutoLogon(LPSTATEDATA lpStateData);
BOOL DisplayAutoLogon(LPSTATEDATA lpStateData);
// From ident.c
BOOL UserIdent(LPSTATEDATA lpStateData);
BOOL DisplayUserIdent(LPSTATEDATA lpStateData);
// From inf.c
BOOL ProcessInfSection(LPTSTR, LPTSTR);
BOOL InfInstall(LPSTATEDATA lpStateData);
BOOL DisplayInfInstall(LPSTATEDATA lpStateData);
// From factory.c
VOID InitLogging(LPTSTR lpszWinBOMPath);
// From log.c
DWORD FacLogFileStr(DWORD dwLogOpt, LPTSTR lpFormat, ...);
DWORD FacLogFile(DWORD dwLogOpt, UINT uFormat, ...);
// From StartMenuMfu.c
BOOL StartMenuMFU(LPSTATEDATA lpStateData);
BOOL DisplayStartMenuMFU(LPSTATEDATA lpStateData);
BOOL SetDefaultApps(LPSTATEDATA lpStateData);
// From OemFolder.c
BOOL OemData(LPSTATEDATA lpStateData);
BOOL DisplayOemData(LPSTATEDATA lpStateData);
void NotifyStartMenu(UINT code);
#define TMFACTORY_OEMLINK 0
#define TMFACTORY_MFU 1
// From oemrun.c
BOOL OemRun(LPSTATEDATA lpStateData);
BOOL DisplayOemRun(LPSTATEDATA lpStateData);
BOOL OemRunOnce(LPSTATEDATA lpStateData);
BOOL DisplayOemRunOnce(LPSTATEDATA lpStateData);
// From winpenet.c
BOOL ConfigureNetwork(LPTSTR lpszWinBOMPath);
BOOL WinpeNet(LPSTATEDATA lpStateData);
BOOL DisplayWinpeNet(LPSTATEDATA lpStateData);
DWORD WaitForServiceStartName(LPTSTR lpszServiceName);
DWORD StartMyService(LPTSTR lpszServiceName, SC_HANDLE schSCManager);
// From power.c
BOOL SetPowerOptions(LPSTATEDATA lpStateData);
BOOL DisplaySetPowerOptions(LPSTATEDATA lpStateData);
// From FONT.C:
//
BOOL SetFontOptions(LPSTATEDATA lpStateData);
BOOL DisplaySetFontOptions(LPSTATEDATA lpStateData);
// From HOMENET.C:
//
BOOL HomeNet(LPSTATEDATA lpStateData);
BOOL DisplayHomeNet(LPSTATEDATA lpStateData);
// From SRCPATH.C:
//
BOOL ResetSource(LPSTATEDATA lpStateData);
BOOL DisplayResetSource(LPSTATEDATA lpStateData);
// From EXTPART.C:
//
BOOL ExtendPart(LPSTATEDATA lpStateData);
BOOL DisplayExtendPart(LPSTATEDATA lpStateData);
// From TESTCERT.C:
//
BOOL TestCert(LPSTATEDATA lpStateData);
BOOL DisplayTestCert(LPSTATEDATA lpStateData);
// From SHELL.C:
//
BOOL OptimizeShell(LPSTATEDATA lpStateData);
BOOL DisplayOptimizeShell(LPSTATEDATA lpStateData);
// From SETSHELL.C:
//
BOOL ShellSettings(LPSTATEDATA lpStateData);
BOOL ShellSettings2(LPSTATEDATA lpStateData);
BOOL DisplayShellSettings(LPSTATEDATA lpStateData);
// From pagefile.c
//
BOOL CreatePageFile(LPSTATEDATA lpStateData);
BOOL DisplayCreatePageFile(LPSTATEDATA lpStateData);
// From OCMGR.C:
//
BOOL OCManager(LPSTATEDATA lpStateData);
BOOL DisplayOCManager(LPSTATEDATA lpStateData);
// From SLPFILES.C:
//
BOOL SlpFiles(LPSTATEDATA lpStateData);
BOOL DisplaySlpFiles(LPSTATEDATA lpStateData);
// From PID.C
//
BOOL PidPopulate(LPSTATEDATA lpStateData);
// External functions
extern BOOL IsUserAdmin(VOID);
//extern BOOL CheckOSVersion(VOID);
//extern BOOL IsDomainMember(VOID);
//extern BOOL IsUserAdmin(VOID);
extern BOOL DoesUserHavePrivilege(PCTSTR);
// ============================================================================
// Global Variables
// ============================================================================
extern HINSTANCE g_hInstance;
extern DWORD g_dwFactoryFlags;
extern DWORD g_dwDebugLevel;
extern TCHAR g_szWinBOMPath[];
extern TCHAR g_szLogFile[MAX_PATH];
extern TCHAR g_szFactoryPath[MAX_PATH];
extern TCHAR g_szSysprepDir[MAX_PATH];
// ============================================================================
// Global Constants
// ============================================================================
#define MAX_MESSAGE 4096
#define FACTORY_MESSAGE_TYPE_ERROR 1