Здравствуйте, помогите найти ошибку, при вызове функции ReadFile приложение сначала подвисает, а потом появляеться исключение "Попытка чтения или записи в защищенную память". Вот код: Код (Text): NetworkInterface[] Adapters = NetworkInterface.GetAllNetworkInterfaces(); byte[] buffer = new byte[1500]; NDISPROT_QUERY_BINDING inBufferBinding = new NDISPROT_QUERY_BINDING(); byte[] outBufferBinding = new byte[1024]; int Recieved = 0, inm = 0; uint uintReturned = 0; string Name = "\\DEVICE\\" + Adapters[1].Id; char[] chName= new char[256]; for (int i = 0; i < Name.Length; i++) { chName[i] = Name[i]; inm++; } IntPtr Device = CreateFile("\\\\.\\\\Ndisprot", GENERIC_READ | GENERIC_WRITE, 0, 0, CreationDisposition.OPEN_EXISTING, FlagsAndAttributes.FILE_ATTRIBUTE_NORMAL, IntPtr.Zero); \\получаю хендл драйвера inBufferBinding.BindingIndex = (ulong)1; uint buffsize = (uint)Marshal.SizeOf(inBufferBinding); if (Device != IntPtr.Zero) { MessageBox.Show(Device.ToString()); unsafe { fixed (void* vpoutBufferBinding = outBufferBinding) { if (DeviceIoControl(Device, IOCTL_NDISPROT_QUERY_BINDING, (void*)&inBufferBinding, buffsize, vpoutBufferBinding, (uint)outBufferBinding.Length, &uintReturned, 0)) MessageBox.Show("Adapter Binded"); \\байндим адаптер } } unsafe { fixed (void* vpName = chName) { bool res = DeviceIoControl(Device, (uint)IOControlCode.IOCTL_NDISPROT_OPEN_DEVICE, vpName, (uint)(sizeof(char) * inm), null, 0, &uintReturned, 0); \\открываю адаптер if (res) MessageBox.Show("Adapter open"); } } //for (; ; ) { if (ReadFile(Device, buffer, buffer.Length, Recieved, 0)) \\тут происходит подвисание и ошибка textBox1.Text = BitConverter.ToString(buffer); else MessageBox.Show(Marshal.GetLastWin32Error().ToString()); }
Я конечно в шарпе не особо... Но например в плюсах надо делать так ReadFile(Device, buffer, buffer.Length, &Recieved, 0) Потому как ф-е readfile в 4м параметре ждет указатель.