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.
|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: utils.hxx
//
// Contents: Useful classes in implementing properties.
//
// Classes: CPropSetName - Buffer which converts fmtids->names
// CSubPropertyName - Buffer which converts VT_STREAM etc -> name
//
// Functions: DfpStatusToHResult - map NTSTATUS to HRESULT
// VerifyCommitFlags - check transaction flags
// Probe - probe memory range to generate GP fault.
//
// History: 1-Mar-95 BillMo Created.
//
// Notes:
//
// Codework:
//
//--------------------------------------------------------------------------
//+-------------------------------------------------------------------------
//
// Misc functions and defines
//
//--------------------------------------------------------------------------
#if DBG
#define STACKELEMS 3
#else
#define STACKELEMS 64
#endif
extern HRESULT NtStatusToScode(NTSTATUS);
inline HRESULT DfpNtStatusToHResult(NTSTATUS nts) { if ((nts & 0xF0000000) == 0x80000000) return nts; else return(NtStatusToScode(nts)); }
#define VerifyCommitFlags(cf) \
((((cf) & ~(STGC_OVERWRITE | STGC_ONLYIFCURRENT | \ STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE)) == 0) ? S_OK : \ STG_E_INVALIDFLAG)
inline VOID Probe(VOID *pv, ULONG cb) { BYTE b = *(BYTE*)pv; b=((BYTE*)pv)[cb-1]; }
//+-------------------------------------------------------------------------
//
// Class: CPropSetName
//
// Purpose: Wrap buffer to convert
//
// Interface:
//
//
//
//
//
// Notes:
//
//--------------------------------------------------------------------------
class CPropSetName { public: CPropSetName(REFFMTID rfmtid); inline const OLECHAR * GetPropSetName() { return(_oszName); } private: OLECHAR _oszName[CWCSTORAGENAME]; };
class CStackBuffer { public: CStackBuffer(BYTE *pbStackBuf, ULONG ulElementSize, ULONG cStackElements);
~CStackBuffer();
HRESULT Init(ULONG cElements);
protected: BYTE * _pbHeapBuf;
private: BYTE * _pbStackBuf; ULONG _cbElementSize; ULONG _cStackElements; };
inline CStackBuffer::CStackBuffer( BYTE *pbStackBuf, ULONG cbElementSize, ULONG cStackElements) : _pbStackBuf(pbStackBuf), _pbHeapBuf(pbStackBuf), _cbElementSize(cbElementSize), _cStackElements(cStackElements) { }
inline CStackBuffer::~CStackBuffer() { if (_pbHeapBuf != _pbStackBuf) { delete [] _pbHeapBuf; } }
class CStackPropIdArray : public CStackBuffer { public: inline CStackPropIdArray(); inline PROPID * GetBuf();
private: PROPID _apid[STACKELEMS]; };
inline CStackPropIdArray::CStackPropIdArray() : CStackBuffer((BYTE*)_apid, sizeof(_apid[0]), sizeof(_apid)/sizeof(_apid[0])) { }
inline PROPID * CStackPropIdArray::GetBuf() { return((PROPID*)_pbHeapBuf); }
inline void PropSysFreeString(BSTR bstr) { SysFreeString(bstr); }
inline BSTR PropSysAllocString(LPOLECHAR pwsz) { return SysAllocString(pwsz); }
|