From: Sebastian Lackner Subject: [10/12] kernel32: Forward threadpool instance functions to ntdll. Message-Id: <5595D08E.9070909@fds-team.de> Date: Fri, 3 Jul 2015 02:00:14 +0200 --- dlls/kernel32/kernel32.spec | 14 +++++++------- dlls/kernel32/thread.c | 19 +++++++++++++++++++ include/winternl.h | 7 +++++++ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index 3d3a68b..0825bdb 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -204,7 +204,7 @@ @ stdcall BuildCommDCBAndTimeoutsA(str ptr ptr) @ stdcall BuildCommDCBAndTimeoutsW(wstr ptr ptr) @ stdcall BuildCommDCBW(wstr ptr) -# @ stub CallbackMayRunLong +@ stdcall CallbackMayRunLong(ptr) @ stdcall CallNamedPipeA(str ptr long ptr long ptr long) @ stdcall CallNamedPipeW(wstr ptr long ptr long ptr long) @ stub CancelDeviceWakeupRequest @@ -369,7 +369,7 @@ @ stdcall DeleteFileW(wstr) # @ stub DeleteProcThreadAttributeList # @ stub DisableThreadProfiling -# @ stub DisassociateCurrentThreadFromCallback +@ stdcall DisassociateCurrentThreadFromCallback(ptr) ntdll.TpDisassociateCallback @ stdcall DeleteTimerQueue(long) @ stdcall DeleteTimerQueueEx (long long) @ stdcall DeleteTimerQueueTimer(long long long) @@ -495,7 +495,6 @@ @ stdcall FindFirstVolumeMountPointA(str ptr long) @ stdcall FindFirstVolumeMountPointW(wstr ptr long) @ stdcall FindFirstVolumeW(ptr long) -# @ stub FreeLibraryWhenCallbackReturns @ stdcall FindNextChangeNotification(long) @ stdcall FindNextFileA(long ptr) # @ stub FindNextFileNameW @@ -533,6 +532,7 @@ @ stub -i386 FreeLSCallback @ stdcall FreeLibrary(long) @ stdcall FreeLibraryAndExitThread(long long) +@ stdcall FreeLibraryWhenCallbackReturns(ptr ptr) ntdll.TpCallbackUnloadDllOnCompletion @ stdcall FreeResource(long) @ stdcall -i386 -private FreeSLCallback(long) krnl386.exe16.FreeSLCallback @ stub FreeUserPhysicalPages @@ -1035,7 +1035,7 @@ @ stdcall LZSeek(long long long) @ stdcall LZStart() @ stdcall LeaveCriticalSection(ptr) ntdll.RtlLeaveCriticalSection -# @ stub LeaveCriticalSectionWhenCallbackReturns +@ stdcall LeaveCriticalSectionWhenCallbackReturns(ptr ptr) ntdll.TpCallbackLeaveCriticalSectionOnCompletion # @ stub LoadAppInitDlls @ stdcall LoadLibraryA(str) @ stdcall LoadLibraryExA( str long long) @@ -1252,9 +1252,9 @@ @ stdcall ReinitializeCriticalSection(ptr) @ stdcall ReleaseActCtx(ptr) @ stdcall ReleaseMutex(long) -# @ stub ReleaseMutexWhenCallbackReturns +@ stdcall ReleaseMutexWhenCallbackReturns(ptr long) ntdll.TpCallbackReleaseMutexOnCompletion @ stdcall ReleaseSemaphore(long long ptr) -# @ stub ReleaseSemaphoreWhenCallbackReturns +@ stdcall ReleaseSemaphoreWhenCallbackReturns(ptr long long) ntdll.TpCallbackReleaseSemaphoreOnCompletion @ stdcall ReleaseSRWLockExclusive(ptr) ntdll.RtlReleaseSRWLockExclusive @ stdcall ReleaseSRWLockShared(ptr) ntdll.RtlReleaseSRWLockShared @ stdcall RemoveDirectoryA(str) @@ -1385,7 +1385,7 @@ @ stdcall SetEnvironmentVariableW(wstr wstr) @ stdcall SetErrorMode(long) @ stdcall SetEvent(long) -# @ stub SetEventWhenCallbackReturns +@ stdcall SetEventWhenCallbackReturns(ptr long) ntdll.TpCallbackSetEventOnCompletion @ stdcall SetFileApisToANSI() @ stdcall SetFileApisToOEM() @ stdcall SetFileAttributesA(str long) diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c index 1ca0945..c8e906d 100644 --- a/dlls/kernel32/thread.c +++ b/dlls/kernel32/thread.c @@ -862,6 +862,25 @@ BOOL WINAPI GetThreadPreferredUILanguages( DWORD flags, PULONG count, PCZZWSTR b } /*********************************************************************** + * CallbackMayRunLong (KERNEL32.@) + */ +BOOL WINAPI CallbackMayRunLong( TP_CALLBACK_INSTANCE *instance ) +{ + NTSTATUS status; + + TRACE( "%p\n", instance ); + + status = TpCallbackMayRunLong( instance ); + if (status) + { + SetLastError( RtlNtStatusToDosError(status) ); + return FALSE; + } + + return TRUE; +} + +/*********************************************************************** * CreateThreadpoolCleanupGroup (KERNEL32.@) */ PTP_CLEANUP_GROUP WINAPI CreateThreadpoolCleanupGroup( void ) diff --git a/include/winternl.h b/include/winternl.h index ab64a71..5b07994 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -2621,6 +2621,13 @@ NTSYSAPI NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PC NTSYSAPI NTSTATUS WINAPI TpAllocCleanupGroup(TP_CLEANUP_GROUP **); NTSYSAPI NTSTATUS WINAPI TpAllocTimer(TP_TIMER **,PTP_TIMER_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); NTSYSAPI NTSTATUS WINAPI TpAllocWork(TP_WORK **,PTP_WORK_CALLBACK,PVOID,TP_CALLBACK_ENVIRON *); +NTSYSAPI void WINAPI TpCallbackLeaveCriticalSectionOnCompletion(TP_CALLBACK_INSTANCE *,RTL_CRITICAL_SECTION *); +NTSYSAPI NTSTATUS WINAPI TpCallbackMayRunLong(TP_CALLBACK_INSTANCE *); +NTSYSAPI void WINAPI TpCallbackReleaseMutexOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE); +NTSYSAPI void WINAPI TpCallbackReleaseSemaphoreOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE,DWORD); +NTSYSAPI void WINAPI TpCallbackSetEventOnCompletion(TP_CALLBACK_INSTANCE *,HANDLE); +NTSYSAPI void WINAPI TpCallbackUnloadDllOnCompletion(TP_CALLBACK_INSTANCE *,HMODULE); +NTSYSAPI void WINAPI TpDisassociateCallback(TP_CALLBACK_INSTANCE *); NTSYSAPI BOOL WINAPI TpIsTimerSet(TP_TIMER *); NTSYSAPI void WINAPI TpPostWork(TP_WORK *); NTSYSAPI void WINAPI TpReleaseCleanupGroup(TP_CLEANUP_GROUP *); -- 2.4.4