fprintf( stderr, "%lu: Starting\n", GetCurrentProcessId() );
if( argc == 2 ) {
- file_map = (void *)atoi(argv[1]);
+ #ifdef WIN64
+ file_map = (void *)atoi64(argv[1]);
+ #else
+ file_map = (void *)UlongToPtr(atoi(argv[1]));
+ #endif
} else {
- file_map = CreateFileMapping( INVALID_HANDLE_VALUE,
- NULL,
- PAGE_READWRITE | SEC_RESERVE,
+ file_map = CreateFileMapping( INVALID_HANDLE_VALUE,
+ NULL,
+ PAGE_READWRITE | SEC_RESERVE,
0, 0x1000, NULL );
- if( !SetHandleInformation( file_map,
- HANDLE_FLAG_INHERIT,
+ if( !SetHandleInformation( file_map,
+ HANDLE_FLAG_INHERIT,
HANDLE_FLAG_INHERIT ) ) {
fprintf( stderr, "%lu: Could not make handle inheritable.\n",
GetCurrentProcessId() );
return 100;
}
}
-
+
if( !file_map ) {
fprintf( stderr, "%lu: Could not create anonymous file map.\n",
GetCurrentProcessId() );
return 1;
}
-
+
file_view = MapViewOfFile( file_map,
FILE_MAP_WRITE,
0,
0,
0x1000 );
-
+
if( !file_view ) {
fprintf( stderr, "%lu: Could not map view of file.\n",
GetCurrentProcessId() );
+ if (file_map != INVALID_HANDLE_VALUE)
+ CloseHandle(file_map);
return 2;
}
-
+
if( !VirtualAlloc( file_view, 0x1000, MEM_COMMIT, PAGE_READWRITE ) ) {
fprintf( stderr, "%lu: VirtualAlloc failed to realize the page.\n",
GetCurrentProcessId() );
+ if (file_map != INVALID_HANDLE_VALUE)
+ CloseHandle(file_map);
return 3;
}
-
+
x = (int *)file_view;
x[0] = 0x12345678;
-
+
if( x[0] != 0x12345678 ) {
fprintf( stderr, "%lu: Can't write to the memory (%08x != 0x12345678)\n",
GetCurrentProcessId(), x[0] );
memset( &si, 0, sizeof( si ) );
memset( &pi, 0, sizeof( pi ) );
- sprintf(cmdline,"%s %d", argv[0], (int)file_map);
+ sprintf(cmdline,"%s %p", argv[0], file_map);
+ CloseHandle(file_map);
+
if( !CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL,
&si, &pi ) ) {
fprintf( stderr, "%lu: Could not create child process.\n",
GetCurrentProcessId() );
+ if (pi.hProcess != INVALID_HANDLE_VALUE)
+ CloseHandle(pi.hProcess);
+
return 5;
}
if( WaitForSingleObject( pi.hThread, INFINITE ) != WAIT_OBJECT_0 ) {
fprintf( stderr, "%lu: Failed to wait for child process to terminate.\n",
GetCurrentProcessId() );
+ if (pi.hProcess != INVALID_HANDLE_VALUE)
+ CloseHandle(pi.hProcess);
return 6;
}
+
+ if (pi.hProcess != INVALID_HANDLE_VALUE)
+ CloseHandle(pi.hProcess);
+
}
return 0;