/* * PROJECT: ReactOS API tests * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Test for RtlGetUnloadEventTrace * COPYRIGHT: Copyright 2020 Mark Jansen (mark.jansen@reactos.org) */ #include "precomp.h" PRTL_UNLOAD_EVENT_TRACE NTAPI RtlGetUnloadEventTrace(VOID); #ifndef _WIN64 C_ASSERT(sizeof(RTL_UNLOAD_EVENT_TRACE) == 84); C_ASSERT(sizeof(RTL_UNLOAD_EVENT_TRACE) * RTL_UNLOAD_EVENT_TRACE_NUMBER == 0x540); #endif static void Test_Dump() { PRTL_UNLOAD_EVENT_TRACE TraceHead, Trace; UINT n; TraceHead = RtlGetUnloadEventTrace(); for (n = 0; n < RTL_UNLOAD_EVENT_TRACE_NUMBER; ++n) { ULONG ExpectSequence = n ? n : RTL_UNLOAD_EVENT_TRACE_NUMBER; Trace = TraceHead + n; ok(Trace->BaseAddress != NULL, "Got no BaseAddress for %u\n", n); ok(Trace->SizeOfImage != 0, "Got no SizeOfImage for %u\n", n); ok(Trace->Sequence == ExpectSequence, "Wrong Sequence: %lu instead of %lu for %u\n", Trace->Sequence, ExpectSequence, n); ok(Trace->TimeDateStamp != 0, "Got no TimeDateStamp for %u\n", n); ok(Trace->CheckSum != 0, "Got no CheckSum for %u\n", n); ok(!wcscmp(Trace->ImageName, L"GetUName.dLl"), "Wrong ImageName for %u: %S\n", n, Trace->ImageName); } } #define TESTDLL "GetUName.dLl" static void Test_LoadUnload() { HMODULE mod; static char Buffer[MAX_PATH] = {0}; mod = GetModuleHandleA(TESTDLL); ok(mod == NULL, "ERROR, %s already loaded\n", TESTDLL); mod = LoadLibraryA(Buffer[0] ? Buffer :TESTDLL); ok(mod != NULL, "ERROR, %s not loaded\n", TESTDLL); if (!Buffer[0]) { GetModuleFileNameA(mod, Buffer, _countof(Buffer)); } else { Buffer[0] = '\0'; } FreeLibrary(mod); mod = GetModuleHandleA(TESTDLL); ok(mod == NULL, "ERROR, %s still loaded\n", TESTDLL); } START_TEST(RtlGetUnloadEventTrace) { int n; HMODULE Ignore; Ignore = LoadLibrary("user32.dll"); for (n = 0; n <= RTL_UNLOAD_EVENT_TRACE_NUMBER; ++n) { trace("Num: %u\n", n); Test_LoadUnload(); } Test_Dump(); FreeLibrary(Ignore); }