Что означает код NTSTATUS 0xC000009F (STATUS_FREE_VM_NOT_AT_BASE)?

 
Предыдущий Следующий
STATUS_DEVICE_POWER_FAILURE STATUS_MEMORY_NOT_ALLOCATED

STATUS_FREE_VM_NOT_AT_BASE

MEM_RELEASE должен указывать начало резервирования

Освобождение резервирования отличается от снятия фиксации страниц внутри него. Когда размер области равен нулю и вызывающая сторона запрашивает полное освобождение, базовый адрес должен точно совпадать с адресом, возвращённым исходным вызовом резервирования. Внутренний указатель, даже выровненный по странице, не может идентифицировать освобождаемый объект выделения.

Храните базовые адреса выделений в объектах владения и никогда не вычисляйте их округлением произвольных указателей. Если повторно использовать нужно только поддиапазон, снимите фиксацию, сохранив резервирование и соблюдая правила API. Для отображённых представлений по-прежнему требуется UnmapViewOfFile.

Что исследовать

  • Сравните переданный указатель с AllocationBase из VirtualQuery и исходной записью выделения.
  • Убедитесь, что RegionSize и FreeType соответствуют освобождению, а не снятию фиксации.
  • Проверьте арифметику указателей и заголовки распределителя на потерю истинного базового адреса.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.