Проблема с ExFreePool, BSOD

Тема в разделе "WASM.NT.KERNEL", создана пользователем Paranormal, 10 май 2011.

  1. Paranormal

    Paranormal New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    2
    Доброго времени суток

    Есть такой код:

    Код (Text):
    1. VOID MyTest(PUNICODE_STRING pU_String);
    2.  
    3. PUNICODE_STRING pU_String;  // Глобальная переменная
    4.  
    5. // ...
    6.  
    7. NTSTATUS DriverEntry(
    8.     IN OUT  PDRIVER_OBJECT  DriverObject,
    9.     IN      PUNICODE_STRING RegistryPath
    10.     )
    11. {    
    12.     // ...
    13.  
    14.     MyTest(pU_String);
    15.  
    16.     ExFreePool(pU_String);      // Вылетаем в BSOD
    17.    
    18.     // ...
    19. }
    20.  
    21. VOID MyTest(PUNICODE_STRING pU_String)
    22. {
    23.     pU_String = ExAllocatePool(NonPagedPool,10 * sizeof(UNICODE_STRING));
    24.  
    25.     // ExFreePool(pU_String);   /* Если освобождать память в этой же функции, то все нормально - BSOD"ов нет, а в DriverEntry шлет лесом =\ */
    26. }
    Собственно вопрос: Почему вылетает в BSOD? Буду весьма признателен за ответ.
     
  2. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    си сначала выучите, а потом за дрова беритесь.
    В MyTest нужно передавать указатель на указатель, иначе вы не передаете вовне указатель на выделенный буфер, тк аргумент по сути локальная переменная, область видимости которой - до возврата из функции. А бсод происходит, тк в ExFreePool передается ноль.
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Йопанный стыд.
     
  4. Paranormal

    Paranormal New Member

    Публикаций:
    0
    Регистрация:
    10 май 2011
    Сообщения:
    2
    Да, сорри, как-то переклинило...