Treat 0xffff the same as 0 for the handle generation field to avoid
sign extension problems.
This commit is contained in:
parent
c0cb4d352b
commit
90af05f060
|
@ -307,13 +307,14 @@ WND *WIN_GetPtr( HWND hwnd )
|
||||||
USER_Lock();
|
USER_Lock();
|
||||||
if ((ptr = user_handles[index]))
|
if ((ptr = user_handles[index]))
|
||||||
{
|
{
|
||||||
if (ptr->dwMagic == WND_MAGIC && (!HIWORD(hwnd) || hwnd == ptr->hwndSelf))
|
if (ptr->dwMagic == WND_MAGIC &&
|
||||||
|
(hwnd == ptr->hwndSelf || !HIWORD(hwnd) || HIWORD(hwnd) == 0xffff))
|
||||||
return ptr;
|
return ptr;
|
||||||
ptr = NULL;
|
ptr = NULL;
|
||||||
}
|
}
|
||||||
else if (index == USER_HANDLE_TO_INDEX(hwndDesktop))
|
else if (index == USER_HANDLE_TO_INDEX(hwndDesktop))
|
||||||
{
|
{
|
||||||
if (!HIWORD(hwnd) || hwnd == GetDesktopWindow()) ptr = WND_DESKTOP;
|
if (hwnd == GetDesktopWindow() || !HIWORD(hwnd) || HIWORD(hwnd) == 0xffff) ptr = WND_DESKTOP;
|
||||||
else ptr = NULL;
|
else ptr = NULL;
|
||||||
}
|
}
|
||||||
else ptr = WND_OTHER_PROCESS;
|
else ptr = WND_OTHER_PROCESS;
|
||||||
|
|
|
@ -35,12 +35,14 @@ static int allocated_handles;
|
||||||
|
|
||||||
static struct user_handle *handle_to_entry( user_handle_t handle )
|
static struct user_handle *handle_to_entry( user_handle_t handle )
|
||||||
{
|
{
|
||||||
|
unsigned short generation;
|
||||||
int index = (((unsigned int)handle & 0xffff) - FIRST_USER_HANDLE) >> 1;
|
int index = (((unsigned int)handle & 0xffff) - FIRST_USER_HANDLE) >> 1;
|
||||||
if (index < 0 || index >= nb_handles) return NULL;
|
if (index < 0 || index >= nb_handles) return NULL;
|
||||||
if (!handles[index].type) return NULL;
|
if (!handles[index].type) return NULL;
|
||||||
if (((unsigned int)handle >> 16) && ((unsigned int)handle >> 16 != handles[index].generation))
|
generation = (unsigned int)handle >> 16;
|
||||||
return NULL;
|
if (generation == handles[index].generation || !generation || generation == 0xffff)
|
||||||
return &handles[index];
|
return &handles[index];
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static user_handle_t entry_to_handle( struct user_handle *ptr )
|
inline static user_handle_t entry_to_handle( struct user_handle *ptr )
|
||||||
|
|
Loading…
Reference in New Issue