- Implement FlashWindowEx without the state verification test via global atom and window properties list. Pass all but two in win:test_FlashWindowEx.
- Add missing atom's and global thread information pointer, based on patch from bug 5655.

svn path=/trunk/; revision=53385
This commit is contained in:
James Tabor 2011-08-22 19:58:32 +00:00
parent b47bf7e4d5
commit 40fee2398a
3 changed files with 41 additions and 3 deletions

View file

@ -10,6 +10,7 @@
#define UserLeaveCo UserLeave
extern PSERVERINFO gpsi;
extern PTHREADINFO gptiCurrent;
INIT_FUNCTION NTSTATUS NTAPI InitUserImpl(VOID);
VOID FASTCALL CleanupUserImpl(VOID);

View file

@ -1157,14 +1157,45 @@ NtUserFillWindow(HWND hWndPaint,
}
/*
* @unimplemented
* @implemented
*/
BOOL APIENTRY
NtUserFlashWindowEx(IN PFLASHWINFO pfwi)
{
STUB
PWND pWnd;
FLASHWINFO finfo = {0};
BOOL Ret = TRUE;
return 1;
UserEnterExclusive();
_SEH2_TRY
{
ProbeForRead(pfwi, sizeof(FLASHWINFO), sizeof(ULONG));
RtlCopyMemory(&finfo, pfwi, sizeof(FLASHWINFO));
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
SetLastNtError(_SEH2_GetExceptionCode());
Ret = FALSE;
}
_SEH2_END
if (!Ret) goto Exit;
if (!(pWnd = (PWND)UserGetObject(gHandleTable, finfo.hwnd, otWindow)) ||
finfo.cbSize != sizeof(FLASHWINFO) ||
finfo.dwFlags & ~(FLASHW_ALL|FLASHW_TIMER|FLASHW_TIMERNOFG) )
{
EngSetLastError(ERROR_INVALID_PARAMETER);
Ret = FALSE;
goto Exit;
}
//Ret = IntFlashWindowEx(pWnd, &finfo);
Exit:
UserLeave();
return Ret;
}
/*

View file

@ -17,9 +17,12 @@ BOOL InitSysParams();
/* GLOBALS *******************************************************************/
PTHREADINFO gptiCurrent = NULL;
ERESOURCE UserLock;
ATOM AtomMessage; // Window Message atom.
ATOM AtomWndObj; // Window Object atom.
ATOM AtomLayer; // Window Layer atom.
ATOM AtomFlashWndState; // Window Flash State atom.
BOOL gbInitialized;
HINSTANCE hModClient = NULL;
BOOL ClientPfnInit = FALSE;
@ -46,6 +49,8 @@ InitUserAtoms(VOID)
gpsi->atomContextHelpIdProp = IntAddGlobalAtom(L"SysCH", TRUE);
AtomWndObj = IntAddGlobalAtom(L"SysWNDO", TRUE);
AtomLayer = IntAddGlobalAtom(L"SysLayer", TRUE);
AtomFlashWndState = IntAddGlobalAtom(L"FlashWState", TRUE);
return STATUS_SUCCESS;
}
@ -222,6 +227,7 @@ VOID FASTCALL UserEnterExclusive(VOID)
ASSERT_NOGDILOCKS();
KeEnterCriticalRegion();
ExAcquireResourceExclusiveLite(&UserLock, TRUE);
gptiCurrent = PsGetCurrentThreadWin32Thread();
}
VOID FASTCALL UserLeave(VOID)