diff --git a/dlls/kernel32/tests/thread.c b/dlls/kernel32/tests/thread.c index 001128b466f..334bdf49277 100644 --- a/dlls/kernel32/tests/thread.c +++ b/dlls/kernel32/tests/thread.c @@ -1969,6 +1969,7 @@ todo_wine case ThreadAffinityMask: case ThreadQuerySetWin32StartAddress: + case ThreadIsIoPending: todo_wine ok(status == STATUS_ACCESS_DENIED, "for info %u expected STATUS_ACCESS_DENIED, got %08x (ret_len %u)\n", i, status, ret_len); break; diff --git a/dlls/kernel32/thread.c b/dlls/kernel32/thread.c index 82ccebec8cc..de466185e9c 100644 --- a/dlls/kernel32/thread.c +++ b/dlls/kernel32/thread.c @@ -918,8 +918,17 @@ LANGID WINAPI GetThreadUILanguage( void ) */ BOOL WINAPI GetThreadIOPendingFlag( HANDLE thread, PBOOL io_pending ) { - FIXME("%p, %p\n", thread, io_pending); - *io_pending = FALSE; + NTSTATUS status; + + TRACE("%p, %p\n", thread, io_pending); + + status = NtQueryInformationThread( thread, ThreadIsIoPending, + io_pending, sizeof(*io_pending), NULL ); + if (status) + { + SetLastError( RtlNtStatusToDosError(status) ); + return FALSE; + } return TRUE; } diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c index e3cc11ab4f4..c9a5da6226e 100644 --- a/dlls/ntdll/thread.c +++ b/dlls/ntdll/thread.c @@ -1157,6 +1157,14 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class, } } return status; + case ThreadIsIoPending: + FIXME( "ThreadIsIoPending info class not supported yet\n" ); + if (length != sizeof(BOOL)) return STATUS_INFO_LENGTH_MISMATCH; + if (!data) return STATUS_ACCESS_DENIED; + + *(BOOL*)data = FALSE; + if (ret_len) *ret_len = sizeof(BOOL); + return STATUS_SUCCESS; case ThreadPriority: case ThreadBasePriority: case ThreadImpersonationToken: @@ -1167,7 +1175,6 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class, case ThreadIdealProcessor: case ThreadPriorityBoost: case ThreadSetTlsArrayAddress: - case ThreadIsIoPending: default: FIXME( "info class %d not supported yet\n", class ); return STATUS_NOT_IMPLEMENTED;