Поделиться через


C30029

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

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

Замечания

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

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

Пример

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

MmMapIoSpace(PhysicalAddress, numberOfBytes, MmNonCached);

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

MmMapIoSpaceEx(PhysicalAddress, numberOfBytes, PAGE_NOCACHE | PAGE_READWRITE);

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

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