Доброго времени суток Есть такой код: Код (Text): VOID MyTest(PUNICODE_STRING pU_String); PUNICODE_STRING pU_String; // Глобальная переменная // ... NTSTATUS DriverEntry( IN OUT PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { // ... MyTest(pU_String); ExFreePool(pU_String); // Вылетаем в BSOD // ... } VOID MyTest(PUNICODE_STRING pU_String) { pU_String = ExAllocatePool(NonPagedPool,10 * sizeof(UNICODE_STRING)); // ExFreePool(pU_String); /* Если освобождать память в этой же функции, то все нормально - BSOD"ов нет, а в DriverEntry шлет лесом =\ */ } Собственно вопрос: Почему вылетает в BSOD? Буду весьма признателен за ответ.
си сначала выучите, а потом за дрова беритесь. В MyTest нужно передавать указатель на указатель, иначе вы не передаете вовне указатель на выделенный буфер, тк аргумент по сути локальная переменная, область видимости которой - до возврата из функции. А бсод происходит, тк в ExFreePool передается ноль.