Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

349 lines
12 KiB

// RRECORD.H
#define DNS_RECORDTYPE_GENERIC 0x00 // 0
#define DNS_RECORDTYPE_A 0x01 // 1
#define DNS_RECORDTYPE_NS 0x02 // 2
#define DNS_RECORDTYPE_MD 0x03 // 3
#define DNS_RECORDTYPE_MF 0x04 // 4
#define DNS_RECORDTYPE_CNAME 0x05 // 5
#define DNS_RECORDTYPE_SOA 0x06 // 6
#define DNS_RECORDTYPE_MB 0x07 // 7
#define DNS_RECORDTYPE_MG 0x08 // 8
#define DNS_RECORDTYPE_MR 0x09 // 9
#define DNS_RECORDTYPE_NULL 0x0a // 10
#define DNS_RECORDTYPE_WKS 0x0b // 11
#define DNS_RECORDTYPE_PTR 0x0c // 12
#define DNS_RECORDTYPE_HINFO 0x0d // 13
#define DNS_RECORDTYPE_MINFO 0x0e // 14
#define DNS_RECORDTYPE_MX 0x0f // 15
#define DNS_RECORDTYPE_TXT 0x10 // 16
#define DNS_RECORDTYPE_RP 0x11 // 17
#define DNS_RECORDTYPE_AFSDB 0x12 // 18
#define DNS_RECORDTYPE_X25 0x13 // 19
#define DNS_RECORDTYPE_ISDN 0x14 // 20
#define DNS_RECORDTYPE_RT 0x15 // 21
#define DNS_RECORDTYPE_NSAP 0x16 // 22
#define DNS_RECORDTYPE_NSAPPTR 0x17 // 23
#define DNS_RECORDTYPE_SIG 0x18 // 24
#define DNS_RECORDTYPE_KEY 0x19 // 25
#define DNS_RECORDTYPE_PX 0x1a // 26
#define DNS_RECORDTYPE_GPOS 0x1b // 27
#define DNS_RECORDTYPE_AAAA 0x1c // 28
#define DNS_RECORDTYPE_IXFR 0xfb // 251
#define DNS_RECORDTYPE_AXFR 0xfc // 252
#define DNS_RECORDTYPE_MAILB 0xfd // 253
#define DNS_RECORDTYPE_MAILA 0xfe // 254
#define DNS_RECORDTYPE_ALL 0xff // 255
#define DNS_RECORDTYPE_WINS DNS_TYPE_WINS
#define DNS_RECORDTYPE_NBSTAT DNS_TYPE_NBSTAT
typedef WORD WRRT;
typedef WORD IRRT;
// Hungarian notation (also used in string table)
// RRT - Resource Record Type
// RRD - Resource Record Description
// RRN - Resource Record Name
// RRH - Resource Record Help
//
// iRRT - Index of a resource type
// wRRT - Value of a resource type
//
#define iRRT_Generic 0
#define iRRT_A 1
#define iRRT_NS 2
#define iRRT_MD 3
#define iRRT_MF 4
#define iRRT_CNAME 5
#define iRRT_SOA 6
#define iRRT_MB 7
#define iRRT_MG 8
#define iRRT_MR 9
#define iRRT_NULL 10
#define iRRT_WKS 11
#define iRRT_PTR 12
#define iRRT_HINFO 13
#define iRRT_MINFO 14
#define iRRT_MX 15
#define iRRT_TXT 16
#define iRRT_RP 17
#define iRRT_AFSDB 18
#define iRRT_X25 19
#define iRRT_ISDN 20
#define iRRT_RT 21
#define iRRT_NSAP 22
#define iRRT_NSAPPTR 23
#define iRRT_SIG 24
#define iRRT_KEY 25
#define iRRT_PX 26
#define iRRT_GPOS 27
#define iRRT_AAAA 28
#define iRRT_1To1Last 28 // Last index where a wRRT == iRRT
#define iRRT_IXFR 29
#define iRRT_AXFR 30
#define iRRT_MAILB 31
#define iRRT_MAILA 32
#define iRRT_WINS 33
#define iRRT_NBSTAT 34
#define iRRT_Last 34 // Last know resource record
#define iRRT_Max (iRRT_Last+1) // Maximum resource record
#define iRRT_Nil 0xFFFF // Invalid resource record
#define RRT_mskfHasShortName 0x0001
#define RRT_mskfShowEdit0 0x0002
#define RRT_mskfShowEdit1 0x0004
#define RRT_mskfShowEdit2 0x0008
#define RRT_mskfShowEdit3 0x0800
#define RRT_mskfShowIpEdit1 0x0010
#define RRT_mskfShowIpEdit2 0x0020
#define RRT_mskfShowButtons 0x1000
#define RRT_mskfShrinkEdit1 0x0040
#define RRT_mskfShrinkEdit2 0x0080
#define RRT_mskfShrinkEdit3 0x2000
#define RRT_mskfNoHelp 0x0100 // Record has a no help and/or description
#define RRT_mskfNoAutoPrefix 0x0200
#define RRT_mskfHasForPrefix 0x0400
#define RRT_mskfIsSameKindOf 0x8000
#define RRT_mskSameKindOf 0x00FF
#define SHORT_STRING_LEN 10
#define IP_ADDR_LEN 16
struct RRT_INFO
{
WRRT wType; // Resource Type
WORD wIdString; // String IDs (wIdListBox, wIdName1, wIdHelp1, wIdName2, wIdHelp2)
WORD wFlags; // Control Flags
WORD wUnused; // Unused yet
};
// Resource Record Type Flags
const RRT_INFO rgRRTInfo[iRRT_Max] =
{
{ DNS_RECORDTYPE_GENERIC, IDS_RRD_GENERIC,
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 | RRT_mskfShowEdit2 | RRT_mskfShrinkEdit1, 0 },
{ DNS_RECORDTYPE_A, IDS_RRD_ADDRESS, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 | RRT_mskfShowIpEdit2 | RRT_mskfHasShortName, 0 },
{ DNS_RECORDTYPE_NS, IDS_RRD_NS, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 | RRT_mskfNoHelp, 0 },
{ DNS_RECORDTYPE_MD, 0, 0, 0 },
{ DNS_RECORDTYPE_MF, 0, 0, 0 },
{ DNS_RECORDTYPE_CNAME, IDS_RRD_CNAME,
RRT_mskfNoAutoPrefix | RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfHasShortName },
{ DNS_RECORDTYPE_SOA, IDS_RRD_SOA,
RRT_mskfNoAutoPrefix | RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2},
{ DNS_RECORDTYPE_MB, IDS_RRD_MB, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfHasShortName},
{ DNS_RECORDTYPE_MG, IDS_RRD_MG, RRT_mskfNoAutoPrefix | RRT_mskfShowEdit0 | RRT_mskfShowEdit1},
{ DNS_RECORDTYPE_MR, IDS_RRD_MR, RRT_mskfNoAutoPrefix | RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfHasShortName},
{ DNS_RECORDTYPE_NULL, 0, 0, 0 },
{ DNS_RECORDTYPE_WKS, IDS_RRD_WKS,RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowIpEdit2 | RRT_mskfShowEdit3 | RRT_mskfShowButtons |
RRT_mskfHasShortName },
{ DNS_RECORDTYPE_PTR, IDS_RRD_PTR,
RRT_mskfNoAutoPrefix | RRT_mskfShowIpEdit1 | RRT_mskfShowEdit1 },
{ DNS_RECORDTYPE_HINFO, IDS_RRD_HINFO, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfShowEdit3 | RRT_mskfHasShortName },
{ DNS_RECORDTYPE_MINFO, IDS_RRD_MINFO, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfShowEdit3 | RRT_mskfHasShortName },
{ DNS_RECORDTYPE_MX, IDS_RRD_MX, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfShowEdit3 | RRT_mskfShrinkEdit3 | RRT_mskfHasShortName, 0 },
{ DNS_RECORDTYPE_TXT, IDS_RRD_TXT, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 | RRT_mskfShowEdit2 | RRT_mskfHasShortName, 0 },
{ DNS_RECORDTYPE_RP, IDS_RRD_RP, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfShowEdit3 | RRT_mskfHasShortName },
{ DNS_RECORDTYPE_AFSDB, IDS_RRD_AFSDB, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfShowButtons |
RRT_mskfHasShortName },
{ DNS_RECORDTYPE_X25, IDS_RRD_X25, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfHasShortName},
{ DNS_RECORDTYPE_ISDN, IDS_RRD_ISDN, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfShowEdit3 | RRT_mskfHasShortName },
{ DNS_RECORDTYPE_RT, IDS_RRD_RT, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 |
RRT_mskfShowEdit2 | RRT_mskfShowEdit3 | RRT_mskfHasShortName },
{ DNS_RECORDTYPE_NSAP, 0, 0, 0 },
{ DNS_RECORDTYPE_NSAPPTR, 0, 0, 0 },
{ DNS_RECORDTYPE_SIG, 0, 0, 0 },
{ DNS_RECORDTYPE_KEY, 0, 0, 0 },
{ DNS_RECORDTYPE_PX, 0, 0, 0 },
{ DNS_RECORDTYPE_GPOS, 0, 0, 0 },
{ DNS_RECORDTYPE_AAAA, IDS_RRD_AAAA, RRT_mskfNoAutoPrefix |
RRT_mskfShowEdit0 | RRT_mskfShowEdit1 | RRT_mskfShowEdit2 | RRT_mskfHasShortName, 0 },
{ DNS_RECORDTYPE_IXFR, 0, 0, 0 },
{ DNS_RECORDTYPE_AXFR, 0, 0, 0 },
{ DNS_RECORDTYPE_MAILB, 0, 0, 0 },
{ DNS_RECORDTYPE_MAILA, 0, 0, 0 },
{ DNS_RECORDTYPE_WINS, 0, 0, 0 },
{ DNS_RECORDTYPE_NBSTAT, 0, 0, 0 }
};
#ifdef DEBUG
void DbgPrintDnsRecord(DWORD dwTraceFlags, const DNS_RPC_RECORD * pDnsRecord);
#else
#define DbgPrintDnsRecord(dwTraceFlags, pDnsRecord)
#endif // ~DEBUG
// Array of pointers to the known resource type
extern LPTSTR rgszRRT_Names[];
// Buffer to hold IDS_RRT_S_RECORD
extern TCHAR szRecordTypeFmt[];
/////////////////////////////////////////////////////////////////////////////
IRRT IrrtFromWrrt(WRRT wRRT);
inline WRRT WrrtFromIrrt(IRRT iRRT)
{
Assert(iRRT < iRRT_Max);
return rgRRTInfo[iRRT].wType;
} // WrrtFromIrrt
inline const TCHAR * const IRRT_PchGetName(IRRT iRRT)
{
Assert(iRRT < iRRT_Max);
return (const TCHAR *)rgszRRT_Names[iRRT];
} // IRRT_PchGetName
/////////////////////////////////////////////////////////////////////////////
class CResourceRecordDlgHandler
{
friend class CRecordWiz;
protected:
// Initial values
HWND m_hdlg; // Handle of the dialog
HWND m_hwndList; // Handle of the resource type list
HWND m_hwndStatic0;
HWND m_hwndStatic1;
HWND m_hwndStatic2;
HWND m_hwndStatic3;
HWND m_hwndStatic4;
HWND m_hwndEdit0;
HWND m_hwndEdit1;
HWND m_hwndEdit2;
HWND m_hwndEdit3;
HWND m_hwndIpEdit1;
HWND m_hwndIpEdit2;
HWND m_hwndRadio1;
HWND m_hwndRadio2;
HWND m_hwndStaticTTL;
HWND m_hwndEditTTL;
HWND m_hwndSpinTTL;
HWND m_hwndComboTTL;
RECT m_rcEdit0;
RECT m_rcEdit1;
RECT m_rcEdit2;
RECT m_rcEdit3;
RECT m_rcStatic0;
RECT m_rcStatic1;
RECT m_rcStatic2;
RECT m_rcStatic3;
SIZE m_sizeStatic;
SIZE m_sizeEdit;
SIZE m_sizeIpEdit;
// User Init variables
CDnsRpcRecord * m_pCurrentDRR; // For "Record Properties" (existing record)
CDnsRpcRecord * m_pParentDRR; // For "New Record" from a RR
CDomainNode * m_pParentDomain; // For "New Record" from DomainNode
BOOL m_fHostParent; // "For Host" vs "For Domain"
char m_ipPTR_IpAddr[IP_ADDR_LEN]; // For PTR records.
// Volatile variables
BOOL m_fSkipBugInEditControl; // Well known windows bug in edit control
IRRT m_iRRT;
HWND m_hwndAutoFillPrev;
WORD m_wFlagsPrev;
UINT m_wIdStringDescriptionPrev;
public:
void OnInitDialog(HWND hdlg, IN const IRRT rgIrrtListBox[], IN const DNS_RPC_RECORD * pDnsRecordInit = NULL);
void InitRecordData(IN const DNS_RPC_RECORD * pDnsRecord);
void SetCurrentRecord(CDnsRpcRecord * pCurrentDRR, UINT idsCaptionExtra);
void SetParentDomain(CDnsRpcRecord * pParentDRR);
void SetParentDomain(CDomainNode * pParentDomain);
void OnUpdateControls();
BOOL FGetRecordData(OUT DNS_RPC_RECORD * pDnsRecordData, UINT cbBufferSize);
BOOL FIsRecordValid();
BOOL FIsRecordDirty();
BOOL FOnOK(); // When OK button is clicked
#ifdef DEBUG
BOOL m_fInit;
CResourceRecordDlgHandler() { Destroy(); }
void Destroy() { GarbageInit(this, sizeof(*this)); m_fInit = FALSE; }
#endif // DEBUG
}; // CResourceRecordDlgHandler
/////////////////////////////////////////////////////////////////////////////
// CRecordWiz
//
// Generic Wizard for creating resource records
class CRecordWiz
{
private:
CDomainNode * m_pParentDomain;
union
{
char m_szHostName[cchDnsNameMax]; // Host name
char m_szDomainName[cchDnsNameMax]; // Domain name
};
// NewDomain/NewHost dialog
UINT m_ids; // String Id
// NewRecord/RecordProperties
CDnsRpcRecord * m_pDRRCurrent;
BOOL m_fReadOnly;
BOOL m_fNewRecord;
const IRRT * m_pIrrtInit; // What RRTs to put in the listbox (May be null if m_pDnsRecordInit is not)
const DNS_RPC_RECORD * m_pDnsRecordInit; // Pointer to the record to initialize
public:
void DoNewRecord(CDomainNode * pParentDomain);
void DoNewRecord(CDnsRpcRecord * pDRRHost);
void DoNewHost(CDomainNode * pParentDomain);
void DoNewDomain(CDomainNode * pParentDomain);
void DoProperties(CDnsRpcRecord * pDRR);
protected:
static CRecordWiz * s_pThis;
static BOOL CALLBACK DlgProcNewDomain(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
static BOOL CALLBACK DlgProcRecordProperties(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
}; // CRecordWiz
// So far, we need only one handler at the time
extern CResourceRecordDlgHandler g_ResourceRecordDlgHandler;