ReactOS  0.4.15-dev-321-g2d9b385
map_dup_inherit.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <windows.h>
3 #include <stdlib.h>
4 #include <string.h>
5 
6 /* This tests the ability of the target win32 to create an anonymous file
7  * mapping, create a mapping view with MapViewOfFile, and then realize the
8  * pages with VirtualAlloc.
9  */
10 
11 int main( int argc, char **argv ) {
12  HANDLE file_view;
13  void *file_map;
14  int *x;
15 
16  fprintf( stderr, "%lu: Starting\n", GetCurrentProcessId() );
17 
18  if( argc == 2 ) {
19  #ifdef WIN64
20  file_map = (void *)_atoi64(argv[1]);
21  #else
22  file_map = (void *)UlongToPtr(atoi(argv[1]));
23  #endif
24  } else {
26  NULL,
28  0, 0x1000, NULL );
29  if( !SetHandleInformation( file_map,
32  fprintf( stderr, "%lu: Could not make handle inheritable.\n",
34  return 100;
35  }
36  }
37 
38  if( !file_map ) {
39  fprintf( stderr, "%lu: Could not create anonymous file map.\n",
41  return 1;
42  }
43 
44  file_view = MapViewOfFile( file_map,
46  0,
47  0,
48  0x1000 );
49 
50  if( !file_view ) {
51  fprintf( stderr, "%lu: Could not map view of file.\n",
53  if (file_map != INVALID_HANDLE_VALUE)
54  CloseHandle(file_map);
55  return 2;
56  }
57 
58  if( !VirtualAlloc( file_view, 0x1000, MEM_COMMIT, PAGE_READWRITE ) ) {
59  fprintf( stderr, "%lu: VirtualAlloc failed to realize the page.\n",
61  if (file_map != INVALID_HANDLE_VALUE)
62  CloseHandle(file_map);
63  return 3;
64  }
65 
66  x = (int *)file_view;
67  x[0] = 0x12345678;
68 
69  if( x[0] != 0x12345678 ) {
70  fprintf( stderr, "%lu: Can't write to the memory (%08x != 0x12345678)\n",
71  GetCurrentProcessId(), x[0] );
72  return 4;
73  }
74 
75  if( argc == 1 ) {
76  STARTUPINFO si;
78  char cmdline[1000];
79 
80  memset( &si, 0, sizeof( si ) );
81  memset( &pi, 0, sizeof( pi ) );
82 
83  sprintf(cmdline,"%s %p", argv[0], file_map);
84  CloseHandle(file_map);
85 
87  &si, &pi ) ) {
88  fprintf( stderr, "%lu: Could not create child process.\n",
90  if (pi.hProcess != INVALID_HANDLE_VALUE)
91  CloseHandle(pi.hProcess);
92 
93  return 5;
94  }
95 
96  if( WaitForSingleObject( pi.hThread, INFINITE ) != WAIT_OBJECT_0 ) {
97  fprintf( stderr, "%lu: Failed to wait for child process to terminate.\n",
99  if (pi.hProcess != INVALID_HANDLE_VALUE)
100  CloseHandle(pi.hProcess);
101  return 6;
102  }
103 
104  if (pi.hProcess != INVALID_HANDLE_VALUE)
105  CloseHandle(pi.hProcess);
106 
107  }
108 
109  return 0;
110 }
static int argc
Definition: ServiceArgs.c:12
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:407
#define MapViewOfFile
Definition: compat.h:411
#define CreateFileMapping
Definition: winbase.h:3590
int main(int argc, char **argv)
#define INVALID_HANDLE_VALUE
Definition: compat.h:400
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
TCHAR * cmdline
Definition: stretchblt.cpp:32
#define argv
Definition: mplay32.c:18
#define MEM_COMMIT
Definition: nt_native.h:1313
#define sprintf(buf, format,...)
Definition: sprintf.c:55
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition: synch.c:82
LPVOID NTAPI VirtualAlloc(IN LPVOID lpAddress, IN SIZE_T dwSize, IN DWORD flAllocationType, IN DWORD flProtect)
Definition: virtmem.c:74
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
#define SEC_RESERVE
Definition: nt_native.h:1323
smooth NULL
Definition: ftsmooth.c:416
#define HANDLE_FLAG_INHERIT
Definition: winbase.h:261
#define UlongToPtr(u)
Definition: config.h:106
#define WAIT_OBJECT_0
Definition: winbase.h:387
static refpint_t pi[]
Definition: server.c:96
#define FILE_MAP_WRITE
Definition: winbase.h:154
#define CreateProcess
Definition: winbase.h:3598
_Check_return_ __MINGW_EXTENSION _CRTIMP __int64 __cdecl _atoi64(_In_z_ const char *_String)
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
FILE * stderr
BOOL WINAPI SetHandleInformation(IN HANDLE hObject, IN DWORD dwMask, IN DWORD dwFlags)
Definition: handle.c:78
#define INFINITE
Definition: serial.h:102
#define memset(x, y, z)
Definition: compat.h:39
DWORD WINAPI GetCurrentProcessId(VOID)
Definition: proc.c:1158
#define PAGE_READWRITE
Definition: nt_native.h:1304