kernel32/tests: Added tests about std handle flags inheritance.
Adding support for protect-from-close handle flag to CreateProcess test infrastructure. Signed-off-by: Eric Pouech <epouech@codeweavers.com>
This commit is contained in:
parent
23f98e9663
commit
da9210e038
1 changed files with 28 additions and 4 deletions
|
@ -323,8 +323,9 @@ static void WINAPIV __WINE_PRINTF_ATTR(2,3) childPrintf(HANDLE h, const char* fm
|
|||
#define HATTR_NULL 0x08 /* NULL handle value */
|
||||
#define HATTR_INVALID 0x04 /* INVALID_HANDLE_VALUE */
|
||||
#define HATTR_TYPE 0x0c /* valid handle, with type set */
|
||||
#define HATTR_INHERIT 0x10 /* inheritance flag set */
|
||||
#define HATTR_UNTOUCHED 0x20 /* Identify fields untouched by GetStartupInfoW */
|
||||
#define HATTR_UNTOUCHED 0x10 /* Identify fields untouched by GetStartupInfoW */
|
||||
#define HATTR_INHERIT 0x20 /* inheritance flag set */
|
||||
#define HATTR_PROTECT 0x40 /* protect from close flag set */
|
||||
|
||||
#define HANDLE_UNTOUCHEDW (HANDLE)(DWORD_PTR)(0x5050505050505050ull)
|
||||
|
||||
|
@ -346,8 +347,13 @@ static unsigned encode_handle_attributes(HANDLE h)
|
|||
if (dw == FILE_TYPE_CHAR || dw == FILE_TYPE_DISK || dw == FILE_TYPE_PIPE)
|
||||
{
|
||||
DWORD info;
|
||||
if (GetHandleInformation(h, &info) && (info & HANDLE_FLAG_INHERIT))
|
||||
result |= HATTR_INHERIT;
|
||||
if (GetHandleInformation(h, &info))
|
||||
{
|
||||
if (info & HANDLE_FLAG_INHERIT)
|
||||
result |= HATTR_INHERIT;
|
||||
if (info & HANDLE_FLAG_PROTECT_FROM_CLOSE)
|
||||
result |= HATTR_PROTECT;
|
||||
}
|
||||
}
|
||||
else
|
||||
dw = FILE_TYPE_UNKNOWN;
|
||||
|
@ -3146,6 +3152,7 @@ static void copy_change_subsystem(const char* in, const char* out, DWORD subsyst
|
|||
#define ARG_STARTUPINFO 0x00000000
|
||||
#define ARG_CP_INHERIT 0x40000000
|
||||
#define ARG_HANDLE_INHERIT 0x20000000
|
||||
#define ARG_HANDLE_PROTECT 0x10000000
|
||||
#define ARG_HANDLE_MASK (~0xff000000)
|
||||
|
||||
static BOOL check_run_child(const char *exec, DWORD flags, BOOL cp_inherit,
|
||||
|
@ -3217,6 +3224,13 @@ static BOOL build_startupinfo( STARTUPINFOA *startup, unsigned args, HANDLE hstd
|
|||
ok(0, "Unsupported handle type %x\n", args & ARG_HANDLE_MASK);
|
||||
return FALSE;
|
||||
}
|
||||
if ((args & ARG_HANDLE_PROTECT) && needs_close)
|
||||
{
|
||||
ret = SetHandleInformation(hstd[0], HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE);
|
||||
ok(ret, "Couldn't set inherit flag to hstd[0]\n");
|
||||
ret = SetHandleInformation(hstd[1], HANDLE_FLAG_PROTECT_FROM_CLOSE, HANDLE_FLAG_PROTECT_FROM_CLOSE);
|
||||
ok(ret, "Couldn't set inherit flag to hstd[1]\n");
|
||||
}
|
||||
|
||||
if (args & ARG_STD)
|
||||
{
|
||||
|
@ -3261,6 +3275,14 @@ static void test_StdHandleInheritance(void)
|
|||
/* all others handles type behave as H_DISK */
|
||||
{ARG_STARTUPINFO | ARG_HANDLE_INHERIT | H_DISK, HATTR_NULL, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN},
|
||||
{ARG_STD | ARG_HANDLE_INHERIT | H_DISK, HATTR_TYPE | HATTR_INHERIT | FILE_TYPE_DISK},
|
||||
|
||||
/* all others handles type behave as H_DISK */
|
||||
{ARG_STARTUPINFO | H_DISK, HATTR_NULL, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN},
|
||||
/* 5*/ {ARG_STD | H_DISK, HATTR_TYPE | FILE_TYPE_DISK, .is_todo = 1},
|
||||
|
||||
/* all others handles type behave as H_DISK */
|
||||
{ARG_STARTUPINFO | ARG_HANDLE_PROTECT | H_DISK, HATTR_NULL, .is_broken = HATTR_TYPE | FILE_TYPE_UNKNOWN},
|
||||
{ARG_STD | ARG_HANDLE_PROTECT | H_DISK, HATTR_TYPE | HATTR_PROTECT | FILE_TYPE_DISK, .is_todo = 1},
|
||||
},
|
||||
nothing_gui[] =
|
||||
{
|
||||
|
@ -3372,7 +3394,9 @@ static void test_StdHandleInheritance(void)
|
|||
DeleteFileA(resfile);
|
||||
if (needs_close)
|
||||
{
|
||||
SetHandleInformation(hstd[0], HANDLE_FLAG_PROTECT_FROM_CLOSE, 0);
|
||||
CloseHandle(hstd[0]);
|
||||
SetHandleInformation(hstd[1], HANDLE_FLAG_PROTECT_FROM_CLOSE, 0);
|
||||
CloseHandle(hstd[1]);
|
||||
}
|
||||
winetest_pop_context();
|
||||
|
|
Loading…
Add table
Reference in a new issue