C30033
предупреждение C30033: выделение исполняемых файлов обнаружено в драйвере, скомпилированном с POOL_NX_OPTIN. Этот драйвер был определен для загрузки во время выполнения другим драйвером. Убедитесь, что драйвер загрузки вызывает ExInitializeDriverRuntime(DrvRtPoolNxOptIn) в DriverEntry.
BANNED_MEM_ALLOCATION_MAYBE_UNSAFE_DRIVER_LOADED
Было определено, что это библиотека DLL, загруженная другим драйвером, и так как она не имеет полной функции инициализации. Убедитесь, что драйвер загрузки:
- Скомпилированный с помощью POOL_NX_OPTIN=1
- Вызовы ExInitializeDriverRuntime(DrvRtPoolNxOptIn) в функции инициализации
Если драйвер загрузки правильно указывает эти данные, предупреждение можно игнорировать.
Пример
Следующий код в каждом загрузчике библиотеки DLL означает, что необходимо внести изменения (как показано в безопасном примере ниже).
В файле источников
C_DEFINES=$(C_DEFINES)
В DriverEntryперед выделением памяти:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
…
// No call to ExInitializeDriverRuntime
return(status)
}
Следующий код в каждом загрузчике библиотеки DLL означает, что предупреждение можно игнорировать.
В файле источников добавьте
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
В DriverEntryперед выделением памяти:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
ExInitializeDriverRuntime( DrvRtPoolNxOptIn );
…
пример #2
Второй способ исправить это — сделать каждый вызов явно ссылаться на неисполнимую память.
Следующий код создает это предупреждение.
ExAllocatePoolWithTag(NonPagedPool, numberOfBytes, 'xppn');
Следующий код избегает этого предупреждения:
ExAllocatePoolWithTag(NonPagedPoolNx, numberOfBytes, 'xppn');