windows-nt/Source/XPSP1/NT/admin/snapin/dfsadmin/dfsgui/bufmgr.h
2020-09-26 16:20:57 +08:00

99 lines
2.2 KiB
C++

#ifndef __BUFMGR_H__
#define __BUFMGR_H__
#include "netutils.h" //NETNAMELIST
#include <map>
using namespace std;
#define WM_USER_GETDATA_THREAD_DONE WM_USER + 200
enum BUFFER_ENTRY_TYPE {
BUFFER_ENTRY_TYPE_VALID = 0,
BUFFER_ENTRY_TYPE_ERROR,
BUFFER_ENTRY_TYPE_INPROGRESS
};
class CEntryData
{
public:
CComBSTR m_bstrNodeName;
NODETYPE m_nNodeType;
HTREEITEM m_hItem;
NETNAMELIST* m_pList;
HRESULT m_hr;
CEntryData(LPCTSTR pszNodeName, NODETYPE nNodeType, HTREEITEM hItem);
~CEntryData();
inline LPCTSTR GetNodeName() { return m_bstrNodeName; }
inline NODETYPE GetNodeType() { return m_nNodeType; }
inline HTREEITEM GetTreeItem() { return m_hItem; }
inline NETNAMELIST* GetList() { return m_pList; }
inline HRESULT GetEntryHRESULT() { return m_hr; };
void SetEntry(PVOID pList, HRESULT hr);
enum BUFFER_ENTRY_TYPE GetEntryType();
void ReSet();
};
struct mapcmpfn
{
bool operator()(PTSTR p1, PTSTR p2) const
{
return lstrcmpi(p1, p2) < 0;
}
};
typedef map<PTSTR, CEntryData *, mapcmpfn> Cache;
class CBufferManager
{
private:
LONG m_cRef; // instance reference count
HWND m_hDlg; // the owner dialog which owns this instance
LONG m_lContinue; // synchronization flag between owner dialog and all the related running threads
CRITICAL_SECTION m_CriticalSection; // synchronize access to the buffer
Cache m_map; // NodeName ==> CEntryData*. The Buffer.
void FreeBuffer();
// constructor
CBufferManager(HWND hDlg);
// destructor
~CBufferManager();
public:
static HRESULT CreateInstance(
IN HWND hDlg,
OUT CBufferManager **ppBufferManager
);
LONG AddRef();
LONG Release();
void SignalExit();
BOOL ShouldExit();
HRESULT LoadInfo(
IN PCTSTR pszNodeName,
IN NODETYPE nNodeType,
IN HTREEITEM hItem,
OUT CEntryData **ppInfo
);
HRESULT AddInfo(
IN PCTSTR pszNodeName,
IN PVOID pList,
IN HRESULT hr,
OUT PVOID* ppv
);
void ThreadReport(
IN PVOID ptr,
IN HRESULT hr
);
HRESULT StartThread(
IN PCTSTR pszNodeName,
IN NODETYPE nNodeType
);
};
#endif // __BUFMGR_H__