VmDnsRecordArrayToList( IntPtr pRecordArrayPtr ) { List <VmDnsRecord> result = new List <VmDnsRecord>(); VMDNS_RECORD_ARRAY pRecordArray = (VMDNS_RECORD_ARRAY) Marshal.PtrToStructure(pRecordArrayPtr, typeof(VMDNS_RECORD_ARRAY)); IntPtr pRecord = pRecordArray.pRecords; for (int i = 0; i < pRecordArray.dwCount; ++i) { VmDnsRecord record = VmDnsCreateRecordFromBuffer(pRecord); result.Add(record); pRecord = (IntPtr)((long)pRecord + VMDNS_RECORD_SIZE); } return(result); }
CreateRecordFromBuffer(IntPtr pRecord) { VmDnsRecord record = null; IntPtr pField = pRecord; string name = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(pField)); pField = (IntPtr)((long)pField + Marshal.SizeOf(typeof(IntPtr))); RecordType type = (RecordType)Marshal.ReadInt16(pField); switch (type) { case RecordType.VMDNS_RR_TYPE_A: record = new VmDnsRecordA( (VMDNS_RECORD_A) Marshal.PtrToStructure( pRecord, typeof(VMDNS_RECORD_A))); break; case RecordType.VMDNS_RR_TYPE_AAAA: record = new VmDnsRecordAAAA( (VMDNS_RECORD_AAAA) Marshal.PtrToStructure( pRecord, typeof(VMDNS_RECORD_AAAA))); break; case RecordType.VMDNS_RR_TYPE_SRV: record = new VmDnsRecordSRV( (VMDNS_RECORD_SRV) Marshal.PtrToStructure( pRecord, typeof(VMDNS_RECORD_SRV))); break; case RecordType.VMDNS_RR_TYPE_NS: record = new VmDnsRecordNS( (VMDNS_RECORD_NS) Marshal.PtrToStructure( pRecord, typeof(VMDNS_RECORD_NS))); break; case RecordType.VMDNS_RR_TYPE_PTR: record = new VmDnsRecordPTR( (VMDNS_RECORD_PTR) Marshal.PtrToStructure( pRecord, typeof(VMDNS_RECORD_PTR))); break; case RecordType.VMDNS_RR_TYPE_CNAME: record = new VmDnsRecordCNAME( (VMDNS_RECORD_CNAME) Marshal.PtrToStructure( pRecord, typeof(VMDNS_RECORD_CNAME))); break; case RecordType.VMDNS_RR_TYPE_SOA: record = new VmDnsRecordSOA( (VMDNS_RECORD_SOA) Marshal.PtrToStructure( pRecord, typeof(VMDNS_RECORD_SOA))); break; default: throw new NotSupportedException(string.Format("Unknown type: {0}", type)); } return(record); }
DeleteRecord( VmDnsRecord record ) { record.DeleteFromZone(this.Name, session); }
AddRecord( VmDnsRecord record ) { record.AddToZone(this.Name, session); }