Согласно информации, которую я нашел, я использую структуру MIB_IPNETROW при обработке моей программы редактирования ARP:
const int MAXLEN_PHYSADDR = 8;
const int ERROR_INSUFFICIENT_BUFFER = 122;
[StructLayout(LayoutKind.Sequential)]
private struct MIB_IPNETROW
{
[MarshalAs(UnmanagedType.U4)]
public int dwIndex;
[MarshalAs(UnmanagedType.U4)]
public int dwPhysAddrLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst =
MAXLEN_PHYSADDR)]
public byte[] bPhysAddr;
[MarshalAs(UnmanagedType.U4)]
public int dwAddr;
[MarshalAs(UnmanagedType.U4)]
public int dwType;
}
И это нормально, когда я получаю таблицу ARP через функцию GetIpNetTable(), но проблема заключается в GetIpNetTable(), который выдает System.AccessViolationException: 'Попытка чтения или записи защищенной памяти. Часто это указывает на то, что другая память повреждена».
Вот код метода (ArpRow просто содержит некоторые поля, например адреса):
public static void DeleteArpNote(ArpRow toDel)
{
MIB_IPNETROW pArpEntry = new MIB_IPNETROW();
pArpEntry.dwPhysAddrLen = 0;
pArpEntry.dwIndex = toDel.index;
pArpEntry.dwAddr = BitConverter.ToInt32(toDel.ipAddress.GetAddressBytes(), 0);
pArpEntry.bPhysAddr = toDel.macAddress.GetAddressBytes();
pArpEntry.dwType = toDel.type;
DeleteIpNetEntry(pArpEntry);
}