Don't use THREAD_IdToTEB in EnumThreadWindows.
This commit is contained in:
parent
e21ead408a
commit
66ffa17b10
|
@ -21,7 +21,6 @@
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
#include "winpos.h"
|
#include "winpos.h"
|
||||||
#include "thread.h"
|
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
#include "debugtools.h"
|
#include "debugtools.h"
|
||||||
|
@ -2882,10 +2881,11 @@ BOOL WINAPI EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam )
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* EnumTaskWindows (USER.225)
|
* WIN_EnumQueueWindows
|
||||||
|
*
|
||||||
|
* Helper for EnumTaskWindows16 and EnumThreadWindows.
|
||||||
*/
|
*/
|
||||||
BOOL16 WINAPI EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func,
|
static BOOL WIN_EnumQueueWindows( HQUEUE16 queue, WNDENUMPROC func, LPARAM lParam )
|
||||||
LPARAM lParam )
|
|
||||||
{
|
{
|
||||||
WND **list, **ppWnd;
|
WND **list, **ppWnd;
|
||||||
|
|
||||||
|
@ -2906,15 +2906,15 @@ BOOL16 WINAPI EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func,
|
||||||
int iWndsLocks = 0;
|
int iWndsLocks = 0;
|
||||||
/* Make sure that the window still exists */
|
/* Make sure that the window still exists */
|
||||||
if (!IsWindow((*ppWnd)->hwndSelf)) continue;
|
if (!IsWindow((*ppWnd)->hwndSelf)) continue;
|
||||||
if (QUEUE_GetQueueTask((*ppWnd)->hmemTaskQ) != hTask) continue;
|
if ((*ppWnd)->hmemTaskQ != queue) continue;
|
||||||
|
|
||||||
/* To avoid any deadlocks, all the locks on the windows
|
/* To avoid any deadlocks, all the locks on the windows
|
||||||
structures must be suspended before the control
|
structures must be suspended before the control
|
||||||
is passed to the application */
|
is passed to the application */
|
||||||
iWndsLocks = WIN_SuspendWndsLock();
|
iWndsLocks = WIN_SuspendWndsLock();
|
||||||
funcRetval = func( (*ppWnd)->hwndSelf, lParam );
|
funcRetval = func( (*ppWnd)->hwndSelf, lParam );
|
||||||
WIN_RestoreWndsLock(iWndsLocks);
|
WIN_RestoreWndsLock(iWndsLocks);
|
||||||
|
|
||||||
if (!funcRetval) break;
|
if (!funcRetval) break;
|
||||||
}
|
}
|
||||||
WIN_ReleaseWinArray(list);
|
WIN_ReleaseWinArray(list);
|
||||||
|
@ -2923,14 +2923,26 @@ BOOL16 WINAPI EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* EnumTaskWindows16 (USER.225)
|
||||||
|
*/
|
||||||
|
BOOL16 WINAPI EnumTaskWindows16( HTASK16 hTask, WNDENUMPROC16 func,
|
||||||
|
LPARAM lParam )
|
||||||
|
{
|
||||||
|
HQUEUE16 queue = GetTaskQueue16( hTask );
|
||||||
|
if (!queue) return FALSE;
|
||||||
|
return WIN_EnumQueueWindows( queue, (WNDENUMPROC)func, lParam );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* EnumThreadWindows (USER32.@)
|
* EnumThreadWindows (USER32.@)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI EnumThreadWindows( DWORD id, WNDENUMPROC func, LPARAM lParam )
|
BOOL WINAPI EnumThreadWindows( DWORD id, WNDENUMPROC func, LPARAM lParam )
|
||||||
{
|
{
|
||||||
TEB *teb = THREAD_IdToTEB(id);
|
HQUEUE16 queue = GetThreadQueue16( id );
|
||||||
|
if (!queue) return FALSE;
|
||||||
return (BOOL16)EnumTaskWindows16(teb->htask16, (WNDENUMPROC16)func, lParam);
|
return WIN_EnumQueueWindows( queue, func, lParam );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue