https://git.reactos.org/?p=reactos.git;a=commitdiff;h=103c43861b239604341a7c...
commit 103c43861b239604341a7c213a0e39ea89b1ab50 Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Sat Sep 4 19:53:09 2021 +0200 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org CommitDate: Thu Sep 9 16:15:05 2021 +0200
[WIN32KNT_APITEST] Add more tests for NtUserProcessConnect() (#3937)
Show that NtUserProcessConnect() should return pointers in user client-space. --- .../apitests/win32nt/ntuser/NtUserProcessConnect.c | 40 ++++++++++++++++++---- 1 file changed, 34 insertions(+), 6 deletions(-)
diff --git a/modules/rostests/apitests/win32nt/ntuser/NtUserProcessConnect.c b/modules/rostests/apitests/win32nt/ntuser/NtUserProcessConnect.c index e89a65b7073..9ff9e7d82f4 100644 --- a/modules/rostests/apitests/win32nt/ntuser/NtUserProcessConnect.c +++ b/modules/rostests/apitests/win32nt/ntuser/NtUserProcessConnect.c @@ -1,22 +1,29 @@ /* - * PROJECT: ReactOS api tests - * LICENSE: GPL - See COPYING in the top level directory - * PURPOSE: Test for NtUserProcessConnect - * PROGRAMMERS: + * PROJECT: ReactOS api tests + * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later) + * PURPOSE: Test for NtUserProcessConnect + * COPYRIGHT: Copyright 2008-2020 Timo Kreuzer + * Copyright 2021 Hermes Belusca-Maito */
#include <win32nt.h>
+#define NTOS_MODE_USER +#include <ndk/exfuncs.h> + START_TEST(NtUserProcessConnect) { HANDLE hProcess; NTSTATUS Status; USERCONNECT UserConnect = {0}; + SYSTEM_BASIC_INFORMATION SystemInformation; + ULONG_PTR MaximumUserModeAddress;
hProcess = GetCurrentProcess();
- UserConnect.ulVersion = MAKELONG(0, 5); - Status = NtUserProcessConnect(hProcess, &UserConnect, sizeof(USERCONNECT)); + UserConnect.ulVersion = MAKELONG(0, 5); // == USER_VERSION + // UserConnect.dwDispatchCount; + Status = NtUserProcessConnect(hProcess, &UserConnect, sizeof(UserConnect)); TEST(NT_SUCCESS(Status));
printf("UserConnect.ulVersion = 0x%lx\n", UserConnect.ulVersion); @@ -27,4 +34,25 @@ START_TEST(NtUserProcessConnect) printf("UserConnect.siClient.pDispInfo = 0x%p\n", UserConnect.siClient.pDispInfo); printf("UserConnect.siClient.ulSharedDelta = 0x%Ix\n", UserConnect.siClient.ulSharedDelta);
+ /* Verify the validity of some mandatory fields */ + TEST(UserConnect.ulVersion == MAKELONG(0, 5)); + TEST(UserConnect.ulCurrentVersion == 0); + TEST(UserConnect.siClient.ulSharedDelta != 0); + + /* Get the max um address */ + Status = NtQuerySystemInformation(SystemBasicInformation, + &SystemInformation, + sizeof(SystemInformation), + NULL); + TEST(NT_SUCCESS(Status)); + + MaximumUserModeAddress = SystemInformation.MaximumUserModeAddress; + + /* Verify the validity of pointers -- They must be in client space */ + TEST(UserConnect.siClient.psi != NULL); + TEST(UserConnect.siClient.aheList != NULL); + // TEST(UserConnect.siClient.pDispInfo != NULL); + TEST((ULONG_PTR)UserConnect.siClient.psi < MaximumUserModeAddress); + TEST((ULONG_PTR)UserConnect.siClient.aheList < MaximumUserModeAddress); + // TEST((ULONG_PTR)UserConnect.siClient.pDispInfo < MaximumUserModeAddress); }