Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

104 lines
2.0 KiB

#include <windows.h>
#include <stdio.h>
int __cdecl main(int, char **, char **);
typedef void (__cdecl *_PVFV)(void);
#pragma data_seg(".CRT$XIA")
_PVFV __xi_a[] = { NULL };
#pragma data_seg(".CRT$XIZ")
_PVFV __xi_z[] = { NULL };
#pragma data_seg(".CRT$XCA")
_PVFV __xc_a[] = { NULL };
#pragma data_seg(".CRT$XCZ")
_PVFV __xc_z[] = { NULL };
#pragma data_seg(".CRT$XPA")
_PVFV __xp_a[] = { NULL };
#pragma data_seg(".CRT$XPZ")
_PVFV __xp_z[] = { NULL };
#pragma data_seg(".CRT$XTA")
_PVFV __xt_a[] = { NULL };
#pragma data_seg(".CRT$XTZ")
_PVFV __xt_z[] = { NULL };
#if defined(_IA64_)
#pragma comment(linker, "/merge:.CRT=.srdata")
#else
#pragma comment(linker, "/merge:.CRT=.rdata")
#endif
#pragma data_seg() /* reset */
_PVFV *__onexitbegin;
_PVFV *__onexitend;
static void
_initterm (
_PVFV * pfbegin,
_PVFV * pfend
)
{
/*
* walk the table of function pointers from the bottom up, until
* the end is encountered. Do not skip the first entry. The initial
* value of pfbegin points to the first valid entry. Do not try to
* execute what pfend points to. Only entries before pfend are valid.
*/
while ( pfbegin < pfend ) {
/*
* if current table entry is non-NULL, call thru it.
*/
if ( *pfbegin != NULL )
(**pfbegin)();
++pfbegin;
}
}
void
mainNoCRTStartup(
void
)
{
__try {
// do C initializations
_initterm( __xi_a, __xi_z );
// do C++ initializations
_initterm( __xc_a, __xc_z );
main(1, 0, 0);
} __except ( EXCEPTION_EXECUTE_HANDLER ) {
}
__try {
// Do C++ terminators
_initterm(__onexitbegin, __onexitend);
// do pre-terminators
_initterm(__xp_a, __xp_z);
// do C terminiators
_initterm(__xt_a, __xt_z);
} __except(EXCEPTION_EXECUTE_HANDLER) {
}
}