diff --git a/dll/ntdll/CMakeLists.txt b/dll/ntdll/CMakeLists.txt index 6882571577b..cfdf32c3980 100644 --- a/dll/ntdll/CMakeLists.txt +++ b/dll/ntdll/CMakeLists.txt @@ -67,7 +67,7 @@ set_module_type(ntdll win32dll ENTRYPOINT 0) set_subsystem(ntdll console) ################# END HACK ################# -target_link_libraries(ntdll ntdll_vista_static etwtrace csrlib rtl rtl_um rtl_vista ntdllsys libcntpr setjmp uuid ${PSEH_LIB}) +target_link_libraries(ntdll ntdll_vista_static etwtrace csrlib rtl rtl_um rtl_vista ntdllsys ntdllsys_nt6 libcntpr setjmp uuid ${PSEH_LIB}) if(DLL_EXPORT_VERSION GREATER_EQUAL 0x600) target_link_libraries(ntdll cryptlib ntdllsys_nt6) endif() diff --git a/dll/ntdll/def/ntdll.spec b/dll/ntdll/def/ntdll.spec index 46bd5a85f57..b815c5cb626 100644 --- a/dll/ntdll/def/ntdll.spec +++ b/dll/ntdll/def/ntdll.spec @@ -879,6 +879,7 @@ @ stdcall RtlGetCurrentDirectory_U(long ptr) @ stdcall RtlGetCurrentPeb() @ stdcall RtlGetCurrentProcessorNumber() ; 5.2 SP1 and higher +@ stdcall -version=0x601+ RtlGetCurrentProcessorNumberEx(ptr) @ stdcall -stub -version=0x600+ RtlGetCurrentTransaction() @ stdcall RtlGetDaclSecurityDescriptor(ptr ptr ptr ptr) @ stdcall RtlGetElementGenericTable(ptr long) @@ -999,6 +1000,7 @@ @ stdcall RtlIsGenericTableEmptyAvl(ptr) @ stdcall RtlIsNameLegalDOS8Dot3(ptr ptr ptr) @ stdcall -stub -version=0x600+ RtlIsNormalizedString(long ptr long ptr) +@ stdcall -version=0xA00+ RtlIsProcessorFeaturePresent(long) @ stdcall RtlIsTextUnicode(ptr long ptr) @ stdcall RtlIsThreadWithinLoaderCallout() @ stdcall RtlIsValidHandle(ptr ptr) diff --git a/dll/ntdll/nt_0600/ntdll_vista.spec b/dll/ntdll/nt_0600/ntdll_vista.spec index 859f47e1c6c..734929f4d81 100644 --- a/dll/ntdll/nt_0600/ntdll_vista.spec +++ b/dll/ntdll/nt_0600/ntdll_vista.spec @@ -25,8 +25,10 @@ @ stdcall RtlLcidToLocaleName(long ptr long long) @ stdcall RtlLocaleNameToLcid(wstr ptr long) @ stdcall RtlCompareUnicodeStrings(wstr long wstr long long) +@ stdcall RtlGetCurrentProcessorNumberEx(ptr) @ stdcall -arch=i386 RtlInterlockedPushListSListEx(ptr ptr ptr long) @ stdcall -arch=!i386 RtlInterlockedPushListSListEx(ptr ptr ptr long) ntdll.RtlInterlockedPushListSList +@ stdcall RtlIsProcessorFeaturePresent(long) @ stdcall RtlUnicodeToUTF8N(ptr long ptr wstr long) @ stdcall RtlUTF8ToUnicodeN(ptr long ptr str long) diff --git a/sdk/lib/rtl/CMakeLists.txt b/sdk/lib/rtl/CMakeLists.txt index c03d68d934d..8ed33de2e2c 100644 --- a/sdk/lib/rtl/CMakeLists.txt +++ b/sdk/lib/rtl/CMakeLists.txt @@ -70,6 +70,7 @@ list(APPEND SOURCE prefix.c priv.c process.c + processor.c propvar.c random.c rangelist.c @@ -138,6 +139,7 @@ list(APPEND SOURCE_VISTA ${RTL_WINE_SOURCE_VISTA} condvar.c locale.c + processor.c runonce.c slist.c srw.c diff --git a/sdk/lib/rtl/process.c b/sdk/lib/rtl/process.c index c978e7b2399..3cd53000921 100644 --- a/sdk/lib/rtl/process.c +++ b/sdk/lib/rtl/process.c @@ -486,14 +486,6 @@ RtlSetProcessIsCritical(IN BOOLEAN NewValue, sizeof(ULONG)); } -ULONG -NTAPI -RtlGetCurrentProcessorNumber(VOID) -{ - /* Forward to kernel */ - return NtGetCurrentProcessorNumber(); -} - _IRQL_requires_max_(APC_LEVEL) ULONG NTAPI diff --git a/sdk/lib/rtl/processor.c b/sdk/lib/rtl/processor.c new file mode 100644 index 00000000000..39855193560 --- /dev/null +++ b/sdk/lib/rtl/processor.c @@ -0,0 +1,45 @@ +/* + * PROJECT: ReactOS runtime library (RTL) + * LICENSE: MIT (https://spdx.org/licenses/MIT) + * PURPOSE: Implementation of processor related routines + * COPYRIGHT: Copyright 2026 Timo Kreuzer + */ + +/* INCLUDES *****************************************************************/ + +#include + +#define NDEBUG +#include + +/* FUNCTIONS *****************************************************************/ + + +BOOLEAN +NTAPI +RtlIsProcessorFeaturePresent( + _In_ ULONG ProcessorFeature) +{ + if (ProcessorFeature >= RTL_NUMBER_OF(SharedUserData->ProcessorFeatures)) + { + return FALSE; + } + + return SharedUserData->ProcessorFeatures[ProcessorFeature] != 0; +} + +ULONG +NTAPI +RtlGetCurrentProcessorNumber( + VOID) +{ + return NtGetCurrentProcessorNumber(); +} + +VOID +NTAPI +RtlGetCurrentProcessorNumberEx( + _Out_ PPROCESSOR_NUMBER ProcessorNumber) +{ + NtGetCurrentProcessorNumberEx(ProcessorNumber); +}