GetWindowThreadProcessId(HWND hWnd,
LPDWORD lpdwProcessId)
{
- return NtUserGetWindowThreadProcessId(hWnd, lpdwProcessId);
+ DWORD Ret = 0;
+ PW32THREADINFO ti;
+ PWINDOW pWnd = ValidateHwnd(hWnd);
+
+ if (!pWnd) return Ret;
+
+ ti = pWnd->ti;
+
+ if ( ti )
+ {
+ if ( ti == GetW32ThreadInfo() )
+ { // We are current.
+ if ( lpdwProcessId )
+ *lpdwProcessId = (DWORD)NtCurrentTeb()->Cid.UniqueProcess;
+ Ret = (DWORD)NtCurrentTeb()->Cid.UniqueThread;
+ }
+ else
+ { // Ask kernel for info.
+ if ( lpdwProcessId )
+ *lpdwProcessId = NtUserQueryWindow(hWnd, QUERY_WINDOW_UNIQUE_PROCESS_ID);
+ Ret = NtUserQueryWindow(hWnd, QUERY_WINDOW_UNIQUE_THREAD_ID);
+ }
+ }
+ return Ret;
}
LPCSTR lpString)
{
DWORD ProcessId;
- if(!NtUserGetWindowThreadProcessId(hWnd, &ProcessId))
+ if(!GetWindowThreadProcessId(hWnd, &ProcessId))
{
return FALSE;
}
LPCWSTR lpString)
{
DWORD ProcessId;
- if(!NtUserGetWindowThreadProcessId(hWnd, &ProcessId))
+ if(!GetWindowThreadProcessId(hWnd, &ProcessId))
{
return FALSE;
}
NTAPI
NtUserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi);
-DWORD
-NTAPI
-NtUserGetWindowThreadProcessId(HWND hWnd, LPDWORD UnsafePid);
-
-
/* (other FocusedItem values give the position of the focused item) */
#define NO_SELECTED_ITEM 0xffff
}
-/*
- * @implemented
- */
-DWORD STDCALL
-NtUserGetWindowThreadProcessId(HWND hWnd, LPDWORD UnsafePid)
-{
- PWINDOW_OBJECT Wnd;
- DWORD tid, pid;
- DECLARE_RETURN(DWORD);
-
- DPRINT("Enter NtUserGetWindowThreadProcessId\n");
- UserEnterShared();
-
- if (!(Wnd = UserGetWindowObject(hWnd)))
- {
- RETURN( 0);
- }
-
- tid = (DWORD)IntGetWndThreadId(Wnd);
- pid = (DWORD)IntGetWndProcessId(Wnd);
-
- if (UnsafePid)
- MmCopyToCaller(UnsafePid, &pid, sizeof(DWORD));
-
- RETURN( tid);
-
-CLEANUP:
- DPRINT("Leave NtUserGetWindowThreadProcessId, ret=%i\n",_ret_);
- UserLeave();
- END_CLEANUP;
-}
-
-
/*
* @unimplemented
*/