mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 09:00:27 +00:00
[AVRF] Hook up debug functions, add noisy stub for AVrfpGetStackTraceAddress
This commit is contained in:
parent
a7a504a466
commit
5821136dfa
5 changed files with 88 additions and 12 deletions
|
@ -1517,7 +1517,7 @@ LdrpInitializeExecutionOptions(PUNICODE_STRING ImagePathName, PPEB Peb, PHANDLE
|
||||||
/* Call AVRF if necessary */
|
/* Call AVRF if necessary */
|
||||||
if (Peb->NtGlobalFlag & (FLG_APPLICATION_VERIFIER | FLG_HEAP_PAGE_ALLOCS))
|
if (Peb->NtGlobalFlag & (FLG_APPLICATION_VERIFIER | FLG_HEAP_PAGE_ALLOCS))
|
||||||
{
|
{
|
||||||
Status = LdrpInitializeApplicationVerifierPackage(KeyHandle, Peb, TRUE, FALSE);
|
Status = LdrpInitializeApplicationVerifierPackage(KeyHandle, Peb, FALSE, FALSE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("AVRF: LdrpInitializeApplicationVerifierPackage failed with %08X\n", Status);
|
DPRINT1("AVRF: LdrpInitializeApplicationVerifierPackage failed with %08X\n", Status);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||||
* PURPOSE: Verifier support routines
|
* PURPOSE: Verifier support routines
|
||||||
* COPYRIGHT: Copyright 2011 Aleksey Bragin (aleksey@reactos.org)
|
* COPYRIGHT: Copyright 2011 Aleksey Bragin (aleksey@reactos.org)
|
||||||
* Copyright 2018 Mark Jansen (mark.jansen@reactos.org)
|
* Copyright 2018-2025 Mark Jansen (mark.jansen@reactos.org)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,6 +13,10 @@
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
||||||
|
/* heappage.c */
|
||||||
|
HANDLE NTAPI RtlpPageHeapCreate(ULONG Flags, PVOID Addr, SIZE_T TotalSize, SIZE_T CommitSize, PVOID Lock, PRTL_HEAP_PARAMETERS Parameters);
|
||||||
|
PVOID NTAPI RtlpPageHeapDestroy(HANDLE HeapPtr);
|
||||||
|
|
||||||
extern PLDR_DATA_TABLE_ENTRY LdrpImageEntry;
|
extern PLDR_DATA_TABLE_ENTRY LdrpImageEntry;
|
||||||
ULONG AVrfpVerifierFlags = 0;
|
ULONG AVrfpVerifierFlags = 0;
|
||||||
WCHAR AVrfpVerifierDllsString[256] = { 0 };
|
WCHAR AVrfpVerifierDllsString[256] = { 0 };
|
||||||
|
@ -355,6 +359,31 @@ AVrfDllUnloadNotification(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
|
||||||
RtlLeaveCriticalSection(&AVrfpVerifierLock);
|
RtlLeaveCriticalSection(&AVrfpVerifierLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
AVrfInternalHeapFreeNotification(PVOID AllocationBase, SIZE_T AllocationSize)
|
||||||
|
{
|
||||||
|
PLIST_ENTRY Entry;
|
||||||
|
|
||||||
|
if (!(NtCurrentPeb()->NtGlobalFlag & FLG_APPLICATION_VERIFIER))
|
||||||
|
return;
|
||||||
|
|
||||||
|
RtlEnterCriticalSection(&AVrfpVerifierLock);
|
||||||
|
for (Entry = AVrfpVerifierProvidersList.Flink; Entry != &AVrfpVerifierProvidersList; Entry = Entry->Flink)
|
||||||
|
{
|
||||||
|
PVERIFIER_PROVIDER Provider;
|
||||||
|
RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK ProviderHeapFreeCallback;
|
||||||
|
|
||||||
|
Provider = CONTAINING_RECORD(Entry, VERIFIER_PROVIDER, ListEntry);
|
||||||
|
|
||||||
|
ProviderHeapFreeCallback = Provider->ProviderNtdllHeapFreeCallback;
|
||||||
|
if (ProviderHeapFreeCallback)
|
||||||
|
{
|
||||||
|
ProviderHeapFreeCallback(AllocationBase, AllocationSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RtlLeaveCriticalSection(&AVrfpVerifierLock);
|
||||||
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -480,13 +509,48 @@ AVrfpChainDuplicateThunks(VOID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
PVOID
|
||||||
|
NTAPI
|
||||||
|
AVrfpGetStackTraceAddress(ULONG Arg0)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
DbgBreakPoint();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
HANDLE
|
||||||
|
NTAPI
|
||||||
|
AVrfpDebugPageHeapCreate(ULONG Flags,
|
||||||
|
PVOID Addr,
|
||||||
|
SIZE_T TotalSize,
|
||||||
|
SIZE_T CommitSize,
|
||||||
|
PVOID Lock,
|
||||||
|
PRTL_HEAP_PARAMETERS Parameters)
|
||||||
|
{
|
||||||
|
HANDLE hHeap;
|
||||||
|
hHeap = RtlpPageHeapCreate(Flags, Addr, TotalSize, CommitSize, Lock, Parameters);
|
||||||
|
DbgPrint("AVRF: DebugPageHeapCreate(Flags=%x, Addr=%p, TotalSize=%u, CommitSize=%u, Lock=%p, Parameters=%p) = %p\n",
|
||||||
|
Flags, Addr, TotalSize, CommitSize, Lock, Parameters, hHeap);
|
||||||
|
return hHeap;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
PVOID
|
||||||
|
AVrfpDebugPageHeapDestroy(HANDLE HeapPtr)
|
||||||
|
{
|
||||||
|
DbgPrint("AVRF: DebugPageHeapDestroy(HeapPtr=%p)\n", HeapPtr);
|
||||||
|
return RtlpPageHeapDestroy(HeapPtr);
|
||||||
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
AVrfpLoadAndInitializeProvider(PVERIFIER_PROVIDER Provider)
|
AVrfpLoadAndInitializeProvider(PVERIFIER_PROVIDER Provider)
|
||||||
{
|
{
|
||||||
WCHAR StringBuffer[MAX_PATH + 11];
|
WCHAR StringBuffer[MAX_PATH + 11];
|
||||||
UNICODE_STRING DllPath;
|
UNICODE_STRING DllPath;
|
||||||
PRTL_VERIFIER_PROVIDER_DESCRIPTOR Descriptor;
|
PRTL_VERIFIER_PROVIDER_DESCRIPTOR Descriptor = NULL;
|
||||||
PIMAGE_NT_HEADERS ImageNtHeader;
|
PIMAGE_NT_HEADERS ImageNtHeader;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
@ -544,13 +608,9 @@ AVrfpLoadAndInitializeProvider(PVERIFIER_PROVIDER Provider)
|
||||||
Descriptor->VerifierFlags = AVrfpVerifierFlags;
|
Descriptor->VerifierFlags = AVrfpVerifierFlags;
|
||||||
Descriptor->VerifierDebug = AVrfpDebug;
|
Descriptor->VerifierDebug = AVrfpDebug;
|
||||||
|
|
||||||
/* We don't have these yet */
|
Descriptor->RtlpGetStackTraceAddress = AVrfpGetStackTraceAddress;
|
||||||
DPRINT1("AVRF: RtlpGetStackTraceAddress MISSING\n");
|
Descriptor->RtlpDebugPageHeapCreate = AVrfpDebugPageHeapCreate;
|
||||||
DPRINT1("AVRF: RtlpDebugPageHeapCreate MISSING\n");
|
Descriptor->RtlpDebugPageHeapDestroy = AVrfpDebugPageHeapDestroy;
|
||||||
DPRINT1("AVRF: RtlpDebugPageHeapDestroy MISSING\n");
|
|
||||||
Descriptor->RtlpGetStackTraceAddress = NULL;
|
|
||||||
Descriptor->RtlpDebugPageHeapCreate = NULL;
|
|
||||||
Descriptor->RtlpDebugPageHeapDestroy = NULL;
|
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -15,3 +15,8 @@ LdrpInitializeProcessCompat(PVOID pProcessActctx, PVOID* pOldShimData)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID NTAPI
|
||||||
|
AVrfInternalHeapFreeNotification(PVOID AllocationBase, SIZE_T AllocationSize)
|
||||||
|
{
|
||||||
|
/* Stub for linking against rtl */
|
||||||
|
}
|
||||||
|
|
|
@ -222,4 +222,12 @@ RtlPrefetchMemoryNonTemporal(IN PVOID Source,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
VOID NTAPI
|
||||||
|
AVrfInternalHeapFreeNotification(PVOID AllocationBase, SIZE_T AllocationSize)
|
||||||
|
{
|
||||||
|
/* Stub for linking against rtl */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -202,6 +202,10 @@ RtlpDphReportCorruptedBlock(
|
||||||
BOOLEAN NTAPI
|
BOOLEAN NTAPI
|
||||||
RtlpDphNormalHeapValidate(PDPH_HEAP_ROOT DphRoot, ULONG Flags, PVOID BaseAddress);
|
RtlpDphNormalHeapValidate(PDPH_HEAP_ROOT DphRoot, ULONG Flags, PVOID BaseAddress);
|
||||||
|
|
||||||
|
/* verifier.c */
|
||||||
|
VOID NTAPI
|
||||||
|
AVrfInternalHeapFreeNotification(PVOID AllocationBase, SIZE_T AllocationSize);
|
||||||
|
|
||||||
|
|
||||||
VOID NTAPI
|
VOID NTAPI
|
||||||
RtlpDphRaiseException(NTSTATUS Status)
|
RtlpDphRaiseException(NTSTATUS Status)
|
||||||
|
@ -1712,8 +1716,7 @@ RtlpPageHeapDestroy(HANDLE HeapPtr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: Call AV notification */
|
AVrfInternalHeapFreeNotification(Node->pUserAllocation, Node->nUserRequestedSize);
|
||||||
//AVrfInternalHeapFreeNotification();
|
|
||||||
|
|
||||||
/* Go to the next node */
|
/* Go to the next node */
|
||||||
Ptr = RtlEnumerateGenericTableAvl(&DphRoot->BusyNodesTable, FALSE);
|
Ptr = RtlEnumerateGenericTableAvl(&DphRoot->BusyNodesTable, FALSE);
|
||||||
|
|
Loading…
Reference in a new issue