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

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