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 в подразделе "Дефекты, связанные с типами кэша". |