12 #pragma comment(linker, "/merge:.CRT=.rdata") 16 #pragma section(".CRT$XCA", read) 17 #pragma section(".CRT$XCZ", read) 50 #if defined(ALLOC_PRAGMA) 51 #pragma alloc_text(INIT, GlobalObjectInitialization) 52 #pragma alloc_text(INIT, atexit) 53 #pragma alloc_text(PAGE, GlobalObjectTermination) 79 for (
auto ctor = g_gop_ctors_begin + 1; ctor < g_gop_ctors_end; ++ctor) {
82 return STATUS_SUCCESS;
91 const auto element = CONTAINING_RECORD(entry,
DestructorEntry, list_entry);
108 element->
dtor = dtor;
SINGLE_LIST_ENTRY list_entry
Declares interfaces to global object functions.
int __cdecl atexit(_In_ Destructor dtor)
void(__cdecl *)() Destructor
__declspec(allocate(".CRT$XCA")) static Destructor g_gop_ctors_begin[1]
static SINGLE_LIST_ENTRY g_gop_dtors_list_head
NTSTATUS GlobalObjectInitialization()
Calls all constructors and register all destructor.
void GlobalObjectTermination()
Calls all destructors.
static const ULONG kGlobalObjectpPoolTag
A pool tag for this module.