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.
 
 
 
 
 
 

985 lines
41 KiB

// --------------------------------------------------------------------------------
// Msoert.h
// Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
// Debug Crap
// --------------------------------------------------------------------------------
#include "msoedbg.h"
// --------------------------------------------------------------------------------
// GUIDS
// --------------------------------------------------------------------------------
#if !defined(__MSOERT_H) || defined(INITGUID)
// {220D5CC1-853A-11d0-84BC-00C04FD43F8F}
#ifdef ENABLE_RULES
DEFINE_GUID(PST_IDENT_TYPE_GUID, 0x220d5cc3, 0x853a, 0x11d0, 0x84, 0xbc, 0x0, 0xc0, 0x4f, 0xd4, 0x3f, 0x8f);
#elif defined(N_TEST)
DEFINE_GUID(PST_IDENT_TYPE_GUID, 0x220d5cc2, 0x853a, 0x11d0, 0x84, 0xbc, 0x0, 0xc0, 0x4f, 0xd4, 0x3f, 0x8f);
#else
DEFINE_GUID(PST_IDENT_TYPE_GUID, 0x220d5cc1, 0x853a, 0x11d0, 0x84, 0xbc, 0x0, 0xc0, 0x4f, 0xd4, 0x3f, 0x8f);
#endif
// {417E2D75-84BD-11d0-84BB-00C04FD43F8F}
#ifdef ENABLE_RULES
DEFINE_GUID(PST_IMNACCT_SUBTYPE_GUID, 0x417e2d77, 0x84bd, 0x11d0, 0x84, 0xbb, 0x0, 0xc0, 0x4f, 0xd4, 0x3f, 0x8f);
#elif defined(N_TEST)
DEFINE_GUID(PST_IMNACCT_SUBTYPE_GUID, 0x417e2d76, 0x84bd, 0x11d0, 0x84, 0xbb, 0x0, 0xc0, 0x4f, 0xd4, 0x3f, 0x8f);
#else
DEFINE_GUID(PST_IMNACCT_SUBTYPE_GUID, 0x417e2d75, 0x84bd, 0x11d0, 0x84, 0xbb, 0x0, 0xc0, 0x4f, 0xd4, 0x3f, 0x8f);
#endif
// {6ADF2E20-8803-11d0-84BF-00C04FD43F8F}
DEFINE_GUID(PST_CERTS_SUBTYPE_GUID, 0x6adf2e20, 0x8803, 0x11d0, 0x84, 0xbf, 0x0, 0xc0, 0x4f, 0xd4, 0x3f, 0x8f);
#endif // !defined(__MSOERT_H) || defined(INITGUID)
// --------------------------------------------------------------------------------
// Include the rest of the stuff
// --------------------------------------------------------------------------------
#ifndef __MSOERT_H
#define __MSOERT_H
// --------------------------------------------------------------------------------
// Define API decoration for direct importing of DLL references.
// --------------------------------------------------------------------------------
// OESTDAPI - Things exported from msoert2.dll (no debug exports)
#if !defined(_MSOERT_)
#define OESTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
#else // _MSOERT_
#define OESTDAPI_(type) STDAPI_(type)
#endif // !_MSOERT_
#define DLLEXPORT __declspec(dllexport)
#ifndef NOFLAGS
#define NOFLAGS 0
#endif
// --------------------------------------------------------------------------------
// IN OUT OPTIONS Definitions
// --------------------------------------------------------------------------------
#ifndef OUT
#define OUT
#endif
#ifndef IN
#define IN
#endif
#ifndef IN_OUT
#define IN_OUT
#endif
#ifndef IN_OPT
#define IN_OPT
#endif
#ifndef OUT_OPT
#define OUT_OPT
#endif
#ifndef IN_OUT_OPT
#define IN_OUT_OPT
#endif
//WIn64 macros
#ifdef _WIN64
#if defined (_AMD64_) || defined (_IA64_)
#define ALIGNTYPE LARGE_INTEGER
#else
#define ALIGNTYPE DWORD
#endif
#define ALIGN ((ULONG) (sizeof(ALIGNTYPE) - 1))
#define LcbAlignLcb(lcb) (((lcb) + ALIGN) & ~ALIGN)
#define PbAlignPb(pb) ((LPBYTE) ((((DWORD) (pb)) + ALIGN) & ~ALIGN))
#define MYALIGN ((POINTER_64_INT) (sizeof(ALIGNTYPE) - 1))
#define MyPbAlignPb(pb) ((LPBYTE) ((((POINTER_64_INT) (pb)) + MYALIGN) & ~MYALIGN))
#else //!WIN64
#define LcbAlignLcb(lcb) (lcb)
#define PbAlignPb(pb) (pb)
#define MyPbAlignPb(pb) (pb)
#endif
// --------------------------------------------------------------------------------
// CRLF Definitions
// --------------------------------------------------------------------------------
#define wchCR L'\r'
#define wchLF L'\n'
#define chCR '\r'
#define chLF '\n'
#define szCRLF "\r\n"
// --------------------------------------------------------------------------------
// Versioning Magic
// --------------------------------------------------------------------------------
typedef enum tagOEDLLVERSION {
OEDLL_VERSION_5=1
} OEDLLVERSION;
#define OEDLL_VERSION_CURRENT OEDLL_VERSION_5
#define STR_GETDLLMAJORVERSION "GetDllMajorVersion"
typedef OEDLLVERSION (APIENTRY *PFNGETDLLMAJORVERSION)(void);
// --------------------------------------------------------------------------------
// RGB_AUTOCOLOR
// --------------------------------------------------------------------------------
#define RGB_AUTOCOLOR ((COLORREF)-1)
// --------------------------------------------------------------------------------
// NEXTID
// --------------------------------------------------------------------------------
#define NEXTID(pidl) ((LPITEMIDLIST)(((BYTE *)(pidl))+(pidl)->mkid.cb))
#define PAD4(x) (((x)+3)&~3)
// --------------------------------------------------------------------------------
// INLINE
// --------------------------------------------------------------------------------
#ifdef INLINE
#error define overlap
#else
// speed up debug build by turning off inline functions
#ifdef DEBUG
#define INLINE
#else
#define INLINE inline
#endif
#endif
// --------------------------------------------------------------------------------
// IS_EXTENDED
// --------------------------------------------------------------------------------
#define IS_EXTENDED(ch) \
((ch > 126 || ch < 32) && ch != '\t' && ch != '\n' && ch != '\r')
// --------------------------------------------------------------------------------
// Flag Utility Functions
// --------------------------------------------------------------------------------
#define FLAGSET(_dw, _f) do {_dw |= (_f);} while (0)
#define FLAGTOGGLE(_dw, _f) do {_dw ^= (_f);} while (0)
#define FLAGCLEAR(_dw, _f) do {_dw &= ~(_f);} while (0)
#define ISFLAGSET(_dw, _f) (BOOL)(((_dw) & (_f)) == (_f))
#define ISFLAGCLEAR(_dw, _f) (BOOL)(((_dw) & (_f)) != (_f))
// --------------------------------------------------------------------------------
// Used for building an IDataObject format enumerator
// --------------------------------------------------------------------------------
#define SETDefFormatEtc(fe, cf, med) {\
(fe).cfFormat = ((CLIPFORMAT) (cf)); \
(fe).dwAspect = DVASPECT_CONTENT; \
(fe).ptd = NULL; \
(fe).tymed = med; \
(fe).lindex = -1; \
}
// --------------------------------------------------------------------------------
// Some defines to create bit fields easier
// --------------------------------------------------------------------------------
#define FLAG01 0x00000001
#define FLAG02 0x00000002
#define FLAG03 0x00000004
#define FLAG04 0x00000008
#define FLAG05 0x00000010
#define FLAG06 0x00000020
#define FLAG07 0x00000040
#define FLAG08 0x00000080
#define FLAG09 0x00000100
#define FLAG10 0x00000200
#define FLAG11 0x00000400
#define FLAG12 0x00000800
#define FLAG13 0x00001000
#define FLAG14 0x00002000
#define FLAG15 0x00004000
#define FLAG16 0x00008000
#define FLAG17 0x00010000
#define FLAG18 0x00020000
#define FLAG19 0x00040000
#define FLAG20 0x00080000
#define FLAG21 0x00100000
#define FLAG22 0x00200000
#define FLAG23 0x00400000
#define FLAG24 0x00800000
#define FLAG25 0x01000000
#define FLAG26 0x02000000
#define FLAG27 0x04000000
#define FLAG28 0x08000000
#define FLAG29 0x10000000
#define FLAG30 0x20000000
#define FLAG31 0x40000000
#define FLAG32 0x80000000
// --------------------------------------------------------------------------------
// Support Inclusion into a C file
// --------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
// --------------------------------------------------------------------------------
// Common String Lengths
// --------------------------------------------------------------------------------
#define cchMaxDate 64
#define cchMaxTime 22
// --------------------------------------------------------------------------------
// ARRAYSIZE - Don't use this on extern'ed global data structures, it won't work
// --------------------------------------------------------------------------------
#ifndef ARRAYSIZE
#define ARRAYSIZE(_rg) (sizeof((_rg))/sizeof((_rg)[0]))
#endif // ARRAYSIZE
// --------------------------------------------------------------------------------
// HANDLE_COMMAND - Used in a WindowProc to simplify handling of WM_COMMAND messages
// --------------------------------------------------------------------------------
#define HANDLE_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
case (id): { (fn)((HWND)(hwnd), (HWND)(hwndCtl), (UINT)(codeNotify)); break; }
// --------------------------------------------------------------------------------
// Standard Boolean Constants
// --------------------------------------------------------------------------------
#define fFalse ((BOOL) 0)
#define fTrue ((BOOL) 1)
// --------------------------------------------------------------------------------
// Storage class macros
// --------------------------------------------------------------------------------
#ifdef _X86_
#define BEGIN_CODESPACE_DATA data_seg(".rdata")
#define BEGIN_NAME_CODESPACE_DATA(a) data_seg(".rdata$"#a, ".rdata")
#define BEGIN_FUNCTION_CODESPACE_DATA data_seg(".rdata")
#define END_CODESPACE_DATA data_seg()
#define BEGIN_NAME_DATA(a) data_seg(".data$"#a, ".data")
#define END_NAME_DATA data_seg()
#else
#define BEGIN_FUNCTION_CODESPACE_DATA
#define BEGIN_NAME_CODESPACE_DATA(a)
#define BEGIN_CODESPACE_DATA
#define END_CODESPACE_DATA
#define BEGIN_NAME_DATA(a)
#define END_NAME_DATA
#endif
// --------------------------------------------------------------------------------
// Macro that causes the compiler to ignore a local variable or
// parameter without generating a warning.
// --------------------------------------------------------------------------------
#ifndef Unreferenced
#define Unreferenced(a) ((void)a)
#endif
// --------------------------------------------------------------------------------
// SAFECAST - Insures that a cast is valid, otherwise it won't compile
// --------------------------------------------------------------------------------
#define SAFECAST(_src, _type) (((_type)(_src)==(_src)?0:0), (_type)(_src))
// --------------------------------------------------------------------------------
// Computes the size of a member in a structure
// --------------------------------------------------------------------------------
#define sizeofMember(s,m) sizeof(((s *)0)->m)
#if 0
// --------------------------------------------------------------------------------
// Computes the byte offset to the parent class from a nested class
// --------------------------------------------------------------------------------
#define _OEOffset(class, itf) ((UINT)&(((class *)0)->itf))
// --------------------------------------------------------------------------------
// Computes the parent interface of a nested class
// --------------------------------------------------------------------------------
/------------------Merge Conflict------------------\
#define IToClass(class, itf, pitf) ((class *)(((LPSTR)pitf)-_OEOffset(class, itf)))
#endif
// --------------------------------------------------------------------------------
// SafeReleaseCnt - SafeRelease and set ulCount to the after release ref count
// --------------------------------------------------------------------------------
#define SafeReleaseCnt(_object, _refcount) \
if (_object) { \
(_refcount) = (_object)->Release (); \
(_object) = NULL; \
} else
// --------------------------------------------------------------------------------
// SafeRelease - Releases an object and sets the object to NULL
// --------------------------------------------------------------------------------
#define SafeRelease(_object) \
if (_object) { \
(_object)->Release(); \
(_object) = NULL; \
} else
// --------------------------------------------------------------------------------
// SafeFreeLibrary - Checks if _hinst is non null and then calls FreeLibrary
// --------------------------------------------------------------------------------
#define SafeFreeLibrary(_hinst) \
if (_hinst) { \
FreeLibrary(_hinst); \
_hinst = NULL; \
} else
// --------------------------------------------------------------------------------
// SafeCloseHandle
// --------------------------------------------------------------------------------
#define SafeCloseHandle(_handle) \
if (_handle) { \
CloseHandle(_handle); \
_handle = NULL; \
} else
// --------------------------------------------------------------------------------
// SafeUnmapViewOfFile
// --------------------------------------------------------------------------------
#define SafeUnmapViewOfFile(_pView) \
if (_pView) { \
UnmapViewOfFile((LPVOID)_pView); \
_pView = NULL; \
} else
// --------------------------------------------------------------------------------
// SafePidlFree
// --------------------------------------------------------------------------------
#define SafePidlFree(_pidl) \
if (_pidl) { \
PidlFree(_pidl); \
_pidl = NULL; \
} else
// --------------------------------------------------------------------------------
// SafeInternetCloseHandle
// --------------------------------------------------------------------------------
#define SafeInternetCloseHandle(_handle) \
if (_handle) { \
InternetCloseHandle(_handle); \
_handle = NULL; \
} else
// --------------------------------------------------------------------------------
// SafeDelete - safely deletes a non-referenced counted object
// --------------------------------------------------------------------------------
#define SafeDelete(_obj) \
if (_obj) { \
delete _obj; \
_obj = NULL; \
} else
// --------------------------------------------------------------------------------
// ReleaseObj - Releases an Object if it is not NULL
// --------------------------------------------------------------------------------
#ifndef ReleaseObj
#ifdef __cplusplus
#define ReleaseObj(_object) (_object) ? (_object)->Release() : 0
#else
#define ReleaseObj(_object) (_object) ? (_object)->lpVtbl->Release(_object) : 0
#endif // __cplusplus
#endif
// --------------------------------------------------------------------------------
// SafeSysFreeString - Frees a bstr if not NULL
// --------------------------------------------------------------------------------
#define SafeSysFreeString(_x) \
if (_x) { \
SysFreeString(_x);\
_x = NULL; \
} else
// -------------------------------------------------------------------------
// ReplaceInterface - Replaces a member interface with a new interface
// -------------------------------------------------------------------------
#define ReplaceInterface(_pUnk, _pUnkNew) \
{ \
if (_pUnk) \
(_pUnk)->Release(); \
if ((_pUnk) = (_pUnkNew)) \
(_pUnk)->AddRef(); \
}
#ifdef __cplusplus
}
#endif
// --------------------------------------------------------------------------------
// SetWndThisPtrOnCreate
// --------------------------------------------------------------------------------
#define SetWndThisPtrOnCreate(hwnd, lpcs) \
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)(((LPCREATESTRUCT)lpcs)->lpCreateParams))
// --------------------------------------------------------------------------------
// SetWndThisPtr
// --------------------------------------------------------------------------------
#define SetWndThisPtr(hwnd, THIS) \
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)THIS)
// --------------------------------------------------------------------------------
// GetWndThisPtr
// --------------------------------------------------------------------------------
#define GetWndThisPtr(hwnd) \
GetWindowLongPtr(hwnd, GWLP_USERDATA)
// --------------------------------------------------------------------------------
// ListView Helper Macros
// --------------------------------------------------------------------------------
#define ListView_GetSelFocused(_hwndlist) ListView_GetNextItem(_hwndlist, -1, LVNI_SELECTED|LVIS_FOCUSED)
#define ListView_GetFirstSel(_hwndlist) ListView_GetNextItem(_hwndlist, -1, LVNI_SELECTED)
#define ListView_GetFocusedItem(_hwndlist) ListView_GetNextItem(_hwndlist, -1, LVNI_FOCUSED)
#define ListView_SelectItem(_hwndlist, _i) ListView_SetItemState(_hwndlist, _i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED)
#define ListView_UnSelectItem(_hwndlist, _i) ListView_SetItemState(_hwndlist, _i, 0, LVIS_SELECTED)
#define ListView_FocusItem(_hwndlist, _i) ListView_SetItemState(_hwndlist, _i, LVIS_FOCUSED, LVIS_FOCUSED)
#if (_WIN32_IE >= 0x0400)
#define ListView_UnSelectAll(_hwndlist) { \
ListView_SetItemState(_hwndlist, -1, 0, LVIS_SELECTED|LVIS_FOCUSED); \
ListView_SetSelectionMark(_hwndlist, -1); \
}
#else
#define ListView_UnSelectAll(_hwndlist) ListView_SetItemState(_hwndlist, -1, 0, LVIS_SELECTED|LVIS_FOCUSED);
#endif
#define ListView_SelectAll(_hwndlist) ListView_SetItemState(_hwndlist, -1, LVIS_SELECTED, LVIS_SELECTED)
// --------------------------------------------------------------------------------
// MAX Move Memory Definitions
// --------------------------------------------------------------------------------
#ifdef RtlMoveMemory
#undef RtlMoveMemory
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllimport) void RtlMoveMemory(void *, const void *, unsigned long);
#ifdef __cplusplus
}
#endif
#endif
#ifndef MSOERT_NO_MEMUTIL
// --------------------------------------------------------------------------------
// Memory Utility Functions
// --------------------------------------------------------------------------------
extern IMalloc *g_pMalloc;
// --------------------------------------------------------------------------------
// SafeMemFree
// --------------------------------------------------------------------------------
#ifndef SafeMemFree
#ifdef __cplusplus
#define SafeMemFree(_pv) \
if (_pv) { \
g_pMalloc->Free(_pv); \
_pv = NULL; \
} else
#else
#define SafeMemFree(_pv) \
if (_pv) { \
g_pMalloc->lpVtbl->Free(g_pMalloc, _pv); \
_pv = NULL; \
} else
#endif // __cplusplus
#endif // SafeMemFree
// --------------------------------------------------------------------------------
// MemFree
// --------------------------------------------------------------------------------
#define MemFree(_pv) g_pMalloc->Free(_pv)
#define ReleaseMem(_pv) MemFree(_pv)
#define AthFreeString(_psz) g_pMalloc->Free((LPVOID)_psz)
// --------------------------------------------------------------------------------
// Memory Allocation Functions
// --------------------------------------------------------------------------------
LPVOID ZeroAllocate(DWORD cbSize);
BOOL MemAlloc(LPVOID* ppv, ULONG cb);
BOOL MemRealloc(LPVOID *ppv, ULONG cbNew);
HRESULT HrAlloc(LPVOID *ppv, ULONG cb);
HRESULT HrRealloc(LPVOID *ppv, ULONG cbNew);
#endif // !MSOERT_NO_MEMUTIL
// --------------------------------------------------------------------------------
// Debug Utility Functions
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_DEBUG
#endif // !MSOERT_NO_DEBUG
// --------------------------------------------------------------------------------
// String Utility Functions
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_STRUTIL
#define CCHMAX_STRINGRES 512
// Used with HrFindInetTimeZone
typedef struct tagINETTIMEZONE {
LPSTR lpszZoneCode;
INT cHourOffset;
INT cMinuteOffset;
} INETTIMEZONE, *LPINETTIMEZONE;
// Used with CchFileTimeToDateTimeSz
#define DTM_LONGDATE 0x00000001
#define DTM_NOSECONDS 0x00000002
#define DTM_NOTIME 0x00000004
#define DTM_NODATE 0x00000008
#define DTM_DOWSHORTDATE 0x00000010
#define DTM_FORCEWESTERN 0x00000020
#define DTM_NOTIMEZONEOFFSET 0x00000040
#define TOUPPERA(_ch) (CHAR)LOWORD(CharUpperA((LPSTR)(DWORD_PTR)MAKELONG(_ch, 0)))
#define TOLOWERA(_ch) (CHAR)LOWORD(CharLowerA((LPSTR)(DWORD_PTR)MAKELONG(_ch, 0)))
OESTDAPI_(LPWSTR) PszDupW(LPCWSTR pcwszSource);
OESTDAPI_(LPSTR) PszDupA(LPCSTR pcszSource);
OESTDAPI_(LPSTR) PszDupLenA(LPCSTR pcszSource, int nLen);
OESTDAPI_(BOOL) FIsEmptyA(LPCSTR pcszString);
OESTDAPI_(BOOL) FIsEmptyW(LPCWSTR pcwszString);
OESTDAPI_(LPWSTR) PszToUnicode(UINT cp, LPCSTR pcszSource);
OESTDAPI_(ULONG) UlStripWhitespace(LPTSTR lpsz, BOOL fLeading, BOOL fTrailing, ULONG *pcb);
OESTDAPI_(ULONG) UlStripWhitespaceW(LPWSTR lpwsz, BOOL fLeading, BOOL fTrailing, ULONG *pcb);
OESTDAPI_(LPSTR) PszSkipWhiteA(LPSTR psz);
OESTDAPI_(LPWSTR) PszSkipWhiteW(LPWSTR psz);
OESTDAPI_(LPSTR) PszScanToWhiteA(LPSTR psz);
OESTDAPI_(LPSTR) PszScanToCharA(LPSTR psz, CHAR ch);
OESTDAPI_(VOID) StripCRLF(LPSTR lpsz, ULONG *pcb);
OESTDAPI_(LPSTR) PszAllocA(INT nLen);
OESTDAPI_(LPWSTR) PszAllocW(INT nLen);
OESTDAPI_(BOOL) FIsSpaceA(LPSTR psz);
OESTDAPI_(BOOL) FIsSpaceW(LPWSTR psz);
OESTDAPI_(LPSTR) PszToANSI(UINT cp, LPCWSTR pcwszSource);
OESTDAPI_(UINT) StrToUintW(LPCWSTR lpSrc);
OESTDAPI_(UINT) StrToUintA(LPCSTR lpSrc);
OESTDAPI_(INT) IsDigit(LPSTR psz);
OESTDAPI_(CHAR) ChConvertFromHex(CHAR ch);
OESTDAPI_(LPSTR) PszFromANSIStreamA(LPSTREAM pstm);
OESTDAPI_(HRESULT) HrIndexOfMonth(LPCSTR pszMonth, ULONG *pulIndex);
OESTDAPI_(HRESULT) HrIndexOfWeek(LPCSTR pszDay, ULONG *pulIndex);
OESTDAPI_(HRESULT) HrFindInetTimeZone(LPCSTR pszTimeZone, LPINETTIMEZONE pTimeZone);
OESTDAPI_(LPCSTR) PszDayFromIndex(ULONG ulIndex);
OESTDAPI_(LPCSTR) PszMonthFromIndex(ULONG ulIndex);
OESTDAPI_(LPSTR) PszEscapeMenuStringA(LPCSTR pszSource, LPSTR pszQuoted, int cch);
OESTDAPI_(INT) IsPrint(LPSTR psz);
OESTDAPI_(INT) IsUpper(LPSTR psz);
OESTDAPI_(INT) IsAlphaNum(LPSTR psz);
OESTDAPI_(LPSTR) strtrim(char *s);
OESTDAPI_(LPWSTR) strtrimW(WCHAR *s);
OESTDAPI_(INT) CchFileTimeToDateTimeSz(FILETIME * pft, CHAR * szDateTime, int cch, DWORD dwFlags);
OESTDAPI_(LPCSTR) StrChrExA(UINT codepage, LPCSTR pszString, CHAR ch);
OESTDAPI_(BOOL) FIsValidFileNameCharW(WCHAR wch);
OESTDAPI_(BOOL) FIsValidFileNameCharA(UINT codepage, CHAR ch);
OESTDAPI_(ULONG) CleanupFileNameInPlaceA(UINT codepage, LPSTR psz);
OESTDAPI_(ULONG) CleanupFileNameInPlaceW(LPWSTR pwsz);
OESTDAPI_(INT) ReplaceChars(LPCSTR pszString, CHAR chFind, CHAR chReplace);
OESTDAPI_(INT) ReplaceCharsW(LPCWSTR pszString, WCHAR chFind, WCHAR chReplace);
OESTDAPI_(LPCSTR) _MSG(LPSTR pszFormat, ...);
OESTDAPI_(BOOL) IsValidFileIfFileUrl(LPSTR pszUrl);
OESTDAPI_(BOOL) IsValidFileIfFileUrlW(LPWSTR pwszUrl);
OESTDAPI_(BOOL) fGetBrowserUrlEncoding(LPDWORD pdwFlags);
typedef int (*PFGETTIMEFORMATW)(LCID Locale, DWORD dwFlags, CONST SYSTEMTIME * lpTime,
LPCWSTR pwzFormat, LPWSTR pwzTimeStr, int cchTime);
typedef int (*PFGETDATEFORMATW)(LCID Locale, DWORD dwFlags, CONST SYSTEMTIME * lpDate,
LPCWSTR pwzFormat, LPWSTR pwzDateStr, int cchDate);
typedef int (*PFGETLOCALEINFOW)(LCID Locale, LCTYPE LCType, LPWSTR lpsz, int cchData);
OESTDAPI_(BOOL) CchFileTimeToDateTimeW(FILETIME *pft, WCHAR * wsDateTime, int cch,
DWORD dwFlags, PFGETDATEFORMATW pfGetDateFormatW,
PFGETTIMEFORMATW pfGetTimeFormatW,
PFGETLOCALEINFOW pfGetLocaleInfo);
// --------------------------------------------------------------------------------
// Unicode/ANSI Function Mapping
// --------------------------------------------------------------------------------
#ifdef UNICODE
#define FIsEmpty FIsEmptyW
#define PszDup PszDupW
#define PszAlloc PszAllocW
#define FIsSpace FIsSpaceW
#define StrToUint StrToUintW
#else
#define FIsEmpty FIsEmptyA
#define PszDup PszDupA
#define PszAlloc PszAllocA
#define FIsSpace FIsSpaceA
#define StrToUint StrToUintA
#endif
#define IsSpace FIsSpaceA
#endif // !MSOERT_NO_STRUTIL
// --------------------------------------------------------------------------------
// IStream Utility Functions
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_STMUTIL
OESTDAPI_(HRESULT) HrIsStreamUnicode(LPSTREAM pstm, BOOL *pfLittleEndian);
OESTDAPI_(HRESULT) HrCopyStreamToByte(LPSTREAM lpstmIn, LPBYTE pbDest, ULONG *pcb);
OESTDAPI_(HRESULT) HrByteToStream(LPSTREAM *lppstm, LPBYTE lpb, ULONG cb);
OESTDAPI_(HRESULT) HrGetStreamSize(LPSTREAM pstm, ULONG *pcb);
OESTDAPI_(HRESULT) HrRewindStream(LPSTREAM pstm);
OESTDAPI_(HRESULT) HrCopyStream(LPSTREAM pstmIn, LPSTREAM pstmOut, ULONG *pcb);
OESTDAPI_(HRESULT) HrCopyLockBytesToStream(ILockBytes *pLockBytes, IStream *pStream, ULONG *pcbCopied);
OESTDAPI_(HRESULT) HrSafeGetStreamSize(LPSTREAM pstm, ULONG *pcb);
OESTDAPI_(HRESULT) HrGetStreamPos(LPSTREAM pstm, ULONG *piPos);
OESTDAPI_(HRESULT) HrStreamSeekSet(LPSTREAM pstm, ULONG iPos);
OESTDAPI_(HRESULT) HrCopyStreamCBEndOnCRLF(LPSTREAM lpstmIn, LPSTREAM lpstmOut, ULONG cb, ULONG *pcbActual);
OESTDAPI_(HRESULT) CreateTempFileStream(LPSTREAM *ppstmFile);
OESTDAPI_(HRESULT) HrStreamToByte(LPSTREAM lpstm, LPBYTE *lppb, ULONG *pcb);
OESTDAPI_(HRESULT) HrCopyStreamCB(LPSTREAM lpstmIn, LPSTREAM lpstmOut, ULARGE_INTEGER uliCopy, ULARGE_INTEGER *puliRead, ULARGE_INTEGER *puliWritten);
OESTDAPI_(HRESULT) HrStreamSeekCur(LPSTREAM pstm, LONG iPos);
OESTDAPI_(HRESULT) HrStreamSeekEnd(LPSTREAM pstm);
OESTDAPI_(HRESULT) HrStreamSeekBegin(LPSTREAM pstm);
OESTDAPI_(BOOL) StreamSubStringMatch(LPSTREAM pstm, TCHAR *sz);
OESTDAPI_(HRESULT) OpenFileStream(LPSTR pszFile, DWORD dwCreationDistribution, DWORD dwAccess, LPSTREAM *ppstmFile);
OESTDAPI_(HRESULT) OpenFileStreamWithFlags(LPSTR pszFile, DWORD dwCreationDistribution, DWORD dwAccess, DWORD dwFlagsAndAttributes, LPSTREAM *ppstmFile);
OESTDAPI_(HRESULT) OpenFileStreamShare(LPSTR pszFile, DWORD dwCreationDistribution, DWORD dwAccess, DWORD dwShare, LPSTREAM *ppstmFile);
OESTDAPI_(HRESULT) WriteStreamToFile(LPSTREAM pstm, LPSTR lpszFile, DWORD dwCreationDistribution, DWORD dwAccess);
OESTDAPI_(HRESULT) OpenFileStreamW(LPWSTR pszFile, DWORD dwCreationDistribution, DWORD dwAccess, LPSTREAM *ppstmFile);
OESTDAPI_(HRESULT) OpenFileStreamWithFlagsW(LPWSTR pszFile, DWORD dwCreationDistribution, DWORD dwAccess, DWORD dwFlagsAndAttributes, LPSTREAM *ppstmFile);
OESTDAPI_(HRESULT) OpenFileStreamShareW(LPWSTR pszFile, DWORD dwCreationDistribution, DWORD dwAccess, DWORD dwShare, LPSTREAM *ppstmFile);
OESTDAPI_(HRESULT) WriteStreamToFileW(LPSTREAM pstm, LPWSTR lpszFile, DWORD dwCreationDistribution, DWORD dwAccess);
#endif // !MSOERT_NO_STRUTIL
// --------------------------------------------------------------------------------
// Protected Storage
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_PROTSTOR
#include "pstore.h"
#ifdef ENABLE_RULES
#define PST_IDENT_TYPE_STRING L"Identification with rules"
#elif defined(N_TEST)
#define PST_IDENT_TYPE_STRING L"Identification test"
#else
#define PST_IDENT_TYPE_STRING L"Identification"
#endif
#define PST_IMNACCT_SUBTYPE_STRING L"INETCOMM Server Passwords"
#define PST_CERTS_SUBTYPE_STRING L"Certificate Trust"
// --------------------------------------------------------------------------------
// Protected Storage Functions
// --------------------------------------------------------------------------------
OESTDAPI_(HRESULT) PSTSetNewData(
IN IPStore *const pISecProv,
IN const GUID *const guidType,
IN const GUID *const guidSubt,
IN LPCWSTR wszAccountName,
IN const BLOB *const pclear,
OUT BLOB *const phandle);
OESTDAPI_(HRESULT) PSTGetData(
IN IPStore *const pISecProv,
IN const GUID *const guidType,
IN const GUID *const guidSubt,
IN LPCWSTR wszLookupName,
OUT BLOB *const pclear);
OESTDAPI_(HRESULT) PSTCreateTypeSubType_NoUI(
IN IPStore *const pISecProv,
IN const GUID *const guidType,
IN LPCWSTR szType,
IN const GUID *const guidSubt,
IN LPCWSTR szSubt);
OESTDAPI_(LPWSTR) WszGenerateNameFromBlob(IN BLOB blob);
OESTDAPI_(void) PSTFreeHandle(IN LPBYTE pb);
#endif // !MSOERT_NO_PROTSTOR
// --------------------------------------------------------------------------------
// CAPI Utility - A few helper functions for the crypt32 utilities
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_CAPIUTIL
#ifndef __WINCRYPT_H__
#define _CRYPT32_
#include <wincrypt.h>
#endif
typedef enum tagCERTSTATE CERTSTATE; // From mimeole.h
OESTDAPI_(LPSTR) SzGetCertificateEmailAddress(const PCCERT_CONTEXT pCert);
OESTDAPI_(HRESULT) HrDecodeObject(const BYTE *pbEncoded, DWORD cbEncoded, LPCSTR item, DWORD dwFlags,
DWORD *pcbOut, LPVOID *ppvOut);
OESTDAPI_(LPVOID) PVDecodeObject(const BYTE *pbEncoded, DWORD cbEncoded, LPCSTR item, DWORD *pcbOut);
OESTDAPI_(LPVOID) PVGetCertificateParam(PCCERT_CONTEXT pCert, DWORD dwParam, DWORD *cbOut);
OESTDAPI_(HRESULT) HrGetCertificateParam(PCCERT_CONTEXT pCert, DWORD dwParam, LPVOID * pvOut, DWORD *cbOut);
OESTDAPI_(BOOL) FMissingCert(const CERTSTATE cs);
OESTDAPI_(LPVOID) PVGetMsgParam(HCRYPTMSG hCryptMsg, DWORD dwParam, DWORD dwIndex, DWORD *pcbData);
OESTDAPI_(HRESULT) HrGetMsgParam(HCRYPTMSG hCryptMsg, DWORD dwParam, DWORD dwIndex, LPVOID * ppv, DWORD * pcbData);
LPVOID WINAPI CryptAllocFunc(size_t cbSize);
VOID WINAPI CryptFreeFunc(LPVOID pv);
HRESULT HrGetCertKeyUsage(PCCERT_CONTEXT pccert, DWORD * pdwUsage);
HRESULT HrVerifyCertEnhKeyUsage(PCCERT_CONTEXT pccert, LPCSTR pszOidUsage);
#endif // !MSOERT_NO_CAPIUTIL
// --------------------------------------------------------------------------------
// CAPI Utility - A few helper functions for the crypt32 utilities
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_RASUTIL
OESTDAPI_(HRESULT) HrCreatePhonebookEntry(HWND hwnd, DWORD *pdwRASResult);
OESTDAPI_(HRESULT) HrEditPhonebookEntry(HWND hwnd, LPTSTR pszEntryName, DWORD *pdwRASResult);
OESTDAPI_(HRESULT) HrFillRasCombo(HWND hwndComboBox, BOOL fUpdateOnly, DWORD *pdwRASResult);
#endif // !MSOERT_NO_RASUTIL
// --------------------------------------------------------------------------------
// Win32 Registry Utilities
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_REGUTIL
OESTDAPI_(VOID) CopyRegistry(HKEY hSourceKey, HKEY hDestinationKey);
#endif // !MSOERT_NO_REGUTIL
// --------------------------------------------------------------------------------
// t-wstrings
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_WSTRINGS
OESTDAPI_(BOOL) UnlocStrEqNW(LPCWSTR pwsz1, LPCWSTR pwsz2, DWORD cch);
#endif // !MSOERT_NO_WSTRINGS
// --------------------------------------------------------------------------------
// CStringParser
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_STRPARSE
#ifdef __cplusplus
#include "strparse.h"
#endif // !__cplusplus
#endif // !MSOERT_NO_STRPARSE
// --------------------------------------------------------------------------------
// DataObject Utility
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_ENUMFMT
#ifdef __cplusplus
typedef struct tagDATAOBJINFO
{
FORMATETC fe;
LPVOID pData;
DWORD cbData;
} DATAOBJINFO, *PDATAOBJINFO;
OESTDAPI_(HRESULT) CreateEnumFormatEtc(LPUNKNOWN pUnkRef, ULONG celt, PDATAOBJINFO rgInfo, LPFORMATETC rgfe,
IEnumFORMATETC ** lppstmHFile);
#endif // !__cplusplus
#endif // !MSOERT_NO_ENUMFMT
// --------------------------------------------------------------------------------
// CPrivateUnknown Utility
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_PRIVUNK
#ifdef __cplusplus
#include "privunk.h"
#endif // !__cplusplus
#endif // !MSOERT_NO_PRIVUNK
// --------------------------------------------------------------------------------
// CByteStream Object
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_BYTESTM
#ifdef __cplusplus
#include "bytestm.h"
#endif // !__cplusplus
#endif // !MSOERT_NO_BYTESTM
// --------------------------------------------------------------------------------
// CLogFile Object
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_CLOGFILE
#ifdef __cplusplus
#include "..\\msoert\\clogfile.h"
#endif // !__cplusplus
#endif // !MSOERT_NO_CLOGFILE
// --------------------------------------------------------------------------------
// CDataObject Object
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_DATAOBJ
#ifdef __cplusplus
#include "..\\msoert\\dataobj.h"
#endif // !__cplusplus
#endif // !MSOERT_NO_DATAOBJ
// --------------------------------------------------------------------------------
// CUnknownList and CVoidPtrList Objects
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_LISTOBJS
#ifdef __cplusplus
#include "..\\msoert\\listintr.h"
#endif // !__cplusplus
#endif // !MSOERT_NO_LISTOBJS
// --------------------------------------------------------------------------------
// MSHTML utilities
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_MSHTMLUTILS
#ifdef __cplusplus
#include "..\\msoert\\mshtutil.h"
#endif // !__cplusplus
#endif // !MSOERT_NO_MSHTMLUTILS
// --------------------------------------------------------------------------------
// BSTR utilities
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_BSTUTILS
#ifdef __cplusplus
#include "..\\msoert\\bstr.h"
#endif // !__cplusplus
#endif // !MSOERT_NO_BSTRUTILS
// --------------------------------------------------------------------------------
// HFILESTM utilities
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_HFILESTM
#ifdef __cplusplus
OESTDAPI_(HRESULT) CreateStreamOnHFile (LPTSTR lpszFile,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile,
LPSTREAM *lppstmHFile);
OESTDAPI_(HRESULT) CreateStreamOnHFileW(LPWSTR lpwszFile,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile,
LPSTREAM *lppstmHFile);
#endif // !__cplusplus
#endif // !MSOERT_NO_HFILESTM
// --------------------------------------------------------------------------------
// Outlook Express Runtime Utilities
// --------------------------------------------------------------------------------
#ifndef MSOERT_NO_OERTUTIL
typedef struct tagTEMPFILEINFO *LPTEMPFILEINFO;
typedef struct tagTEMPFILEINFO {
LPTEMPFILEINFO pNext;
LPSTR pszFilePath;
HANDLE hProcess;
} TEMPFILEINFO;
#ifndef HIMAGELIST
struct _IMAGELIST;
typedef struct _IMAGELIST NEAR* HIMAGELIST;
#endif
OESTDAPI_(HIMAGELIST) LoadMappedToolbarBitmap(HINSTANCE hInst, int idBitmap, int cx);
OESTDAPI_(VOID) UpdateRebarBandColors(HWND hwnd);
OESTDAPI_(HRESULT) IsPlatformWinNT(void);
OESTDAPI_(HRESULT) GenerateUniqueFileName(LPCSTR pszDirectory, LPCSTR pszFileName, LPCSTR pszExtension, LPSTR pszFilePath, ULONG cchMaxPath);
OESTDAPI_(HRESULT) CreateTempFile(LPCSTR pszSuggest, LPCSTR pszExtension, LPSTR *ppszFilePath, HANDLE *phFile);
OESTDAPI_(HRESULT) WriteStreamToFileHandle(IStream *pStream, HANDLE hFile, ULONG *pcbTotal);
OESTDAPI_(HRESULT) AppendTempFileList(LPTEMPFILEINFO *ppHead, LPSTR pszFilePath, HANDLE hProcess);
OESTDAPI_(VOID) DeleteTempFileOnShutdown(LPTEMPFILEINFO pTempFile);
OESTDAPI_(VOID) DeleteTempFileOnShutdownEx(LPSTR pszFilePath, HANDLE hProcess);
OESTDAPI_(VOID) CleanupGlobalTempFiles(void);
OESTDAPI_(HRESULT) DeleteTempFile(LPTEMPFILEINFO pTempFile);
OESTDAPI_(VOID) FreeTempFileList(LPTEMPFILEINFO pTempFileHead);
#define SafeFreeTempFileList(_p) \
{ \
if (_p) \
{ \
FreeTempFileList(_p); \
_p=NULL; \
} \
}
OESTDAPI_(BOOL) FBuildTempPath(LPTSTR lpszOrigFile, LPTSTR lpszPath, ULONG cbMaxPath, BOOL fLink);
OESTDAPI_(BOOL) FBuildTempPathW(LPWSTR lpszOrigFile, LPWSTR lpszPath, ULONG cchMaxPath, BOOL fLink);
OESTDAPI_(HRESULT) ShellUtil_GetSpecialFolderPath(DWORD dwSpecialFolder, LPSTR rgchPath);
OESTDAPI_(BOOL) FIsHTMLFile(LPSTR pszFile);
OESTDAPI_(BOOL) FIsHTMLFileW(LPWSTR pwszFile);
typedef int (*PFLOADSTRINGW)(HINSTANCE,UINT,LPWSTR,int);
typedef int (*PFMESSAGEBOXW)(HWND,LPCWSTR,LPCWSTR,UINT);
OESTDAPI_(int) MessageBoxInst(HINSTANCE hInst, HWND hwndOwner, LPTSTR pszTitle, LPTSTR psz1, LPTSTR psz2, UINT fuStyle);
OESTDAPI_(int) MessageBoxInstW(HINSTANCE hInst, HWND hwndOwner, LPWSTR pwszTitle, LPWSTR pwsz1, LPWSTR pwsz2, UINT fuStyle,
PFLOADSTRINGW pfLoadStringW, PFMESSAGEBOXW pfMessageBoxW);
// window utils
OESTDAPI_(void) IDrawText(HDC hdc, LPCTSTR pszText, RECT FAR* prc, BOOL fEllipses, int cyChar);
OESTDAPI_(HRESULT) RicheditStreamIn(HWND hwndRE, LPSTREAM pstm, ULONG uSelFlags);
OESTDAPI_(HRESULT) RicheditStreamOut(HWND hwndRE, LPSTREAM pstm, ULONG uSelFlags);
OESTDAPI_(VOID) CenterDialog(HWND hwndDlg);
OESTDAPI_(VOID) SetIntlFont(HWND hwnd);
OESTDAPI_(BOOL) GetExePath(LPCTSTR szExe, TCHAR *szPath, DWORD cch, BOOL fDirOnly);
OESTDAPI_(BOOL) BrowseForFolder(HINSTANCE hInst, HWND hwnd, TCHAR *pszDir, int cch, int idsText, BOOL fFileSysOnly);
OESTDAPI_(BOOL) BrowseForFolderW(HINSTANCE hInst, HWND hwnd, WCHAR *pwszDir, int cch, int idsText, BOOL fFileSysOnly);
OESTDAPI_(HRESULT) DoHotMailWizard(HWND hwndOwner, LPSTR pszUrl, LPSTR pszFriendly, RECT *prc, IUnknown *pUnkHost);
OESTDAPI_(LONG_PTR) SetWindowLongPtrAthW(HWND hWnd, int nIndex, LONG_PTR dwNewLong);
HRESULT GetHtmlCharset(IStream *pStmHtml, LPSTR *ppszCharset);
#endif // MSOERT_NO_OERTUTIL
typedef HANDLE HTHREAD;
typedef HANDLE HEVENT;
typedef HANDLE HPROCESS;
typedef HANDLE HANDLE_16;
typedef WPARAM WPARAM_16;
#define EXTERN_C_16
#define WINAPI_16
#define CALLBACK_16
#define EXPORT_16
#define LOADDS_16
#define HUGEP_16
#define WaitForSingleObject_16 WaitForSingleObject
#define GlobalAlloc_16 GlobalAlloc
#define GlobalFree_16 GlobalFree
#define CreateFileMapping_16 CreateFileMapping
#define MapViewOfFile_16 MapViewOfFile
#define UnmapViewOfFile_16 UnmapViewOfFile
#define CloseHandle_FM16 CloseHandle
#define CloseHandle_F16 CloseHandle
#define INVALID_HANDLE_VALUE_16 INVALID_HANDLE_VALUE
#define SetDlgThisPtr(hwnd, THIS) SetWndThisPtr(hwnd, THIS)
#define GetDlgThisPtr(hwnd) GetWndThisPtr(hwnd)
// Some one liners can be wrapped in IF_WIN16 or IF_WIN32 so that the
// code is more readable.
#define IF_WIN16(x)
#define IF_NOT_WIN16(x) x
#define IF_WIN32(x) x
#endif // __MSOERT_H