ReactOS
0.4.16-dev-2122-g1628f5e
crt_wmain.c
Go to the documentation of this file.
1
/*
2
* wmainCRTStartup 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
wmain
(
int
argc
,
WCHAR
**
argv
,
WCHAR
**
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
wmainCRTStartup
(
void
)
42
{
43
int
argc
,
ret
;
44
WCHAR
**
argv
, **
env
;
45
46
#ifdef _UCRT
47
_configure_wide_argv
(
_crt_argv_unexpanded_arguments
);
48
_initialize_wide_environment
();
49
argc
= *
__p___argc
();
50
argv
= *
__p___wargv
();
51
env
=
_get_initial_wide_environment
();
52
#else
53
int
new_mode = 0;
54
__wgetmainargs
(&
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
=
wmain
(
argc
,
argv
,
env
);
59
60
exit
(
ret
);
61
return
ret
;
62
}
argc
static int argc
Definition:
ServiceArgs.c:12
wmainCRTStartup
int __cdecl wmainCRTStartup(void)
Definition:
crt_wmain.c:41
get_nt_header
static const IMAGE_NT_HEADERS * get_nt_header(void)
Definition:
crt_wmain.c:35
env
static LPCWSTR LPCWSTR LPCWSTR env
Definition:
db.cpp:171
__wgetmainargs
int CDECL __wgetmainargs(int *argc, wchar_t ***wargv, wchar_t ***wenvp, int expand_wildcards, int *new_mode)
Definition:
data.c:536
__p___argc
int *CDECL __p___argc(void)
Definition:
data.c:227
__p___wargv
wchar_t ***CDECL __p___wargv(void)
Definition:
data.c:334
__cdecl
#define __cdecl
Definition:
corecrt.h:121
_crt_argv_unexpanded_arguments
@ _crt_argv_unexpanded_arguments
Definition:
corecrt_startup.h:14
_configure_wide_argv
_ACRTIMP errno_t __cdecl _configure_wide_argv(_crt_argv_mode)
Definition:
argv_parsing.cpp:401
_crt_gui_app
@ _crt_gui_app
Definition:
corecrt_startup.h:22
_crt_console_app
@ _crt_console_app
Definition:
corecrt_startup.h:21
_get_initial_wide_environment
_ACRTIMP wchar_t **__cdecl _get_initial_wide_environment(void)
Definition:
environment_initialization.cpp:333
_initialize_wide_environment
_ACRTIMP int __cdecl _initialize_wide_environment(void)
Definition:
environment_initialization.cpp:197
_set_app_type
#define _set_app_type
Definition:
corecrt_startup.h:50
ret
return ret
Definition:
mutex.c:146
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
wmain
int wmain()
Definition:
rdesktop-core-tester.cpp:552
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
WCHAR
__wchar_t WCHAR
Definition:
xmlstorage.h:180
dll
win32
msvcrt
crt_wmain.c
Generated on Sat Jan 10 2026 06:04:58 for ReactOS by
1.9.6