239 lines
7.7 KiB
C++
239 lines
7.7 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1998 - 1999
|
|
//
|
|
// File: common.h
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#ifndef _COMMON_ADSIEDIT_H
|
|
#define _COMMON_ADSIEDIT_H
|
|
|
|
class CConnectionData;
|
|
class CCredentialObject;
|
|
|
|
//////////////////////////////////////////////
|
|
#define MAX_PASSWORD_LENGTH 15 // not counting NULL terminator
|
|
|
|
//////////////////////////////////////////////
|
|
// Global API
|
|
|
|
HRESULT OpenObjectWithCredentials(
|
|
CConnectionData* pConnectData,
|
|
const BOOL bUseCredentials,
|
|
LPCWSTR lpszPath,
|
|
const IID& iid,
|
|
LPVOID* ppObject,
|
|
HWND hWnd,
|
|
HRESULT& hResult
|
|
);
|
|
|
|
HRESULT OpenObjectWithCredentials(
|
|
CCredentialObject* pCredObject,
|
|
LPCWSTR lpszPath,
|
|
const IID& iid,
|
|
LPVOID* ppObject
|
|
);
|
|
|
|
HRESULT CALLBACK BindingCallbackFunction(LPCWSTR lpszPathName,
|
|
DWORD dwReserved,
|
|
REFIID riid,
|
|
void FAR * FAR * ppObject,
|
|
LPARAM lParam);
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Commonly used utilities
|
|
//
|
|
inline void CopyStringList(CStringList *dest, const CStringList *src)
|
|
{
|
|
dest->RemoveAll();
|
|
dest->AddTail(const_cast<CStringList*>(src));
|
|
}
|
|
HRESULT VariantToStringList( VARIANT& refvar, CStringList& refstringlist);
|
|
HRESULT StringListToVariant( VARIANT& refvar, const CStringList& refstringlist);
|
|
VARTYPE VariantTypeFromSyntax(LPCWSTR lpszProp );
|
|
HRESULT GetItemFromRootDSE(LPCWSTR lpszRootDSEItem, CString& sItem, CConnectionData* pConnectData);
|
|
HRESULT GetRootDSEObject(CConnectionData* pConnectData, IADs** ppDirObject);
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Formats Error Messages
|
|
//
|
|
BOOL GetErrorMessage(HRESULT hr, CString& szErrorString, BOOL bTryADsIErrors = TRUE);
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Converts ADSTYPE to/from String
|
|
//
|
|
void GetStringFromADsValue(const PADSVALUE pADsValue, CString& szValue, DWORD dwMaxCharCount = 0);
|
|
void GetStringFromADs(const ADS_ATTR_INFO* pInfo, CStringList& sList, DWORD dwMaxCharCount = 0);
|
|
ADSTYPE GetADsTypeFromString(LPCWSTR lps, CString& szSyntax);
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// type conversions
|
|
//
|
|
void wtoli(LPCWSTR lpsz, LARGE_INTEGER& liOut);
|
|
void litow(LARGE_INTEGER& li, CString& sResult);
|
|
void ultow(ULONG ul, CString& sResult);
|
|
|
|
BOOL UnicodeToChar(LPWSTR pwszIn, LPTSTR * pptszOut);
|
|
BOOL CharToUnicode(LPTSTR ptszIn, LPWSTR * ppwszOut);
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// IO to/from Streams
|
|
//
|
|
void SaveStringToStream(IStream* pStm, const CString& sString);
|
|
HRESULT SaveStringListToStream(IStream* pStm, CStringList& sList);
|
|
void LoadStringFromStream(IStream* pStm, CString& sString);
|
|
HRESULT LoadStringListFromStream(IStream* pStm, CStringList& sList);
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// Message Boxes
|
|
int ADSIEditMessageBox(LPCTSTR lpszText, UINT nType);
|
|
int ADSIEditMessageBox(UINT nIDPrompt, UINT nType);
|
|
void ADSIEditErrorMessage(PCWSTR pszMessage);
|
|
void ADSIEditErrorMessage(HRESULT hr);
|
|
void ADSIEditErrorMessage(HRESULT hr, UINT nIDPrompt, UINT nType);
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Other utils
|
|
BOOL LoadStringsToComboBox(HINSTANCE hInstance, CComboBox* pCombo,
|
|
UINT nStringID, UINT nMaxLen, UINT nMaxAddCount);
|
|
void ParseNewLineSeparatedString(LPWSTR lpsz, LPWSTR* lpszArr, int* pnArrEntries);
|
|
void LoadStringArrayFromResource(LPWSTR* lpszArr,
|
|
UINT* nStringIDs,
|
|
int nArrEntries,
|
|
int* pnSuccessEntries);
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define ByteOffset(base, offset) (((LPBYTE)base)+offset)
|
|
|
|
void GetStringArrayFromStringList(CStringList& sList, LPWSTR** ppStrArr, UINT* nCount);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// UI helper classes
|
|
|
|
// Fwd declaration
|
|
class CByteArrayDisplay;
|
|
|
|
#define BYTE_ARRAY_DISPLAY_HEX 0x00000001
|
|
#define BYTE_ARRAY_DISPLAY_DEC 0x00000002
|
|
#define BYTE_ARRAY_DISPLAY_BIN 0x00000004
|
|
#define BYTE_ARRAY_DISPLAY_OCT 0x00000008
|
|
|
|
class CByteArrayComboBox : public CComboBox
|
|
{
|
|
public:
|
|
BOOL Initialize(CByteArrayDisplay* pDisplay, DWORD dwDisplayFlags);
|
|
|
|
DWORD GetCurrentDisplay();
|
|
void SetCurrentDisplay(DWORD dwCurrentDisplayFlag);
|
|
|
|
protected:
|
|
afx_msg void OnSelChange();
|
|
|
|
private:
|
|
CByteArrayDisplay* m_pDisplay;
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|
|
class CByteArrayEdit : public CEdit
|
|
{
|
|
public:
|
|
CByteArrayEdit();
|
|
~CByteArrayEdit();
|
|
BOOL Initialize(CByteArrayDisplay* pDisplay);
|
|
|
|
DWORD GetLength();
|
|
BYTE* GetDataPtr();
|
|
DWORD GetDataCopy(BYTE** ppData);
|
|
|
|
void SetData(BYTE* pData, DWORD dwLength);
|
|
|
|
void OnChangeDisplay();
|
|
|
|
afx_msg void OnChange();
|
|
|
|
private:
|
|
CByteArrayDisplay* m_pDisplay;
|
|
|
|
BYTE* m_pData;
|
|
DWORD m_dwLength;
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
};
|
|
|
|
class CByteArrayDisplay
|
|
{
|
|
public:
|
|
CByteArrayDisplay()
|
|
: m_dwPreviousDisplay(0),
|
|
m_dwCurrentDisplay(0),
|
|
m_dwMaxSizeBytes(0),
|
|
m_nMaxSizeMessage(0)
|
|
{}
|
|
~CByteArrayDisplay() {}
|
|
|
|
BOOL Initialize(UINT nEditCtrl,
|
|
UINT nComboCtrl,
|
|
DWORD dwDisplayFlags,
|
|
DWORD dwDefaultDisplay,
|
|
CWnd* pParent,
|
|
DWORD dwMaxSizeBytes,
|
|
UINT nMaxSizeMessage);
|
|
|
|
void ClearData();
|
|
void SetData(BYTE* pData, DWORD dwLength);
|
|
DWORD GetData(BYTE** ppData);
|
|
|
|
void OnEditChange();
|
|
void OnTypeChange(DWORD dwCurrentDisplayFlag);
|
|
DWORD GetCurrentDisplay() { return m_dwCurrentDisplay; }
|
|
void SetCurrentDisplay(DWORD dwCurrentDisplay);
|
|
DWORD GetPreviousDisplay() { return m_dwPreviousDisplay; }
|
|
|
|
private:
|
|
CByteArrayEdit m_edit;
|
|
CByteArrayComboBox m_combo;
|
|
|
|
DWORD m_dwPreviousDisplay;
|
|
DWORD m_dwCurrentDisplay;
|
|
|
|
DWORD m_dwMaxSizeBytes; // The maximum number of bytes that will be shown in the edit box
|
|
UINT m_nMaxSizeMessage; // The message that is put in the edit box when the max size is reached
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// String to byte array conversion routines
|
|
|
|
DWORD HexStringToByteArray(PCWSTR pszHexString, BYTE** ppByte);
|
|
void ByteArrayToHexString(BYTE* pByte, DWORD dwLength, CString& szHexString);
|
|
|
|
DWORD OctalStringToByteArray(PCWSTR pszHexString, BYTE** ppByte);
|
|
void ByteArrayToOctalString(BYTE* pByte, DWORD dwLength, CString& szHexString);
|
|
|
|
DWORD DecimalStringToByteArray(PCWSTR pszDecString, BYTE** ppByte);
|
|
void ByteArrayToDecimalString(BYTE* pByte, DWORD dwLength, CString& szDecString);
|
|
|
|
DWORD BinaryStringToByteArray(PCWSTR pszBinString, BYTE** ppByte);
|
|
void ByteArrayToBinaryString(BYTE* pByte, DWORD dwLength, CString& szBinString);
|
|
|
|
DWORD WCharStringToByteArray(PCWSTR pszWString, BYTE** ppByte);
|
|
void ByteArrayToWCharString(BYTE* pByte, DWORD dwLength, CString& szWString);
|
|
|
|
DWORD CharStringToByteArray(PCSTR pszCString, BYTE** ppByte);
|
|
void ByteArrayToCharString(BYTE* pByte, DWORD dwLength, CString& szCString);
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
BOOL LoadFileAsByteArray(PCWSTR pszPath, LPBYTE* ppByteArray, DWORD* pdwSize);
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
BOOL ConvertToFixedPitchFont(HWND hwnd);
|
|
|
|
#endif _COMMON_ADSIEDIT_H |