ReadFile Попытка чтения или записи в защищенную память.

Тема в разделе "WASM.NETWORKS", создана пользователем Fantasista, 10 мар 2011.

  1. Fantasista

    Fantasista New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2011
    Сообщения:
    8
    Здравствуйте, помогите найти ошибку, при вызове функции ReadFile приложение сначала подвисает, а потом появляеться исключение "Попытка чтения или записи в защищенную память". Вот код:
    Код (Text):
    1. NetworkInterface[] Adapters = NetworkInterface.GetAllNetworkInterfaces();
    2.                 byte[] buffer = new byte[1500];
    3.  
    4.                 NDISPROT_QUERY_BINDING inBufferBinding = new NDISPROT_QUERY_BINDING();
    5.                 byte[] outBufferBinding = new byte[1024];
    6.                 int Recieved = 0, inm = 0;
    7.                 uint uintReturned = 0;
    8.                 string Name = "\\DEVICE\\" + Adapters[1].Id;
    9.                 char[] chName= new char[256];
    10.                 for (int i = 0; i < Name.Length; i++)
    11.                 {
    12.                     chName[i] = Name[i];
    13.                     inm++;
    14.                 }
    15.                 IntPtr Device = CreateFile("\\\\.\\\\Ndisprot", GENERIC_READ | GENERIC_WRITE, 0, 0, CreationDisposition.OPEN_EXISTING, FlagsAndAttributes.FILE_ATTRIBUTE_NORMAL, IntPtr.Zero); \\получаю хендл драйвера
    16.                 inBufferBinding.BindingIndex = (ulong)1;
    17.                 uint buffsize = (uint)Marshal.SizeOf(inBufferBinding);
    18.                 if (Device != IntPtr.Zero)
    19.                 {
    20.                     MessageBox.Show(Device.ToString());
    21.  
    22.                     unsafe
    23.                     {
    24.                         fixed (void* vpoutBufferBinding = outBufferBinding)
    25.                         {
    26.                             if (DeviceIoControl(Device, IOCTL_NDISPROT_QUERY_BINDING, (void*)&inBufferBinding, buffsize, vpoutBufferBinding, (uint)outBufferBinding.Length, &uintReturned, 0))
    27.                                 MessageBox.Show("Adapter Binded"); \\байндим адаптер
    28.  
    29.  
    30.                         }
    31.                     }
    32.                     unsafe
    33.                     {
    34.                         fixed (void* vpName = chName)
    35.                         {
    36.                             bool res = DeviceIoControl(Device, (uint)IOControlCode.IOCTL_NDISPROT_OPEN_DEVICE, vpName, (uint)(sizeof(char) * inm), null, 0, &uintReturned, 0); \\открываю адаптер
    37.                             if (res)
    38.                                 MessageBox.Show("Adapter open");
    39.                         }
    40.                     }
    41.                     //for (; ; )
    42.                     {
    43.                         if (ReadFile(Device, buffer, buffer.Length, Recieved, 0)) \\тут происходит подвисание и ошибка
    44.                             textBox1.Text = BitConverter.ToString(buffer);
    45.                         else
    46.                             MessageBox.Show(Marshal.GetLastWin32Error().ToString());
    47.  
    48.                     }
     
  2. red_mould

    red_mould New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    34
    Я конечно в шарпе не особо... Но например в плюсах надо делать так
    ReadFile(Device, buffer, buffer.Length, &Recieved, 0)
    Потому как ф-е readfile в 4м параметре ждет указатель.
     
  3. Fantasista

    Fantasista New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2011
    Сообщения:
    8
    Уже пробовал, не помогло