BadPoolHeader

Тема в разделе "WASM.NT.KERNEL", создана пользователем Velheart, 12 ноя 2008.

  1. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Вроде произвожу тривиальные действия:
    Код (Text):
    1.                                 .......
    2.                                 status =  GetFullPath(newProcess, &child);
    3.                 status |= GetFullPath(process, &parent);
    4.                 if (!NT_SUCCESS(status))
    5.                 {
    6.                     ObDereferenceObject(process);
    7.                     ObDereferenceObject(newProcess);
    8.                     return;
    9.                 }
    10.                                 bTerminate = AskUser(&parent, &child);  //тут строки только читаются
    11.                 RtlFreeUnicodeString(&parent);
    12.                 RtlFreeUnicodeString(&child);                //сюда показывает анализ крэш-дампа
    13.                 //ExFreePool(parent.Buffer);
    14.                 //ExFreePool(child.Buffer);
    15.                                 .......
    GetFullPath:

    Код (Text):
    1.         .......
    2.         status = IoVolumeDeviceToDosName(fileObject->DeviceObject, &driveLetter);
    3.     //__asm int 3;
    4.     path->Buffer = ExAllocatePool(0x1000, PagedPool);
    5.     path->Length = 0;
    6.     path->MaximumLength = 0x1000;
    7.     RtlCopyUnicodeString(path, &driveLetter);
    8.     //ExFreePool(driveLetter->Buffer);
    9.     RtlAppendUnicodeStringToString(path, &fileObject->FileName);
    10.         .......
    При этом при освобождении буфера второй строки получаю бсод с BadPoolHeader, я чего-то не учитываю, или этот баг вызван какими-то ошибками с переполнением буфера в другой части кода, вроде бы же тут все чисто? Подскажите, плиз, как это дело можно отловить..
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Извиняюсь, я как всегда написал ерунду, перепутал параметры ExAllocatePool местами.. Вот всегда так, опишусь где-нибудь, не работает, перечитаю много раз и не могу найти, потом только через некоторое время свежим взглядом замечаю.. и хз что с этим делать =(
     
  3. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    #define malloc_paged(size) (ExAllocatePool(PagedPool, (size)))
    ? :derisive:
     
  4. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    =)
    Кстати, когда учил с++ после ассемблера, очень возмущался проверке типов и т.д., типа: "Они что программиста дебилом недееспособным считают?" =)