windows-nt/Source/XPSP1/NT/base/ntsetup/oobe/msobmain/msobmain.h
2020-09-26 16:20:57 +08:00

359 lines
13 KiB
C++

//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1999 **
//*********************************************************************
//
// MSOBMAIN.H - Header for the implementation of CObMain
//
// HISTORY:
//
// 1/27/99 a-jaswed Created.
//
#ifndef _MSOBMAIN_H_
#define _MSOBMAIN_H_
#include <util.h>
#include "licdll.h"
#include "debug.h"
#include "userinfo.h"
#include "tapiloc.h"
#include "pid.h"
#include "signup.h"
#include "status.h"
#include "direct.h"
#include "register.h"
#include "api.h"
#include "language.h"
#include "eula.h"
#include "sysclock.h"
#include "appdefs.h"
#include "obshel.h"
#include "obcomm.h"
#include "setup.h" // // BUGBUG: Temp syssetup stub declarations
#include "setupkey.h"
#define OOBE_STATUS_HEIGHT 12 // Percent height of the status pane
#define FINISH_OK 0x00000000
#define FINISH_REBOOT 0x00000001
#define FINISH_BAD_PID 0x00000002
#define FINISH_BAD_EULA 0x00000004
#define FINISH_BAD_STAMP 0x00000008
// Setup types from winlogon\setup.h
#define SETUPTYPE_NONE 0
#define SETUPTYPE_FULL 1
#define SETUPTYPE_NOREBOOT 2
#define SETUPTYPE_UPGRADE 4
#define MNRMAXCREDENTIAL 128
typedef UINT APIERR;
typedef LPVOID HPWL;
typedef HPWL* LPHPWL;
typedef APIERR (WINAPI* LPFnCreatePasswordCache) (LPHPWL lphCache, const CHAR* pszUsername, const CHAR* pszPassword);
typedef PVOID HDEVNOTIFY;
typedef HDEVNOTIFY *PHDEVNOTIFY;
#define DEVICE_NOTIFY_WINDOW_HANDLE 0x00000000
#define DEVICE_NOTIFY_SERVICE_HANDLE 0x00000001
#define DEVICE_NOTIFY_COMPLETION_HANDLE 0x00000002
#define DBT_DEVTYP_DEVICEINTERFACE 0x00000005 // device interface class
#define DBT_DEVTYP_HANDLE 0x00000006 // file system handle
static const CHAR cszRegisterDeviceNotification[]
= "RegisterDeviceNotificationA";
static const CHAR cszUnregisterDeviceNotification[]
= "UnregisterDeviceNotification";
typedef HDEVNOTIFY (WINAPI * REGISTERDEVICENOTIFICATIONA) (
IN HANDLE hRecipient,
IN LPVOID NotificationFilter,
IN DWORD Flags
);
typedef BOOL (WINAPI* UNREGISTERDEVICENOTIFICATION) (
IN HDEVNOTIFY Handle
);
#define OOBE_1ND_SERVICESSTARTED L"oobe_1nd_servicesstarted"
#define OOBE_2ND_CONTINUE L"oobe_2nd_continue"
#define OOBE_2ND_DONE L"oobe_2nd_done"
/* A5DCBF10-6530-11D2-901F-00C04FB951ED */
DEFINE_GUID(GUID_CLASS_USB_DEVICE, 0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED);
class CObMain : public IDispatch
{
public: // data
IObShellMainPane* m_pObShellMainPane;
IObCommunicationManager2* m_pObCommunicationManager;
// License Agent
ICOMLicenseAgent* m_pLicenseAgent;
BOOL m_bPostToMs;
CTapiLocationInfo* m_pTapiInfo;
CUserInfo* m_pUserInfo;
WCHAR m_szStartPage[MAX_PATH];
WCHAR m_szIspUrl [MAX_PATH*4];
BOOL m_fIsOEMDebugMode;
BOOL m_bProcessQueuedEvents;
private: // data
// Ref count
//
ULONG m_cRef;
// Instance info
//
HINSTANCE m_hInstance;
HWND m_hwndBackground;
HANDLE m_BackgroundWindowThreadHandle;
// Parent window info
//
HWND m_hwndParent;
RECT m_rectMainPane;
BOOL m_bMainPaneReady;
BOOL m_bStatusPaneReady;
int m_iCurrentSelection;
int m_iTotalItems;
// System Metrics
//
int m_iScrWidth;
int m_iScrHeight;
// window.external objects
//
CProductID* m_pProductID;
CSignup* m_pSignup;
CStatus* m_pStatus;
CDirections* m_pDirections;
CLanguage* m_pLanguage;
CEula* m_pEula;
CRegister* m_pRegister;
CSystemClock* m_pSysClock;
CAPI* m_pAPI;
CDebug* m_pDebug;
// Reminder info
//
BOOL m_bRemindRegistered;
BOOL m_bRemindISPSignuped;
int m_nRmdIndx;
// OOBE state info
//
APMD m_apmd;
DWORD m_prop;
BOOL m_fFinished;
OOBE_SHUTDOWN_ACTION m_OobeShutdownAction;
BOOL m_fRunIEOnClose;
BOOL m_bDisableFontSmoothingOnExit;
BOOL m_bAuditMode;
// Hardware info
//
BOOL m_bDoCheck;
DWORD m_dwHWChkResult;
HDEVNOTIFY m_hDevNotify;
HINSTANCE m_hInstShell32;
// Network info
//
DWORD m_dwJoinStatus;
//INI stuff
WCHAR m_szStatusLogo [MAX_PATH+1];
WCHAR m_szStatusLogoBg [MAX_PATH+1];
HANDLE m_CompNameStartThread;
// Debugging info
//
ATOM m_atomDebugKey;
// Migrated user list
PSTRINGLIST m_pMigratedUserList;
int m_iMigratedUserCount;
WCHAR m_szDefaultAccount[UNLEN];
// 2nd instance of OOBE
BOOL m_bSecondInstanceNeeded;
BOOL m_bSecondInstance;
HANDLE m_1ndInst_ServicesReady;
HANDLE m_2ndInst_Continue;
HANDLE m_2ndInst_Done;
HANDLE m_2ndOOBE_hProcess;
private: // methods
void ShowOOBEWindow ();
void InitObShellMainPane ();
void DoCancelDialog ();
void PlaceIEInRunonce ();
void CreateDefaultUser ();
void CheckForStatusPaneItems (void);
bool LoadStatusItems (LPCWSTR szSectionNamePostfix);
bool LoadStatusItems (BSTR bstrSectionNamePostfix);
bool LoadStatusItems (UINT uiSectionNamePostfix);
DWORD NeedKbdMouseChk ();
DWORD GetAppLCID ();
BOOL DeleteReminder (INT nType,
BOOL bAll=FALSE);
BOOL AddReminder (INT nType);
BOOL DoRegisterDeviceInterface();
BOOL UnRegisterDeviceInterface();
void UpdateMuiFiles ();
BOOL OnDial (UINT nConnectionType,
BSTR bstrISPFile,
DWORD nISPIndex,
BOOL bRedial
);
BOOL IsViewerInstalled (BSTR bstrExt);
void CreateIdentityAccounts ();
BOOL CreateMigratedUserList ();
void FixPasswordAttributes (LPWSTR szName, DWORD flags);
BOOL RemoveDefaultAccount ();
LONG GetLocalUserCount ();
HRESULT CreateModemConnectoid(BSTR bstrAreaCode,
BSTR bstrPhoneNumber,
BOOL fAutoIPAddress,
DWORD ipaddr_A,
DWORD ipaddr_B,
DWORD ipaddr_C,
DWORD ipaddr_D,
BOOL fAutoDNS,
DWORD ipaddrDns_A,
DWORD ipaddrDns_B,
DWORD ipaddrDns_C,
DWORD ipaddrDns_D,
DWORD ipaddrDnsAlt_A,
DWORD ipaddrDnsAlt_B,
DWORD ipaddrDnsAlt_C,
DWORD ipaddrDnsAlt_D,
BSTR bstrUserName,
BSTR bstrPassword);
HRESULT CreatePppoeConnectoid(BSTR bstrServiceName,
BOOL fAutoIPAddress,
DWORD ipaddr_A,
DWORD ipaddr_B,
DWORD ipaddr_C,
DWORD ipaddr_D,
BOOL fAutoDNS,
DWORD ipaddrDns_A,
DWORD ipaddrDns_B,
DWORD ipaddrDns_C,
DWORD ipaddrDns_D,
DWORD ipaddrDnsAlt_A,
DWORD ipaddrDnsAlt_B,
DWORD ipaddrDnsAlt_C,
DWORD ipaddrDnsAlt_D,
BSTR bstrUserName,
BSTR bstrPassword
);
BOOL IsSetupUpgrade ();
BOOL IsUpgrade ();
DWORD DetermineUpgradeType ();
VOID OnComputerNameChangeComplete(BOOL StartAsThread);
DWORD JoinDomain (IN BSTR DomainName,
IN BSTR UserAccount,
IN BSTR Password,
IN BOOL Flag
);
DWORD GetNetJoinInformation ();
BOOL IsSelectVariation ();
VOID Activate (IN DWORD PostToMs
);
BSTR GetProxySettings ();
VOID AsyncInvoke (IN INT cDispid,
IN const DISPID* dispids,
IN LPCWSTR szReturnFunction,
IN INT iTimeout
);
public: // methods
CObMain (APMD Apmd, DWORD Prop, int RmdIndx);
~CObMain ();
BOOL InitApplicationWindow ();
BOOL Init ();
DWORD StartRpcSs ();
void Cleanup ();
void CleanupForReboot (CSetupKey& setupkey);
void CleanupForPowerDown (CSetupKey& setupkey);
void RemoveRestartStuff (CSetupKey& setupkey);
BOOL SetConnectoidInfo ();
BOOL RunOOBE ();
BOOL PowerDown (BOOL fRestart);
OOBE_SHUTDOWN_ACTION DisplayReboot();
void SetAppMode (APMD apmd) {m_apmd = apmd;}
BOOL InMode (APMD apmd) {return m_apmd == apmd;}
BOOL InOobeMode () {return InMode(APMD_OOBE);}
BOOL InMSNMode () {return InMode(APMD_MSN);}
void SetProperty (DWORD prop) {m_prop |= prop;}
void ClearProperty (DWORD prop) {m_prop &= ~prop;}
BOOL FHasProperty (DWORD prop) {return m_prop & prop;}
BOOL FFullScreen () {return FHasProperty(PROP_FULLSCREEN);}
void SetStatus (BOOL b);
void SetMain (BOOL b);
void DoAuditBootKeySequence ();
BOOL DoAuditBoot ();
BOOL OEMAuditboot ();
void SetReminderIndx (int nRmdIndx) {m_nRmdIndx = nRmdIndx;}
BOOL RegisterDebugHotKey ();
void UnregisterDebugHotKey ();
BOOL IsDebugHotKey (WORD wKeyCode) {
return (wKeyCode == m_atomDebugKey);
}
void WaitForPnPCompletion ();
void ServiceStartDone ();
void Set2ndInstance(BOOL b2ndInstance) { m_bSecondInstance = b2ndInstance;
return;}
BOOL Is2ndInstance() { return m_bSecondInstance;}
BOOL CreateBackground();
void StopBackgroundWindow();
BOOL OEMPassword();
BOOL InAuditMode() {return m_bAuditMode;}
void PlayBackgroundMusic ();
void StopBackgroundMusic ();
void SetComputerDescription ();
HRESULT ExecScriptFn (IN LPCWSTR szScriptFn,
IN VARIANT* pvarReturns,
IN int cReturns
);
// IUnknown Interfaces
STDMETHODIMP QueryInterface (REFIID riid, LPVOID* ppvObj);
STDMETHODIMP_(ULONG) AddRef ();
STDMETHODIMP_(ULONG) Release ();
//IDispatch Interfaces
STDMETHOD (GetTypeInfoCount) (UINT* pcInfo);
STDMETHOD (GetTypeInfo) (UINT, LCID, ITypeInfo** );
STDMETHOD (GetIDsOfNames) (REFIID, OLECHAR**, UINT, LCID, DISPID* );
STDMETHOD (Invoke) (DISPID dispidMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS* pdispparams,
VARIANT* pvarResult, EXCEPINFO* pexcepinfo,
UINT* puArgErr);
}; // class CObMain
BOOL IsProfessionalSKU();
void CleanupForLogon(CSetupKey& setupkey);
void RemovePersistData();
void CheckDigitalID();
#endif // _MSOBMAIN_H_