mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 06:05:48 +00:00
Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.
This commit is contained in:
parent
b94e2d8ca0
commit
c2c66aff7d
24198 changed files with 0 additions and 37285 deletions
69
modules/rostests/tests/p_dup_handle/p_dup_handle.c
Normal file
69
modules/rostests/tests/p_dup_handle/p_dup_handle.c
Normal file
|
@ -0,0 +1,69 @@
|
|||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* This tests the ability of the target win32 to duplicate a process handle,
|
||||
* spawn a child, and have the child dup it's own handle back into the parent
|
||||
* using the duplicated handle.
|
||||
*/
|
||||
|
||||
int main( int argc, char **argv ) {
|
||||
HANDLE h_process;
|
||||
HANDLE h_process_in_parent;
|
||||
|
||||
fprintf( stderr, "%lu: Starting\n", GetCurrentProcessId() );
|
||||
|
||||
if( argc == 2 ) {
|
||||
h_process = (HANDLE)(ULONG_PTR)atoi(argv[1]);
|
||||
} else {
|
||||
if( !DuplicateHandle( GetCurrentProcess(),
|
||||
GetCurrentProcess(),
|
||||
GetCurrentProcess(),
|
||||
&h_process,
|
||||
0,
|
||||
TRUE,
|
||||
DUPLICATE_SAME_ACCESS) ) {
|
||||
fprintf( stderr, "%lu: Could not duplicate my own process handle.\n",
|
||||
GetCurrentProcessId() );
|
||||
return 101;
|
||||
}
|
||||
}
|
||||
|
||||
if( argc == 1 ) {
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
char cmdline[1000];
|
||||
|
||||
memset( &si, 0, sizeof( si ) );
|
||||
memset( &pi, 0, sizeof( pi ) );
|
||||
|
||||
sprintf( cmdline, "%s %p", argv[0], h_process );
|
||||
if( !CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL,
|
||||
&si, &pi ) ) {
|
||||
fprintf( stderr, "%lu: Could not create child process.\n",
|
||||
GetCurrentProcessId() );
|
||||
return 5;
|
||||
}
|
||||
|
||||
if( WaitForSingleObject( pi.hThread, INFINITE ) != WAIT_OBJECT_0 ) {
|
||||
fprintf( stderr, "%lu: Failed to wait for child process to terminate.\n",
|
||||
GetCurrentProcessId() );
|
||||
return 6;
|
||||
}
|
||||
} else {
|
||||
if( !DuplicateHandle( GetCurrentProcess(),
|
||||
GetCurrentProcess(),
|
||||
h_process,
|
||||
&h_process_in_parent,
|
||||
0,
|
||||
TRUE,
|
||||
DUPLICATE_SAME_ACCESS) ) {
|
||||
fprintf( stderr, "%lu: Could not duplicate my handle into the parent.\n",
|
||||
GetCurrentProcessId() );
|
||||
return 102;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue