|
|
//*********************************************************************
//* 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_
|