Что означает код NTSTATUS 0xC000002D (STATUS_NOT_COMMITTED)?

 
Предыдущий Следующий
STATUS_UNABLE_TO_DECOMMIT_VM STATUS_INVALID_PORT_ATTRIBUTES

STATUS_NOT_COMMITTED

Целевая память не имеет зафиксированной подложки

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

Фиксируйте только страницы, которыми владеет и которые требует архитектура. Автоматическая фиксация любого сбойного диапазона может скрыть выход указателя за границы или дефект метаданных распределителя. Используйте VirtualQuery для разделения диапазона по границам состояний и выясните, почему вызывающая сторона ожидала commit.

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

  • Проверьте состояние, защиту и базу выделения для каждой страницы диапазона.
  • Убедитесь, что указатель и длина остаются внутри зафиксированного экстента, принадлежащего распределителю.
  • Проверьте гонки, при которых другой поток снимает commit, пока асинхронная работа всё ещё ссылается на память.

Ссылки


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