Я работаю над анализатором пакетов в C Sharp
с использованием Winpcap. Вот точный код:
[DllImport("wpcap.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern IntPtr pcap_open(char[] devicename, int size, int mode, int timeout, ref IntPtr auth, ref IntPtr errbuf);
string devicename = "\\Device\\NPF_{EADB4C21-B0AF-4EF2-86AB-80A37F399D1C}";
IntPtr errbuf = IntPtr.Zero, auth = IntPtr.Zero, iface;
try
{
iface = pcap_open(devicename.ToCharArray(), 65536, 1, 1000, ref auth, ref errbuf);
}
catch (Exception er) { return; }
pcap_open не всегда возвращает действительный указатель на мой сетевой интерфейс.Иногда возвращается NULL
(0).Раньше показывалось «PInvoke обнаружил дисбаланс стека ...», я исправил это, изменив соглашение о вызовах.Я даже убедился, что char
, используемый в devicename
, имеет 1 байт (charset ansi)
.Тем не менее, что-то идет не так.
Просто замечание: всякий раз, когда я отлаживаю его, он всегда возвращает действительный указатель, но если нет, он возвращает NULL
40% случаев.
Я проверил все в и из, много гуглил, но ничего не смог понять.Чего не хватает?Хуже всего то, что я даже не могу поймать исключение, чтобы обработать его должным образом.У кого-нибудь есть ответ?