mirror of
https://github.com/reactos/reactos.git
synced 2025-08-01 23:32:59 +00:00
Rework apisets to use a table
This removes all fake apiset forwarders, and handles apisets inside ntdll. This is not 100% compatible with how windows does it, but it should be good enough for us.
This commit is contained in:
parent
116c0cd9a5
commit
24a56f89ab
246 changed files with 1910 additions and 9091 deletions
95
modules/rostests/apitests/apisets/apisets.c
Normal file
95
modules/rostests/apitests/apisets/apisets.c
Normal file
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* PROJECT: ReactOS API tests
|
||||
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
|
||||
* PURPOSE: Validate the apiset lookup in ApiSetResolveToHost
|
||||
* COPYRIGHT: Copyright 2024 Mark Jansen <mark.jansen@reactos.org>
|
||||
*/
|
||||
|
||||
#include <ndk/umtypes.h>
|
||||
#include <ndk/rtlfuncs.h>
|
||||
#include <apitest.h>
|
||||
#include "apisetsp.h"
|
||||
|
||||
static void
|
||||
resolve_single(PCUNICODE_STRING Apiset)
|
||||
{
|
||||
UNICODE_STRING Tmp = {0};
|
||||
NTSTATUS Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, Apiset, &Tmp);
|
||||
ok_ntstatus(Status, STATUS_SUCCESS);
|
||||
|
||||
BOOLEAN Resolved = FALSE;
|
||||
UNICODE_STRING Result = {0};
|
||||
|
||||
Status = ApiSetResolveToHost(~0u, &Tmp, &Resolved, &Result);
|
||||
ok_ntstatus(Status, STATUS_SUCCESS);
|
||||
ok_eq_bool(Resolved, TRUE);
|
||||
ok(Result.Buffer != NULL, "Got NULL\n");
|
||||
}
|
||||
|
||||
static void
|
||||
resolve_fail_single(PCUNICODE_STRING Apiset)
|
||||
{
|
||||
UNICODE_STRING Tmp = {0};
|
||||
NTSTATUS Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, Apiset, &Tmp);
|
||||
ok_ntstatus(Status, STATUS_SUCCESS);
|
||||
|
||||
BOOLEAN Resolved = FALSE;
|
||||
UNICODE_STRING Result = {0, 0, (PWSTR)0xbadbeef};
|
||||
|
||||
Status = ApiSetResolveToHost(~0u, &Tmp, &Resolved, &Result);
|
||||
ok_ntstatus(Status, STATUS_SUCCESS);
|
||||
ok_eq_bool(Resolved, FALSE);
|
||||
ok_ptr(Result.Buffer, (PWSTR)0xbadbeef);
|
||||
}
|
||||
|
||||
static void
|
||||
test_single(PCUNICODE_STRING Apiset)
|
||||
{
|
||||
winetest_push_context("%S", Apiset->Buffer);
|
||||
resolve_single(Apiset);
|
||||
winetest_pop_context();
|
||||
}
|
||||
|
||||
static void
|
||||
fail_single(PCUNICODE_STRING Apiset)
|
||||
{
|
||||
winetest_push_context("%S", Apiset->Buffer);
|
||||
resolve_fail_single(Apiset);
|
||||
winetest_pop_context();
|
||||
}
|
||||
|
||||
|
||||
START_TEST(apisets)
|
||||
{
|
||||
// Ensure we can find some manually selected ones (both with and without extension):
|
||||
UNICODE_STRING Console1 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Console-L1-1-0.dll");
|
||||
UNICODE_STRING Console2 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Console-L1-1-0");
|
||||
UNICODE_STRING Handle1 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Handle-L1-1-0.dll");
|
||||
UNICODE_STRING Handle2 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Handle-L1-1-0");
|
||||
UNICODE_STRING Heap1 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Heap-L1-1-0.dll");
|
||||
UNICODE_STRING Heap2 = RTL_CONSTANT_STRING(L"api-MS-Win-Core-Heap-L1-1-0");
|
||||
|
||||
test_single(&Console1);
|
||||
test_single(&Console2);
|
||||
test_single(&Handle1);
|
||||
test_single(&Handle2);
|
||||
test_single(&Heap1);
|
||||
test_single(&Heap2);
|
||||
|
||||
// Walk the entire table, to ensure we can find each entry
|
||||
for (DWORD n = 0; n < g_ApisetsCount; ++n)
|
||||
{
|
||||
PCUNICODE_STRING Apiset = &g_Apisets[n].Name;
|
||||
winetest_push_context("%ld: %S", n, Apiset->Buffer);
|
||||
resolve_single(Apiset);
|
||||
winetest_pop_context();
|
||||
}
|
||||
|
||||
UNICODE_STRING Fail1 = RTL_CONSTANT_STRING(L"");
|
||||
UNICODE_STRING Fail2 = RTL_CONSTANT_STRING(L"api-");
|
||||
UNICODE_STRING Fail3 = RTL_CONSTANT_STRING(L"ext");
|
||||
|
||||
fail_single(&Fail1);
|
||||
fail_single(&Fail2);
|
||||
fail_single(&Fail3);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue