ReactOS  0.4.15-dev-499-g1f31905
CmdLineUtil.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS API Tests
3  * LICENSE: GPLv2+ - See COPYING in the top level directory
4  * PURPOSE: Test for CRT command-line handling - Utility GUI program.
5  * PROGRAMMER: Hermès BÉLUSCA - MAÏTO <hermes.belusca@sfr.fr>
6  */
7 
8 #define WIN32_NO_STATUS
9 #include <stdio.h>
10 #include <windef.h>
11 #include <winbase.h>
12 #include <ndk/rtlfuncs.h>
13 
14 #include "CmdLineUtil.h"
15 
17  HINSTANCE hPrevInstance,
18  LPWSTR lpCmdLine,
19  int nCmdShow)
20 {
21  /*
22  * Get the unparsed command line as seen in Win32 mode,
23  * and the NT-native mode one.
24  */
26  UNICODE_STRING CmdLine_U = NtCurrentPeb()->ProcessParameters->CommandLine;
27 
28  /* Write the results into a file. */
31  0, NULL,
34  NULL);
36  {
37  DWORD dwSize, dwStringSize;
38 
39  /*
40  * Format of the data file :
41  *
42  * [size_of_string 4 bytes][null_terminated_C_string]
43  * [size_of_string 4 bytes][null_terminated_C_string]
44  * [UNICODE_STRING_structure][string_buffer_of_UNICODE_STRING]
45  */
46 
47  /* 1- Write the WinMain's command line. */
48  dwStringSize = (lstrlenW(lpCmdLine) + 1) * sizeof(WCHAR);
49 
51  &dwStringSize,
52  sizeof(dwStringSize),
53  &dwSize,
54  NULL);
55 
57  lpCmdLine,
58  dwStringSize,
59  &dwSize,
60  NULL);
61 
62  /* 2- Write the Win32 mode command line. */
63  dwStringSize = (lstrlenW(CmdLine) + 1) * sizeof(WCHAR);
64 
66  &dwStringSize,
67  sizeof(dwStringSize),
68  &dwSize,
69  NULL);
70 
72  CmdLine,
73  dwStringSize,
74  &dwSize,
75  NULL);
76 
77  /* 3- Finally, write the UNICODE_STRING command line. */
79  &CmdLine_U,
80  sizeof(CmdLine_U),
81  &dwSize,
82  NULL);
83 
85  CmdLine_U.Buffer,
86  CmdLine_U.Length,
87  &dwSize,
88  NULL);
89 
90  /* Now close the file. */
92  }
93 
94  return 0;
95 }
96 
97 /* EOF */
#define DATAFILE
Definition: CmdLineUtil.h:11
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
#define CloseHandle
Definition: compat.h:407
#define INVALID_HANDLE_VALUE
Definition: compat.h:400
#define lstrlenW
Definition: compat.h:416
HINSTANCE hInstance
Definition: charmap.c:20
LPWSTR WINAPI GetCommandLineW(VOID)
Definition: proc.c:2015
#define GENERIC_WRITE
Definition: nt_native.h:90
smooth NULL
Definition: ftsmooth.c:416
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
CHAR CmdLine[MAX_PATH]
Definition: mach.c:34
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
Definition: CmdLineUtil.c:16
_In_ HANDLE hFile
Definition: mswsock.h:90
#define CREATE_ALWAYS
Definition: disk.h:72
#define NtCurrentPeb()
Definition: FLS.c:20
#define CreateFileW
Definition: compat.h:409
WCHAR * LPWSTR
Definition: xmlstorage.h:184
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define APIENTRY
Definition: api.h:79