diff --git a/dll/ntdll/nt_0600/ntdll_vista.spec b/dll/ntdll/nt_0600/ntdll_vista.spec index 9c3446c8394..d690a00983c 100644 --- a/dll/ntdll/nt_0600/ntdll_vista.spec +++ b/dll/ntdll/nt_0600/ntdll_vista.spec @@ -21,3 +21,39 @@ @ stdcall RtlLcidToLocaleName(long ptr long long) @ stdcall RtlLocaleNameToLcid(wstr ptr long) @ stdcall RtlCompareUnicodeStrings(wstr long wstr long long) + +@ stdcall TpAllocCleanupGroup(ptr) +@ stdcall TpAllocIoCompletion(ptr ptr ptr ptr ptr) +@ stdcall TpAllocPool(ptr ptr) +@ stdcall TpAllocTimer(ptr ptr ptr ptr) +@ stdcall TpAllocWait(ptr ptr ptr ptr) +@ stdcall TpAllocWork(ptr ptr ptr ptr) +@ stdcall TpCallbackLeaveCriticalSectionOnCompletion(ptr ptr) +@ stdcall TpCallbackMayRunLong(ptr) +@ stdcall TpCallbackReleaseMutexOnCompletion(ptr ptr) +@ stdcall TpCallbackReleaseSemaphoreOnCompletion(ptr ptr long) +@ stdcall TpCallbackSetEventOnCompletion(ptr ptr) +@ stdcall TpCallbackUnloadDllOnCompletion(ptr ptr) +@ stdcall TpCancelAsyncIoOperation(ptr) +@ stdcall TpDisassociateCallback(ptr) +@ stdcall TpIsTimerSet(ptr) +@ stdcall TpPostWork(ptr) +@ stdcall TpQueryPoolStackInformation(ptr ptr) +@ stdcall TpReleaseCleanupGroup(ptr) +@ stdcall TpReleaseCleanupGroupMembers(ptr long ptr) +@ stdcall TpReleaseIoCompletion(ptr) +@ stdcall TpReleasePool(ptr) +@ stdcall TpReleaseTimer(ptr) +@ stdcall TpReleaseWait(ptr) +@ stdcall TpReleaseWork(ptr) +@ stdcall TpSetPoolMaxThreads(ptr long) +@ stdcall TpSetPoolMinThreads(ptr long) +@ stdcall TpSetPoolStackInformation(ptr ptr) +@ stdcall TpSetTimer(ptr ptr long long) +@ stdcall TpSetWait(ptr long ptr) +@ stdcall TpSimpleTryPost(ptr ptr ptr) +@ stdcall TpStartAsyncIoOperation(ptr) +@ stdcall TpWaitForIoCompletion(ptr long) +@ stdcall TpWaitForTimer(ptr long) +@ stdcall TpWaitForWait(ptr long) +@ stdcall TpWaitForWork(ptr long) diff --git a/dll/win32/kernel32/kernel32.spec b/dll/win32/kernel32/kernel32.spec index 07f21711311..5be33f9c9ff 100644 --- a/dll/win32/kernel32/kernel32.spec +++ b/dll/win32/kernel32/kernel32.spec @@ -1159,7 +1159,7 @@ @ stdcall -version=0x601+ TryAcquireSRWLockExclusive(ptr) ntdll.RtlTryAcquireSRWLockExclusive @ stdcall -version=0x601+ TryAcquireSRWLockShared(ptr) ntdll.RtlTryAcquireSRWLockShared @ stdcall TryEnterCriticalSection(ptr) ntdll.RtlTryEnterCriticalSection -@ stub -version=0x600+ TrySubmitThreadpoolCallback +@ stdcall -version=0x600+ TrySubmitThreadpoolCallback(ptr ptr ptr) @ stdcall TzSpecificLocalTimeToSystemTime(ptr ptr ptr) @ stdcall UTRegister(long str str str ptr ptr ptr) @ stdcall UTUnRegister(long) diff --git a/dll/win32/kernel32/kernel32_vista/CMakeLists.txt b/dll/win32/kernel32/kernel32_vista/CMakeLists.txt index 867216c1362..28ba7f5a3ab 100644 --- a/dll/win32/kernel32/kernel32_vista/CMakeLists.txt +++ b/dll/win32/kernel32/kernel32_vista/CMakeLists.txt @@ -21,6 +21,7 @@ list(APPEND SOURCE LocaleNameToLCID.c SetThreadDescription.c sync.c + threadpool.c vista.c) # These functions are not exported from kernel32_vista (yet). diff --git a/dll/win32/kernel32/kernel32_vista/kernel32_vista.spec b/dll/win32/kernel32/kernel32_vista/kernel32_vista.spec index 9dbce2d6f7d..c5b35d49ce6 100644 --- a/dll/win32/kernel32/kernel32_vista/kernel32_vista.spec +++ b/dll/win32/kernel32/kernel32_vista/kernel32_vista.spec @@ -61,3 +61,5 @@ @ stdcall GetNamedPipeClientProcessId(ptr ptr) @ stdcall SetThreadDescription(ptr wstr) # Win 10 @ stdcall GetSystemTimePreciseAsFileTime(ptr) kernel32.GetSystemTimeAsFileTime +@ stdcall TrySubmitThreadpoolCallback(ptr ptr ptr) +@ stdcall FreeLibraryWhenCallbackReturns(ptr ptr) ntdll_vista.TpCallbackUnloadDllOnCompletion diff --git a/dll/win32/kernel32/kernel32_vista/threadpool.c b/dll/win32/kernel32/kernel32_vista/threadpool.c new file mode 100644 index 00000000000..161bc7535c5 --- /dev/null +++ b/dll/win32/kernel32/kernel32_vista/threadpool.c @@ -0,0 +1,20 @@ +#include "k32_vista.h" + +extern BOOL WINAPI DECLSPEC_HOTPATCH TpSimpleTryPost( PTP_SIMPLE_CALLBACK callback, PVOID userdata, + TP_CALLBACK_ENVIRON *environment ); + +/*********************************************************************** + * TrySubmitThreadpoolCallback (kernelbase.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH TrySubmitThreadpoolCallback( PTP_SIMPLE_CALLBACK callback, PVOID userdata, + TP_CALLBACK_ENVIRON *environment ) +{ + NTSTATUS status = TpSimpleTryPost( callback, userdata, environment ); + if (!NT_SUCCESS(status)) + { + SetLastError(RtlNtStatusToDosError(status)); + return FALSE; + } + + return TRUE; +} diff --git a/sdk/lib/rtl/CMakeLists.txt b/sdk/lib/rtl/CMakeLists.txt index 61e7c5d7f8f..c6afb4c3e0c 100644 --- a/sdk/lib/rtl/CMakeLists.txt +++ b/sdk/lib/rtl/CMakeLists.txt @@ -18,6 +18,9 @@ list(APPEND RTL_WINE_SOURCE timerqueue.c threadpool.c ) +list(APPEND RTL_WINE_SOURCE_VISTA + threadpool.c +) set_source_files_properties(threadpool.c PROPERTIES COMPILE_DEFINITIONS __WINESRC__) if(MSVC) @@ -131,10 +134,12 @@ add_pch(rtl rtl.h SOURCE) add_dependencies(rtl psdk asm) list(APPEND SOURCE_VISTA + ${RTL_WINE_SOURCE_VISTA} condvar.c locale.c runonce.c srw.c + threadpool.c unicode_vista.c utf8.c)