C30031

경고 C30031: 메모리 할당 함수 호출 및 실행 가능한 메모리를 나타내는 매개 변수 전달

코드 분석에서 입력 함수(예: DriverEntry() 또는 DllInitialize())가 호출되기 전에 POOL_NX_OPTIN 및 ExInitializeDriverRuntime(DrvRtPoolNxOptIn)의 사용을 감지했습니다. 항목 함수가 ExInitializeDriverRuntime(DrvRtPoolNxOptIn)을 간접적으로 호출할 수 있습니다. 이 경우 오류를 표시하지 않을 수 있습니다( 경고 메시지를 표시하지 않는 Pragma Prefast 참조).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

예제

소스 파일의 다음 코드는 이 경고를 생성합니다.

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

코드 파일에서

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;

    MakeSafeInitialization ();
…
}

다음 코드는 이 경고를 방지합니다.

NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}