C30029

Предупреждение. Вызов функции выделения памяти, которая запрашивает исполняемую память

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

Комментарии

Его следует использовать только в том случае, если требуется исполняемая память. Дополнительные сведения об этом см. в разделе Пул без выполнения (NX). Вы не можете указать параметры, которые изменят это поведение. Единственный способ устранить эту проблему — использовать альтернативную функцию, которая позволяет выделять неисполняемую память пула без загрузки. Список всех запрещенных функций, на которые распространяется эта ошибка, и рекомендуемые замены можно найти после следующего примера.

Имя анализа кода: BANNED_MEM_ALLOCATION_NOTYPE

Пример

Следующий код создает это предупреждение. Эта проблема связана с использованием MmMapIoSpace:

MmMapIoSpace(PhysicalAddress, numberOfBytes, MmNonCached);

Следующий код позволяет избежать этого предупреждения, заменив на MmMapIoSpaceMmMapIoSpace:

MmMapIoSpaceEx(PhysicalAddress, numberOfBytes, PAGE_NOCACHE | PAGE_READWRITE);

Запрещенные функции

Запрещенный API Замена Обоснование и примечания
MmMapIoSpace() MmMapIoSpaceEx()
MmAllocateContiguousMemorySpecifyCache() MmAllocateContiguousNodeMemory() В зависимости от типа кэша параметр SpecifyCache можно использовать таким образом, чтобы ограничить его неисполняемой памятью. Однако использование NodeMemory обеспечит это. Дополнительные сведения см. в подразделе C30030 "Сведения о дефектах, связанных с типами кэша".