From: Rémi Bernon rbernon@codeweavers.com
--- dlls/kernel32/tests/loader.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/dlls/kernel32/tests/loader.c b/dlls/kernel32/tests/loader.c index 5eef938ca1f..70470a65b7f 100644 --- a/dlls/kernel32/tests/loader.c +++ b/dlls/kernel32/tests/loader.c @@ -36,16 +36,6 @@
#define ALIGN_SIZE(size, alignment) (((size) + ((ULONG_PTR)(alignment) - 1)) & ~(((ULONG_PTR)(alignment) - 1)))
-struct PROCESS_BASIC_INFORMATION_PRIVATE -{ - NTSTATUS ExitStatus; - PPEB PebBaseAddress; - DWORD_PTR AffinityMask; - DWORD_PTR BasePriority; - ULONG_PTR UniqueProcessId; - ULONG_PTR InheritedFromUniqueProcessId; -}; - static LONG *child_failures; static WORD cb_count, cb_count_sys; static DWORD page_size; @@ -3409,7 +3399,7 @@ static void child_process(const char *dll_name, DWORD target_offset) DWORD ret, dummy, i, code, expected_code; HANDLE file, thread, process; HMODULE hmod; - struct PROCESS_BASIC_INFORMATION_PRIVATE pbi; + PROCESS_BASIC_INFORMATION pbi; DWORD_PTR affinity; void *cookie;
@@ -3748,7 +3738,7 @@ static void test_ExitProcess(void) PROCESS_INFORMATION pi; STARTUPINFOA si = { sizeof(si) }; CONTEXT ctx; - struct PROCESS_BASIC_INFORMATION_PRIVATE pbi; + PROCESS_BASIC_INFORMATION pbi; MEMORY_BASIC_INFORMATION mbi; DWORD_PTR affinity; PROCESS_PRIORITY_CLASS ppc;
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/ntdll/tests/info.c | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-)
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c index c95da44b8cf..071aa2b026e 100644 --- a/dlls/ntdll/tests/info.c +++ b/dlls/ntdll/tests/info.c @@ -31,16 +31,6 @@ #include "psapi.h" #include "wine/test.h"
-struct PROCESS_BASIC_INFORMATION_PRIVATE -{ - NTSTATUS ExitStatus; - PPEB PebBaseAddress; - DWORD_PTR AffinityMask; - DWORD_PTR BasePriority; - ULONG_PTR UniqueProcessId; - ULONG_PTR InheritedFromUniqueProcessId; -}; - static NTSTATUS (WINAPI * pNtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS, PVOID, ULONG, PULONG); static NTSTATUS (WINAPI * pNtQueryInformationProcess)(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG); static NTSTATUS (WINAPI * pNtSetSystemInformation)(SYSTEM_INFORMATION_CLASS, PVOID, ULONG); @@ -1827,17 +1817,7 @@ static void test_query_process_basic(void) { NTSTATUS status; ULONG ReturnLength; - - typedef struct _PROCESS_BASIC_INFORMATION_PRIVATE { - DWORD_PTR ExitStatus; - PPEB PebBaseAddress; - DWORD_PTR AffinityMask; - DWORD_PTR BasePriority; - ULONG_PTR UniqueProcessId; - ULONG_PTR InheritedFromUniqueProcessId; - } PROCESS_BASIC_INFORMATION_PRIVATE; - - PROCESS_BASIC_INFORMATION_PRIVATE pbi; + PROCESS_BASIC_INFORMATION pbi;
/* This test also covers some basic parameter testing that should be the same for * every information class @@ -3283,7 +3263,7 @@ static void test_priority(void) ULONG nt_thread_priority; THREAD_BASIC_INFORMATION tbi; DECLSPEC_ALIGN(8) PROCESS_PRIORITY_CLASS ppc; /* needs align, or STATUS_DATATYPE_MISALIGNMENT is returned */ - struct PROCESS_BASIC_INFORMATION_PRIVATE pbi; + PROCESS_BASIC_INFORMATION pbi; BOOL ret;
/* Change process priority class to HIGH_PRIORITY_CLASS and test */ @@ -3332,7 +3312,14 @@ static void test_priority(void) ok( status == STATUS_SUCCESS, "NtQueryInformationThread failed after setting priority: %08lx\n", status ); ok( thread_base_priority == tbi.BasePriority, "After setting, API priority (%d) does not match NT BasePriority (%ld)\n", thread_base_priority, tbi.BasePriority ); + memset( &pbi, 0xcd, sizeof(pbi) ); status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi), NULL ); + ok( status == STATUS_SUCCESS, "NtQueryInformationProcess failed after setting priority: %08lx\n", status ); + if (is_wow64) + { + todo_wine ok( pbi.BasePriority == 0xcdcdcdcd, "got %#lx\n", pbi.BasePriority ); + pbi.BasePriority = tbi.Priority - THREAD_PRIORITY_HIGHEST; + } expected_nt_priority = pbi.BasePriority + THREAD_PRIORITY_HIGHEST; ok( expected_nt_priority == tbi.Priority, "After setting, effective NT priority (%ld) does not match expected priority %d.\n", tbi.Priority, expected_nt_priority ); @@ -3372,7 +3359,14 @@ static void test_priority(void) * value (6) + THREAD_PRIORITY_LOWEST (-2) = 4. */ status = pNtQueryInformationThread( GetCurrentThread(), ThreadBasicInformation, &tbi, sizeof(tbi), NULL ); ok( status == STATUS_SUCCESS, "NtQueryInformationThread failed after setting priority: %08lx\n", status ); + memset( &pbi, 0xcd, sizeof(pbi) ); status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi), NULL ); + ok( status == STATUS_SUCCESS, "NtQueryInformationProcess failed after setting priority: %08lx\n", status ); + if (is_wow64) + { + todo_wine ok( pbi.BasePriority == 0xcdcdcdcd, "got %#lx\n", pbi.BasePriority ); + pbi.BasePriority = tbi.Priority - THREAD_PRIORITY_LOWEST; + } expected_nt_priority = pbi.BasePriority + THREAD_PRIORITY_LOWEST; ok( expected_nt_priority == tbi.Priority, "After setting, effective NT priority (%ld) does not match expected priority %d.\n", tbi.Priority, expected_nt_priority );
From: Rémi Bernon rbernon@codeweavers.com
--- dlls/ntdll/tests/wow64.c | 14 +++++++++++--- dlls/ntdll/unix/process.c | 14 +++++++------- include/winternl.h | 9 --------- 3 files changed, 18 insertions(+), 19 deletions(-)
diff --git a/dlls/ntdll/tests/wow64.c b/dlls/ntdll/tests/wow64.c index 04b6db728de..73e53106fd0 100644 --- a/dlls/ntdll/tests/wow64.c +++ b/dlls/ntdll/tests/wow64.c @@ -2597,10 +2597,18 @@ static void test_nt_wow64(void) } else win_skip( "NtWow64IsProcessorFeaturePresent not supported\n" );
- if (pNtWow64QueryInformationProcess64) + if (pNtWow64QueryInformationProcess64 && (is_wow64 || is_win64)) { + struct + { + NTSTATUS ExitStatus; + UINT64 PebBaseAddress; + UINT64 AffinityMask; + LONG BasePriority; + UINT64 UniqueProcessId; + UINT64 InheritedFromUniqueProcessId; + } pbi64; PROCESS_BASIC_INFORMATION pbi32; - PROCESS_BASIC_INFORMATION64 pbi64; ULONG expected_peb; ULONG class;
@@ -2641,7 +2649,7 @@ static void test_nt_wow64(void) winetest_pop_context(); } } - else win_skip( "NtWow64QueryInformationProcess64 not supported\n" ); + else skip( "NtWow64QueryInformationProcess64 not supported\n" );
NtClose( process ); } diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c index 4d5d23c47bb..5d5d2668b42 100644 --- a/dlls/ntdll/unix/process.c +++ b/dlls/ntdll/unix/process.c @@ -1637,10 +1637,10 @@ NTSTATUS WINAPI NtWow64QueryInformationProcess64( HANDLE handle, PROCESSINFOCLAS { case ProcessBasicInformation: { - PROCESS_BASIC_INFORMATION64 pbi; + PROCESS_BASIC_INFORMATION pbi; const ULONG_PTR affinity_mask = get_system_affinity_mask();
- if (size >= sizeof(PROCESS_BASIC_INFORMATION64)) + if (size >= sizeof(PROCESS_BASIC_INFORMATION)) { if (!info) ret = STATUS_ACCESS_VIOLATION; else @@ -1651,7 +1651,7 @@ NTSTATUS WINAPI NtWow64QueryInformationProcess64( HANDLE handle, PROCESSINFOCLAS if ((ret = wine_server_call( req )) == STATUS_SUCCESS) { pbi.ExitStatus = reply->exit_code; - pbi.PebBaseAddress = (ULONG)wine_server_get_ptr( reply->peb ); + pbi.PebBaseAddress = wine_server_get_ptr( reply->peb ); pbi.AffinityMask = reply->affinity & affinity_mask; pbi.BasePriority = reply->base_priority; pbi.UniqueProcessId = reply->pid; @@ -1660,14 +1660,14 @@ NTSTATUS WINAPI NtWow64QueryInformationProcess64( HANDLE handle, PROCESSINFOCLAS } SERVER_END_REQ;
- memcpy( info, &pbi, sizeof(PROCESS_BASIC_INFORMATION64) ); - len = sizeof(PROCESS_BASIC_INFORMATION64); + memcpy( info, &pbi, sizeof(PROCESS_BASIC_INFORMATION) ); + len = sizeof(PROCESS_BASIC_INFORMATION); } - if (size > sizeof(PROCESS_BASIC_INFORMATION64)) ret = STATUS_INFO_LENGTH_MISMATCH; + if (size > sizeof(PROCESS_BASIC_INFORMATION)) ret = STATUS_INFO_LENGTH_MISMATCH; } else { - len = sizeof(PROCESS_BASIC_INFORMATION64); + len = sizeof(PROCESS_BASIC_INFORMATION); ret = STATUS_INFO_LENGTH_MISMATCH; } } diff --git a/include/winternl.h b/include/winternl.h index 382a492775a..6e38778f005 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -2642,15 +2642,6 @@ typedef struct _PROCESS_BASIC_INFORMATION { #endif } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
-typedef struct _PROCESS_BASIC_INFORMATION64 { - NTSTATUS ExitStatus; - UINT64 PebBaseAddress; - UINT64 AffinityMask; - LONG BasePriority; - UINT64 UniqueProcessId; - UINT64 InheritedFromUniqueProcessId; -} PROCESS_BASIC_INFORMATION64; - #define PROCESS_PRIOCLASS_IDLE 1 #define PROCESS_PRIOCLASS_NORMAL 2 #define PROCESS_PRIOCLASS_HIGH 3
Jinoh Kang (@iamahuman) commented about dlls/ntdll/tests/wow64.c:
winetest_pop_context(); } }
- else win_skip( "NtWow64QueryInformationProcess64 not supported\n" );
- else skip( "NtWow64QueryInformationProcess64 not supported\n" );
Which Windows version requires skipping?
On Tue Apr 1 12:29:53 2025 +0000, Jinoh Kang wrote:
Which Windows version requires skipping?
32bit ones I think, at least it's skipped on W7 32bit