ReactOS
0.4.16-dev-2122-g1628f5e
crt_main.c
Go to the documentation of this file.
1
/*
2
* mainCRTStartup default entry point
3
*
4
* Copyright 2019 Jacek Caban for CodeWeavers
5
*
6
* This library is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* This library is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with this library; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19
*/
20
21
#if 0
22
#pragma makedep implib
23
#endif
24
25
#include <stdarg.h>
26
#include <stdlib.h>
27
#include <process.h>
28
29
#include "
windef.h
"
30
#include "
winbase.h
"
31
#include "winternl.h"
32
33
int
__cdecl
main
(
int
argc
,
char
**
argv
,
char
**
env
);
34
35
static
const
IMAGE_NT_HEADERS
*
get_nt_header
(
void
)
36
{
37
IMAGE_DOS_HEADER
*
dos
= (
IMAGE_DOS_HEADER
*)
NtCurrentTeb
()->Peb->ImageBaseAddress;
38
return
(
const
IMAGE_NT_HEADERS
*)((
char
*)
dos
+
dos
->
e_lfanew
);
39
}
40
41
int
__cdecl
mainCRTStartup
(
void
)
42
{
43
int
argc
,
ret
;
44
char
**
argv
, **
env
;
45
46
#ifdef _UCRT
47
_configure_narrow_argv
(
_crt_argv_unexpanded_arguments
);
48
_initialize_narrow_environment
();
49
argc
= *
__p___argc
();
50
argv
= *
__p___argv
();
51
env
=
_get_initial_narrow_environment
();
52
#else
53
int
new_mode = 0;
54
__getmainargs
(&
argc
, &
argv
, &
env
, 0, &new_mode);
55
#endif
56
_set_app_type
(
get_nt_header
()->OptionalHeader.Subsystem ==
IMAGE_SUBSYSTEM_WINDOWS_GUI
?
_crt_gui_app
:
_crt_console_app
);
57
58
ret
=
main
(
argc
,
argv
,
env
);
59
60
exit
(
ret
);
61
return
ret
;
62
}
argc
static int argc
Definition:
ServiceArgs.c:12
get_nt_header
static const IMAGE_NT_HEADERS * get_nt_header(void)
Definition:
crt_main.c:35
mainCRTStartup
int __cdecl mainCRTStartup(void)
Definition:
crt_main.c:41
env
static LPCWSTR LPCWSTR LPCWSTR env
Definition:
db.cpp:171
__getmainargs
void __getmainargs(int *argc, char ***argv, char ***envp, int expand_wildcards, int *new_mode)
Definition:
data.c:579
__p___argc
int *CDECL __p___argc(void)
Definition:
data.c:227
__p___argv
char ***CDECL __p___argv(void)
Definition:
data.c:329
__cdecl
#define __cdecl
Definition:
corecrt.h:121
_configure_narrow_argv
_ACRTIMP errno_t __cdecl _configure_narrow_argv(_crt_argv_mode)
Definition:
argv_parsing.cpp:396
_crt_argv_unexpanded_arguments
@ _crt_argv_unexpanded_arguments
Definition:
corecrt_startup.h:14
_crt_gui_app
@ _crt_gui_app
Definition:
corecrt_startup.h:22
_crt_console_app
@ _crt_console_app
Definition:
corecrt_startup.h:21
_initialize_narrow_environment
_ACRTIMP int __cdecl _initialize_narrow_environment(void)
Definition:
environment_initialization.cpp:192
_get_initial_narrow_environment
_ACRTIMP char **__cdecl _get_initial_narrow_environment(void)
Definition:
environment_initialization.cpp:328
_set_app_type
#define _set_app_type
Definition:
corecrt_startup.h:50
ret
return ret
Definition:
mutex.c:146
main
int main()
Definition:
test.c:6
NtCurrentTeb
#define NtCurrentTeb
Definition:
iphlpapi_private.h:4
dos
IMAGE_DOS_HEADER dos
Definition:
module.c:67
argv
#define argv
Definition:
mplay32.c:18
IMAGE_SUBSYSTEM_WINDOWS_GUI
#define IMAGE_SUBSYSTEM_WINDOWS_GUI
Definition:
ntimage.h:437
exit
#define exit(n)
Definition:
config.h:202
_IMAGE_DOS_HEADER
Definition:
ntddk_ex.h:99
_IMAGE_DOS_HEADER::e_lfanew
LONG e_lfanew
Definition:
ntddk_ex.h:118
_IMAGE_NT_HEADERS
Definition:
ntddk_ex.h:181
winbase.h
windef.h
dll
win32
msvcrt
crt_main.c
Generated on Sat Jan 10 2026 06:04:58 for ReactOS by
1.9.6