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.
 
 
 
 
 
 

220 lines
11 KiB

// --------------------------------------------------------------------------------
// INSTANCE.H
// Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
// --------------------------------------------------------------------------------
#ifndef __INSTANCE_H
#define __INSTANCE_H
// --------------------------------------------------------------------------------
// Depends
// --------------------------------------------------------------------------------
#include <msoeapi.h>
// --------------------------------------------------------------------------------
// Macros
// --------------------------------------------------------------------------------
#ifdef DEBUG
#define CoIncrementInit(_pszSource, _dwFlags, _pszCmdLine, _phInitRef) \
g_pInstance->CoIncrementInitDebug(_pszSource, _dwFlags, _pszCmdLine, _phInitRef)
#define CoDecrementInit(_pszSource, _phInitRef) \
g_pInstance->CoDecrementInitDebug(_pszSource, _phInitRef)
#else
#define CoIncrementInit(_pszSource, _dwFlags, _pszCmdLine, _phInitRef) \
g_pInstance->CoIncrementInitImpl(_dwFlags, _pszCmdLine, _phInitRef)
#define CoDecrementInit(_pszSource, _phInitRef) \
g_pInstance->CoDecrementInitImpl(_phInitRef)
#endif // DEBUG
// --------------------------------------------------------------------------------
// Forward Decls
// --------------------------------------------------------------------------------
extern DWORD g_dwHideMessenger;
#define BL_DISP 0
#define BL_CHECK 1
#define BL_HIDE 2
#define BL_NOTINST 10
#define BL_DISABLE (BL_CHECK | BL_NOTINST)
#define BL_DEFAULT BL_CHECK
// --------------------------------------------------------------------------------
// User Window Messages
// --------------------------------------------------------------------------------
#define ITM_SHUTDOWNTHREAD (WM_USER)
#define ITM_CREATENOTEWINDOW (WM_USER+1)
#define ITM_CREATEWMSUINOTE (WM_USER+2)
#define ITM_CALLGENERICVOIDFN (WM_USER+3)
#define ITM_CALLFINDWINDOW (WM_USER+4) // wparam == OFTYPE - see enumeration above.
#define ITM_CREATEREMINDWINDOW (WM_USER+5)
#define ITM_MAPILOGON (WM_USER+6)
#define ITM_OPENSTORE (WM_USER+7)
#define ITM_OPENAB (WM_USER+8)
#define ITM_REDOCOLUMNS (WM_USER+9)
#define ITM_OPENNEWSSTORE (WM_USER+10)
#define ITM_CLOSENOTES (WM_USER+11) // this note is passed when we need to close a note.
#define ITM_CHECKCONFIG (WM_USER+12)
#define ITM_CREATENEWSNOTEWINDOW (WM_USER+13)
#define ITM_OPTIONADVISE (WM_USER+14) // wparam = PFNOPTNOTIFY, lparam = LPARAM
#define ITM_OPTIONUNADVISE (WM_USER+15) // wparam = PFNOPTNOTIFY
#define ITM_GOPTIONSCHANGED (WM_USER+16)
#define ITM_BROWSETOOBJECT (WM_USER+17)
#define ITM_IDENTITYMSG (WM_USER+18)
#define ITM_POSTCOPYDATA (WM_USER+19)
#define ITM_WAB_CO_DECREMENT (WM_USER+20)
// --------------------------------------------------------------------------------
// Startup Modes
// --------------------------------------------------------------------------------
#define MODE_NEWSONLY 0x00000001
#define MODE_OUTLOOKNEWS (0x00000002 | MODE_NEWSONLY | MODE_NOIDENTITIES)
#define MODE_MAILONLY 0x00000004
#define MODE_NOIDENTITIES 0x00000008
#define MODE_EXAM 0x00000010
#define MODE_PLE 0x00000020
#define MODE_JUNKMAIL 0x00000040
// --------------------------------------------------------------------------------
// TRAYICONACTION
// --------------------------------------------------------------------------------
typedef enum tagTRAYICONACTION {
TRAYICONACTION_ADD,
TRAYICONACTION_REMOVE
} TRAYICONACTION;
// --------------------------------------------------------------------------------
// REPORTERRORINFO
// --------------------------------------------------------------------------------
typedef struct tagREPORTERRORINFO {
UINT nTitleIds; // Title of the messagebox
UINT nPrefixIds; // Prefix string resource id
UINT nErrorIds; // Error string resource id
UINT nReasonIds; // Reason string resource id
BOOL nHelpIds; // Help String Resource Id
LPCSTR pszExtra1; // Extra parameter 1
ULONG ulLastError; // GetLastError() Value
} REPORTERRORINFO, *LPREPORTERRORINFO;
// --------------------------------------------------------------------------------
// COutlookExpress
// --------------------------------------------------------------------------------
class COutlookExpress : public IOutlookExpress
{
public:
// ----------------------------------------------------------------------------
// Construction
// ----------------------------------------------------------------------------
COutlookExpress(void);
~COutlookExpress(void);
// ----------------------------------------------------------------------------
// IUnknown Methods
// ----------------------------------------------------------------------------
STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppv);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// ----------------------------------------------------------------------------
// IOutlookExpress Methods
// ----------------------------------------------------------------------------
STDMETHODIMP Start(DWORD dwFlags, LPCWSTR pwszCmdLine, INT nCmdShow);
// ----------------------------------------------------------------------------
// Initialize / Uninitialize
// ----------------------------------------------------------------------------
#ifdef DEBUG
HRESULT CoIncrementInitDebug(LPCSTR pwszSource, DWORD dwFlags, LPCWSTR pszCmdLine, LPHINITREF phInitRef);
HRESULT CoDecrementInitDebug(LPCSTR pwszSource, LPHINITREF phInitRef);
#endif // DEBUG
HRESULT CoIncrementInitImpl(DWORD dwFlags, LPCWSTR pwszCmdLine, LPHINITREF phInitRef);
HRESULT CoDecrementInitImpl(LPHINITREF phInitRef);
// ----------------------------------------------------------------------------
// DllAddRef / DllRelease
// ----------------------------------------------------------------------------
HRESULT DllAddRef(void);
HRESULT DllRelease(void);
// ----------------------------------------------------------------------------
// LockServer - Called from CClassFactory Implementation
// ----------------------------------------------------------------------------
HRESULT LockServer(BOOL fLock);
// ----------------------------------------------------------------------------
// DllCanUnloadNow
// ----------------------------------------------------------------------------
HRESULT DllCanUnloadNow(void) {
HRESULT hr;
if ((m_cDllInit <= 0) &&
(m_cDllRef <= 0) &&
(m_cDllLock <= 0))
{
hr = S_OK;
}
else
{
hr = S_FALSE;
}
return hr;
}
// ----------------------------------------------------------------------------
// Defered Init/Deinit Methods
// ----------------------------------------------------------------------------
HRESULT ProcessCommandLine(INT nCmdShow, LPWSTR pwszCmdLineIn, BOOL *pfErrorDisplayed);
HRESULT BrowseToObject(UINT nCmdShow, FOLDERID idFolder);
HRESULT ActivateWindow(HWND hwnd);
// ----------------------------------------------------------------------------
// Multi-user startup/shutdown
// ----------------------------------------------------------------------------
HRESULT SetSwitchingUsers(BOOL bSwitching);
BOOL SwitchingUsers(void) {return m_fSwitchingUsers;}
void SetSwitchToUser(TCHAR *lpszUserName);
// ----------------------------------------------------------------------------
// InitWndProc
// ----------------------------------------------------------------------------
static LRESULT EXPORT_16 CALLBACK InitWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
// ----------------------------------------------------------------------------
// Tray Notification Icon Stuff
// ----------------------------------------------------------------------------
HRESULT UpdateTrayIcon(TRAYICONACTION type);
void CloseSplashScreen(void);
private:
// ----------------------------------------------------------------------------
// Private Members
// ----------------------------------------------------------------------------
HRESULT _HandleMailURL(LPWSTR pwszCmdLine, BOOL *pfErrorDisplayed);
HRESULT _HandleNewsURL(INT nCmdShow, LPWSTR pwszCmd, BOOL *pfErrorDisplayed);
HRESULT _HandleFile(LPWSTR pwszCmd, BOOL *pfErrorDisplayed, BOOL fNews);
HRESULT _HandleNewsArticleURL(LPSTR pszServerIn, LPSTR pszArticle, UINT uPort, BOOL fSecure, BOOL *pfErrorDisplayed);
void _HandleTrayIconEvent(WPARAM wParam, LPARAM lParam);
HRESULT _ValidateDll(LPCSTR pszDll, BOOL fDemandResult, HMODULE hModule, HRESULT hrLoadError, HRESULT hrVersionError, LPREPORTERRORINFO pError);
BOOL _ReportError(HINSTANCE hInstance, HRESULT hrResult, LONG lResult, LPREPORTERRORINFO pInfo);
HRESULT _CoDecrementInitMain(LPHINITREF phInitRef=NULL);
void _ProcessCommandLineFlags(LPWSTR *ppwszCmdLine, DWORD dwFlags);
private:
// ----------------------------------------------------------------------------
// PrivateData
// ----------------------------------------------------------------------------
LONG m_cRef; // Reference Count
HANDLE m_hInstMutex; // Startup/Shutdown mutex
BOOL m_fPumpingMsgs; // Do we have a message pump running ?
LONG m_cDllRef; // Dll Reference Count
LONG m_cDllLock; // Dll Reference Count
LONG m_cDllInit; // Number of inits
DWORD m_dwThreadId; // Thread that I was created on
CRITICAL_SECTION m_cs; // Thread Safety
BOOL m_fSwitchingUsers; // Multiple user switch is happening
TCHAR * m_szSwitchToUsername; // Switching to a specific user
HWND m_hwndSplash;
ISplashScreen *m_pSplash;
BOOL m_fIncremented;
HICON m_hTrayIcon;
};
#endif // __INSTANCE_H