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() |
キャッシュの種類によっては、実行可能でないメモリに制限する方法で SpecifyCache を使用できます。 ただし、NodeMemory を使用すると、これが保証されます。 詳細については、C30030 のサブセクション「キャッシュの種類に関連する欠陥の場合」を参照してください。 |