windows-nt/Source/XPSP1/NT/shell/ext/msident/multiutl.h
2020-09-26 16:20:57 +08:00

131 lines
3.6 KiB
C++

#ifndef __MULTIUTL_H
#define __MULTIUTL_H
#include <assert.h>
#include "objidl.h"
#include <pstore.h>
#include "multiusr.h"
#ifndef Assert
#ifdef DEBUG
#define Assert(a) assert(a)
#define SideAssert(a) Assert(a)
#define AssertSz(a, sz) Assert(a)
#define ASSERT_MSGA 1 ? (void)0 : (void)
#else // DEBUG
#define ASSERT_MSGA 1 ? (void)0 : (void)
#define Assert(a)
#define SideAssert(a) (a)
#define AssertSz(a, sz)
#endif // DEBUG, else
#endif
#ifdef UNICODE
#define FIsSpace FIsSpaceW
#else
#define FIsSpace FIsSpaceA
#endif
// Context-sensitive Help utility.
typedef struct _tagHELPMAP
{
DWORD id;
DWORD hid;
} HELPMAP, *LPHELPMAP;
BOOL OnContextHelp(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, HELPMAP const * rgCtxMap);
ULONG UlStripWhitespace(LPTSTR lpsz, BOOL fLeading, BOOL fTrailing, ULONG *pcb);
void EncodeUserPassword(TCHAR *lpszPwd, ULONG *cb);
void DecodeUserPassword(TCHAR *lpszPwd, ULONG *cb);
STDAPI WriteIdentityPassword(GUID *puidIdentity, PASSWORD_STORE *pPwdStore);
STDAPI ReadIdentityPassword(GUID *puidIdentity, PASSWORD_STORE *pPwdStore);
STDAPI CreatePStore(IPStore **ppIPStore);
STDAPI ReleasePStore(IPStore *pIPStore);
// --------------------------------------------------------------------------------
// SafeRelease - Releases an object and sets the object to NULL
// --------------------------------------------------------------------------------
#define SafeRelease(_object) \
if (_object) { \
(_object)->Release(); \
(_object) = NULL; \
} else
void MemFree(void* pv);
BOOL MemAlloc(void** ppv, ULONG cb);
BOOL MemRealloc(void** ppv, ULONG cbNew);
// --------------------------------------------------------------------------------
// TraceCall(_pszFunc)
// -------------------------------------------------------------------------------
#ifdef DEBUG
EXTERN_C void DebugStrf(LPTSTR lpszFormat, ...);
#endif
#if defined(DEBUG)
#define TraceCall(_pszFunc) DebugStrf("%s\r\n", _pszFunc)
#else
#define TraceCall(_pszFunc)
#endif
// --------------------------------------------------------------------------------
// GUID <-> Ascii string functions
// --------------------------------------------------------------------------------
HRESULT GUIDFromAString(TCHAR *lpsz, GUID *puid);
int AStringFromGUID(GUID *rguid, TCHAR *lpsz, int cch);
typedef enum
{
NS_NONE = 0,
NS_PRE_NOTIFY,
NS_NOTIFIED
} NOTIFICATION_STATE;
typedef struct tagUNKLIST_ENTRY
{
HWND hwnd;
DWORD dwThreadId;
DWORD dwCookie;
BYTE bState;
IUnknown *punk;
} UNKLIST_ENTRY;
class CNotifierList
{
public:
CNotifierList();
virtual ~CNotifierList();
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
inline DWORD GetLength(void) {return m_count;}
HRESULT Add(IUnknown *punk, DWORD *pdwCookie);
HRESULT RemoveCookie(DWORD dwCookie);
HRESULT Remove(int iIndex);
HRESULT GetAtIndex(int iIndex, IUnknown **ppunk);
HRESULT CreateNotifyWindow();
HRESULT ReleaseWindow();
HRESULT SendNotification(UINT msg, DWORD dwType);
HRESULT PreNotify();
int GetNextNotify();
private:
ULONG m_cRef;
int m_count;
int m_ptrCount;
DWORD m_nextCookie;
UNKLIST_ENTRY *m_entries;
CRITICAL_SECTION m_rCritSect;
};
#endif //__MULTIUTL_H