//+------------------------------------------------------------------------- // // 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(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