179 lines
6.6 KiB
C++
179 lines
6.6 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1997.
|
|
//
|
|
// File: ObjMgr.h
|
|
//
|
|
// Contents: Keeps track of our applications dialog objects
|
|
// and lifetime
|
|
//
|
|
// Classes:
|
|
//
|
|
// Notes:
|
|
//
|
|
// History: 05-Nov-97 rogerg Created.
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#ifndef _OBJMGR_
|
|
#define _OBJMGR_
|
|
|
|
class CBaseDlg;
|
|
class CChoiceDlg;
|
|
class CProgressDlg;
|
|
|
|
typedef enum _tagDLGTYPE // type of dialog.
|
|
{
|
|
DLGTYPE_CHOICE = 0x1,
|
|
DLGTYPE_PROGRESS = 0x2,
|
|
} DLGTYPE;
|
|
|
|
enum EAutoDialState
|
|
{
|
|
eQuiescedOn, // Quiesced state and auto dial is on
|
|
eQuiescedOff, // Quiesced state and auto dial is off
|
|
eAutoDialOn, // During a sync session and auto dial is on
|
|
eAutoDialOff // During a sync session and auto dial is off
|
|
};
|
|
|
|
|
|
typedef struct _tagDLGLISTITEM {
|
|
_tagDLGLISTITEM *pDlgNextListItem; // pointer to the next dialog in the list.
|
|
DLGTYPE dlgType; // type of dialog this is.
|
|
ULONG cRefs; // number of references on this object
|
|
ULONG cLocks; // number of locks on this object
|
|
CLSID clsid; // clsid of this dialog, only applicable to choice.
|
|
CBaseDlg *pDlg;
|
|
DWORD dwThreadID; // Thread the dialog is on.
|
|
HANDLE hThread; // Handle to the thread the dialog belongs too
|
|
BOOL fHasReleaseDlgCmdId; // boolean to indicate if there is a callback
|
|
WORD wCommandID; // CommandID to pass to the callback.
|
|
} DLGLISTITEM;
|
|
|
|
|
|
typedef struct _tagOBJECTMGRDATA {
|
|
DLGLISTITEM *DlgList; // Ptr to Dialog list
|
|
HANDLE hClassRegisteredEvent; // Event created by process that has registered the classFactory.
|
|
DWORD dwRegClassFactCookie; // registered OLE Class Factory Cooke
|
|
BOOL fRegClassFactCookieValid; // registered OLE Class Factory Cooke
|
|
DWORD LockCountInternal; // Internal lock count on Application
|
|
DWORD LockCountExternal; // External lock count on Application
|
|
BOOL fCloseAll; // Set if told to CloseAll, used in ReleaseOneStopLifetime
|
|
DWORD dwSettingsLockCount; // number of lock counts on the settings dialog,.
|
|
DWORD dwHandlerPropertiesLockCount; // number of lock counts on any handler properties dialogs open
|
|
BOOL fDead; // set in release call to avoid multiple releases.
|
|
DWORD dwMainThreadID; // Id of Main Thrad
|
|
HWND hWndMainThreadMsg; //hwnd of Main Thread Message Hwnd.
|
|
BOOL fIdleHandlerRunning; // SyncMgr is currently processing Idle.
|
|
EAutoDialState eAutoDialState; // State machine for supporting autodial
|
|
BOOL fRasAutoDial; // Is Ras auto dial on ?
|
|
BOOL fWininetAutoDial; // Is Wininet auto dial on ?
|
|
BOOL fFirstSyncItem; // Is the first PrepareForSyncItem being processed
|
|
ULONG cNestedStartCalls; // Count of nested start calls
|
|
} OBJECTMGRDATA;
|
|
|
|
|
|
typedef struct _tagDlgThreadArgs {
|
|
HANDLE hEvent; // used to know when the message loop has been created.
|
|
HRESULT hr; // inidicates if creation was successfull
|
|
DLGTYPE dlgType; // requested dialog type to create.
|
|
CLSID clsid; // clsid identifies the dialog.
|
|
int nCmdShow; // how to display the dialog
|
|
CBaseDlg *pDlg; // pointer to the created dialog.
|
|
} DlgThreadArgs;
|
|
|
|
DWORD WINAPI DialogThread( LPVOID lpArg );
|
|
|
|
// onetime initialization routiens
|
|
STDAPI InitObjectManager(CMsgServiceHwnd *pMsgService);
|
|
|
|
// determines main threads response to WM_QUERYENDSESSION
|
|
STDAPI ObjMgr_HandleQueryEndSession(HWND *hwnd,UINT *uMessageId,BOOL *fLetUserDecide);
|
|
STDAPI_(ULONG) ObjMgr_AddRefHandlerPropertiesLockCount(DWORD dwNumRefs);
|
|
STDAPI_(ULONG) ObjMgr_ReleaseHandlerPropertiesLockCount(DWORD dwNumRefs);
|
|
STDAPI ObjMgr_CloseAll();
|
|
|
|
// idle managmenent
|
|
STDAPI RequestIdleLock();
|
|
STDAPI ReleaseIdleLock();
|
|
|
|
// routines for handling dialog lifetime
|
|
STDAPI FindChoiceDialog(REFCLSID rclsid,BOOL fCreate,int nCmdShow,CChoiceDlg **pChoiceDlg);
|
|
STDAPI_(ULONG) AddRefChoiceDialog(REFCLSID rclsid,CChoiceDlg *pChoiceDlg);
|
|
STDAPI_(ULONG) ReleaseChoiceDialog(REFCLSID rclsid,CChoiceDlg *pChoiceDlg);
|
|
STDAPI SetChoiceReleaseDlgCmdId(REFCLSID rclsid,CChoiceDlg *pChoiceDlg,WORD wCommandId);
|
|
|
|
STDAPI FindProgressDialog(REFCLSID rclsid,BOOL fCreate,int nCmdShow,CProgressDlg **pProgressDlg);
|
|
STDAPI_(ULONG) AddRefProgressDialog(REFCLSID rclsid,CProgressDlg *pProgressDlg);
|
|
STDAPI_(ULONG) ReleaseProgressDialog(REFCLSID rclsid,CProgressDlg *pProgressDlg,BOOL fForce);
|
|
STDAPI SetProgressReleaseDlgCmdId(REFCLSID rclsid,CProgressDlg *pProgressDlg,WORD wCommandId);
|
|
STDAPI LockProgressDialog(REFCLSID rclsid,CProgressDlg *pProgressDlg,BOOL fLock);
|
|
|
|
// helper routines called by dialog lifetime.
|
|
STDAPI FindDialog(DLGTYPE dlgType,REFCLSID rclsid,BOOL fCreate,int nCmdShow,CBaseDlg **pDlg);
|
|
STDAPI_(ULONG) AddRefDialog(DLGTYPE dlgType,REFCLSID rclsid,CBaseDlg *pDlg);
|
|
STDAPI_(ULONG) ReleaseDialog(DLGTYPE dlgType,REFCLSID rclsid,CBaseDlg *pDlg,BOOL fForce);
|
|
STDAPI SetReleaseDlgCmdId(DLGTYPE dlgType,REFCLSID rclsid,CBaseDlg *pDlg,WORD wCommandId);
|
|
|
|
// Routines called for dial support
|
|
STDAPI BeginSyncSession();
|
|
STDAPI EndSyncSession();
|
|
STDAPI ApplySyncItemDialState( BOOL fAutoDialDisable );
|
|
STDAPI GetAutoDialState();
|
|
STDAPI LokDisableAutoDial();
|
|
STDAPI LokEnableAutoDial();
|
|
|
|
typedef struct _tagDlgSettingsArgs {
|
|
HANDLE hEvent; // used to know when thread has been initialized.
|
|
HWND hwndParent; // hwnd to use the parent as.
|
|
DWORD dwParentThreadId;
|
|
} DlgSettingsArgs;
|
|
|
|
DWORD WINAPI SettingsThread( LPVOID lpArg );
|
|
STDAPI ShowOptionsDialog(HWND hwndParent);
|
|
|
|
// helper routine for OLE classes.
|
|
STDAPI RegisterOneStopClassFactory(BOOL fForce);
|
|
|
|
// routines for managing lifetime of application
|
|
STDAPI_(ULONG) AddRefOneStopLifetime(BOOL fExternal);
|
|
STDAPI_(ULONG) ReleaseOneStopLifetime(BOOL fExternal);
|
|
|
|
// routines for routing messages
|
|
BOOL IsOneStopDlgMessage(MSG *msg);
|
|
|
|
// declarations for CSingletonNetapi class.
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CSingletonNetApi
|
|
//
|
|
// Purpose: Singleton net api object
|
|
//
|
|
// History: 31-Jul-98 SitaramR Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CSingletonNetApi : CLockHandler
|
|
{
|
|
public:
|
|
|
|
CSingletonNetApi()
|
|
: m_pNetApi(0)
|
|
{
|
|
}
|
|
|
|
~CSingletonNetApi();
|
|
|
|
LPNETAPI GetNetApiObj();
|
|
void DeleteNetApiObj();
|
|
|
|
private:
|
|
LPNETAPI m_pNetApi; // Actual net api object
|
|
};
|
|
|
|
extern CSingletonNetApi gSingleNetApiObj; // Global singleton NetApi object
|
|
|
|
|
|
#endif // _OBJMGR_
|