}
/*
- * @unimplemented
+ * @implemented
*/
BOOL APIENTRY
NtUserFlashWindowEx(IN PFLASHWINFO pfwi)
{
- STUB
+ PWND pWnd;
+ FLASHWINFO finfo = {0};
+ BOOL Ret = TRUE;
+
+ 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);
- return 1;
+Exit:
+ UserLeave();
+ return Ret;
}
/*
/* 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;
gpsi->atomContextHelpIdProp = IntAddGlobalAtom(L"SysCH", TRUE);
AtomWndObj = IntAddGlobalAtom(L"SysWNDO", TRUE);
+ AtomLayer = IntAddGlobalAtom(L"SysLayer", TRUE);
+ AtomFlashWndState = IntAddGlobalAtom(L"FlashWState", TRUE);
return STATUS_SUCCESS;
}
ASSERT_NOGDILOCKS();
KeEnterCriticalRegion();
ExAcquireResourceExclusiveLite(&UserLock, TRUE);
+ gptiCurrent = PsGetCurrentThreadWin32Thread();
}
VOID FASTCALL UserLeave(VOID)