簡體   English   中英

NtAllocateVirtualMemoryEx 定義

[英]NtAllocateVirtualMemoryEx definition

我正在通過掛鈎內存 API 來實現內存管理工具,當我來到 NtAllocateVirtualMemoryEx 時,我試圖在谷歌上找到它的定義,但什么也沒找到,但是 NtAllocateVirtualMemory 在https://docs.microsoft.com/en-us 上有明確定義/windows-hardware/drivers/ddi/ntifs/nf-ntifs-ntallocatevirtualmemory ,有沒有人知道它的細節?

ntifs.h 中定義的ZwAllocateVirtualMemoryEx

#if (NTDDI_VERSION >= NTDDI_WIN10_RS5)
_Must_inspect_result_
_IRQL_requires_max_(PASSIVE_LEVEL)
_When_(return==0, __drv_allocatesMem(Region))
NTSYSAPI
NTSTATUS
NTAPI
ZwAllocateVirtualMemoryEx(
    _In_ HANDLE ProcessHandle,
    _Inout_ _At_ (*BaseAddress, _Readable_bytes_ (*RegionSize) _Writable_bytes_ (*RegionSize) _Post_readable_byte_size_ (*RegionSize)) PVOID* BaseAddress,
    _Inout_ PSIZE_T RegionSize,
    _In_ ULONG AllocationType,
    _In_ ULONG PageProtection,
    _Inout_updates_opt_(ExtendedParameterCount) PMEM_EXTENDED_PARAMETER ExtendedParameters,
    _In_ ULONG ExtendedParameterCount
    );
#endif

MEM_EXTENDED_PARAMETER和所有 api 實際上與VirtualAlloc2用法相同。 VirtualAlloc2只是ZwAllocateVirtualMemoryEx

有趣的是VirtualAlloc2memoryapi.h定義的條件

#if (NTDDI_VERSION >= NTDDI_WIN10_RS4)

ZwAllocateVirtualMemoryEx聲明有條件

#if (NTDDI_VERSION >= NTDDI_WIN10_RS5)

然而,這種情況中的最小一個是錯誤的 - 因為VirtualAlloc2調用ZwAllocateVirtualMemoryEx - 如果VirtualAlloc2可用 - ZwAllocateVirtualMemoryEx可用。

msdn 中也是錯誤的:

  • 庫 Kernel32.lib
  • DLL 內核 32.dll

真的VirtualAlloc2不是由kernel32.dll導出的,也不是在kernel32.lib 中定義的

需要使用mincore.libmmos.libapi-ms-win-core-memory-l1-1-6.dll導入這個 api(現在解析為kernelbase.dll

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM