예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 DeleteRecord(
     VmDnsRecord record
     )
 {
     record.DeleteFromZone(this.Name, session);
 }
예제 #4
0
 AddRecord(
     VmDnsRecord record
     )
 {
     record.AddToZone(this.Name, session);
 }