This is required by the latest versions of Chromium.
-- v2: kernelbase: Implement DiscardVirtualMemory().
From: Brendan Shanks bshanks@codeweavers.com
--- dlls/kernel32/kernel32.spec | 1 + dlls/kernelbase/kernelbase.spec | 2 +- dlls/kernelbase/memory.c | 13 +++++++++++++ include/memoryapi.h | 1 + 4 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index d6b0eb62a69..ea02dd0447b 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -371,6 +371,7 @@ @ stdcall -import DeleteProcThreadAttributeList(ptr) # @ stub DisableThreadProfiling @ stdcall DisassociateCurrentThreadFromCallback(ptr) NTDLL.TpDisassociateCallback +@ stdcall DiscardVirtualMemory(ptr long) kernelbase.DiscardVirtualMemory @ stdcall DeleteTimerQueue(long) @ stdcall -import DeleteTimerQueueEx(long long) @ stdcall -import DeleteTimerQueueTimer(long long long) diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index e3a0ad257f2..af3af8ecabe 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -269,7 +269,7 @@ @ stdcall DisablePredefinedHandleTableInternal(long) @ stdcall DisableThreadLibraryCalls(long) @ stdcall DisassociateCurrentThreadFromCallback(ptr) ntdll.TpDisassociateCallback -# @ stub DiscardVirtualMemory +@ stdcall DiscardVirtualMemory(ptr long) @ stdcall DisconnectNamedPipe(long) @ stdcall DnsHostnameToComputerNameExW(wstr ptr ptr) # @ stub DsBindWithSpnExW diff --git a/dlls/kernelbase/memory.c b/dlls/kernelbase/memory.c index 4bcd4a639f6..a3ba79f3405 100644 --- a/dlls/kernelbase/memory.c +++ b/dlls/kernelbase/memory.c @@ -52,6 +52,19 @@ BOOLEAN WINAPI RtlSetUserValueHeap( HANDLE handle, ULONG flags, void *ptr, void ***********************************************************************/
+/*********************************************************************** + * DiscardVirtualMemory (kernelbase.@) + */ +DWORD WINAPI DECLSPEC_HOTPATCH DiscardVirtualMemory( void *addr, SIZE_T size ) +{ + NTSTATUS status; + LPVOID ret = addr; + + status = NtAllocateVirtualMemory( GetCurrentProcess(), &ret, 0, &size, MEM_RESET, PAGE_NOACCESS ); + return RtlNtStatusToDosError( status ); +} + + /*********************************************************************** * FlushViewOfFile (kernelbase.@) */ diff --git a/include/memoryapi.h b/include/memoryapi.h index 8743e67927c..6728b832fa7 100644 --- a/include/memoryapi.h +++ b/include/memoryapi.h @@ -41,5 +41,6 @@ typedef struct WIN32_MEMORY_REGION_INFORMATION SIZE_T CommitSize; } WIN32_MEMORY_REGION_INFORMATION;
+DWORD WINAPI DiscardVirtualMemory(void *addr, SIZE_T size); BOOL WINAPI QueryVirtualMemoryInformation(HANDLE process,const void *addr, WIN32_MEMORY_INFORMATION_CLASS info_class, void *info, SIZE_T size, SIZE_T *ret_size);
On Sat Mar 4 13:24:03 2023 +0000, Etaash Mathamsetty wrote:
MSDN seems to say that MEM_RESET does the same thing as this function, obv would need tests
Thanks, done, they do appear identical from the documentation
is it possible to add tests?
This merge request was approved by Torge Matthies.