NtAllocateVirtualMemoryEx 定义
NtAllocateVirtualMemoryEx definition
我正在通过挂接到内存 API 来实现内存管理工具,当我来到 NtAllocateVirtualMemoryEx 时,我试图在 google 上找到它的定义但什么也没找到,但是 NtAllocateVirtualMemory 明确定义在 https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-ntifs-ntallocatevirtualmemory,有没有人知道它的详情?
ZwAllocateVirtualMemoryEx定义在ntifs.h
#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
and all api by fact have the same usage as VirtualAlloc2
. the VirtualAlloc2
仅 shell 超过 ZwAllocateVirtualMemoryEx
有趣的是 VirtualAlloc2
在条件 memoryapi.h
中定义
#if (NTDDI_VERSION >= NTDDI_WIN10_RS4)
但 ZwAllocateVirtualMemoryEx
声明有条件
#if (NTDDI_VERSION >= NTDDI_WIN10_RS5)
但是这个条件中至少有一个是错误的 - 因为 VirtualAlloc2
调用 ZwAllocateVirtualMemoryEx
- 如果 VirtualAlloc2
可用 - ZwAllocateVirtualMemoryEx
也可用。
msdn中也有错误:
- Library Kernel32.lib
- DLL Kernel32.dll
确实 VirtualAlloc2
未由 kernel32.dll 导出且未在 kernel32.lib[= 中定义29=]
需要使用 mincore.lib 或 mmos.lib 从 [=28 导入 api =](现在解析为kernelbase.dll)
我正在通过挂接到内存 API 来实现内存管理工具,当我来到 NtAllocateVirtualMemoryEx 时,我试图在 google 上找到它的定义但什么也没找到,但是 NtAllocateVirtualMemory 明确定义在 https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/nf-ntifs-ntallocatevirtualmemory,有没有人知道它的详情?
ZwAllocateVirtualMemoryEx定义在ntifs.h
#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
and all api by fact have the same usage as VirtualAlloc2
. the VirtualAlloc2
仅 shell 超过 ZwAllocateVirtualMemoryEx
有趣的是 VirtualAlloc2
在条件 memoryapi.h
中定义
#if (NTDDI_VERSION >= NTDDI_WIN10_RS4)
但 ZwAllocateVirtualMemoryEx
声明有条件
#if (NTDDI_VERSION >= NTDDI_WIN10_RS5)
但是这个条件中至少有一个是错误的 - 因为 VirtualAlloc2
调用 ZwAllocateVirtualMemoryEx
- 如果 VirtualAlloc2
可用 - ZwAllocateVirtualMemoryEx
也可用。
msdn中也有错误:
- Library Kernel32.lib
- DLL Kernel32.dll
确实 VirtualAlloc2
未由 kernel32.dll 导出且未在 kernel32.lib[= 中定义29=]
需要使用 mincore.lib 或 mmos.lib 从 [=28 导入 api =](现在解析为kernelbase.dll)