14#if (NTDDI_VERSION < NTDDI_VISTA)
15#define LAST_RIT_EVENT_UPDATE_INTERVAL 60000UL
17#define LAST_RIT_EVENT_UPDATE_INTERVAL 1000UL
56 if (
gpsi->dwLastRITEventTickCount -
gpsi->dwLastSystemRITEventTickCountUpdate >
91 ERR(
"Screensaver is Idle\n");
97 if (ForegroundQueue && ForegroundQueue->
spwndActive)
123 ERR(
"Failed to allocate memory for INPUT_DEVICE_INFO\n");
174 if (
DeviceInfo->DeviceType == RIM_TYPEKEYBOARD)
187 ERR(
"ZwDeviceIoControlFile('%wZ', IOCTL_KEYBOARD_QUERY_ATTRIBUTES) failed with status 0x%08x\n", &
DeviceInfo->DeviceName,
Status);
190 else if (
DeviceInfo->DeviceType == RIM_TYPEMOUSE)
203 ERR(
"ZwDeviceIoControlFile('%wZ', IOCTL_MOUSE_QUERY_ATTRIBUTES) failed with status 0x%08x\n", &
DeviceInfo->DeviceName,
Status);
234 if (
DeviceInfo->DeviceType == RIM_TYPEKEYBOARD)
239 else if (
DeviceInfo->DeviceType == RIM_TYPEMOUSE)
270 if (
DeviceInfo->DeviceType == RIM_TYPEKEYBOARD)
272 TRACE(
"KeyboardEvent: %s %04x\n",
284 else if (
DeviceInfo->DeviceType == RIM_TYPEMOUSE)
286 TRACE(
"MouseEvent\n");
308 DWORD NumberOfMice = 0;
309 DWORD MaxNumberOfButtons = 0;
311#if (_WIN32_WINNT >= 0x0600)
314 DWORD MaxFunctionKeys = 0;
324 if (
DeviceInfo->DeviceType == RIM_TYPEKEYBOARD)
326 TRACE(
"Keyboard connected!\n");
344 else if (
DeviceInfo->DeviceType == RIM_TYPEMOUSE)
346 TRACE(
"Mouse connected!\n");
352 if (
DeviceInfo->DeviceType == RIM_TYPEKEYBOARD)
354 if (
DeviceInfo->Keyboard.Attributes.KeyboardIdentifier.Type == 4 ||
355 DeviceInfo->Keyboard.Attributes.KeyboardIdentifier.Type == 7 ||
356 DeviceInfo->Keyboard.Attributes.KeyboardIdentifier.Type == 8 )
358 DWORD FunctionKeys =
DeviceInfo->Keyboard.Attributes.NumberOfFunctionKeys;
361 if (FunctionKeys > MaxFunctionKeys)
362 MaxFunctionKeys = FunctionKeys;
365 else if (
DeviceInfo->DeviceType == RIM_TYPEMOUSE)
367 DWORD MouseIdentifier =
DeviceInfo->Mouse.Attributes.MouseIdentifier & ~HORIZONTAL_WHEEL_PRESENT;
371 if (NumberOfButtons > MaxNumberOfButtons)
372 MaxNumberOfButtons = NumberOfButtons;
376#if (_WIN32_WINNT >= 0x0600)
387#if (_WIN32_WINNT >= 0x0600)
388 gpsi->aiSysMet[SM_MOUSEHORIZONTALWHEELPRESENT] = HasHorizontalMouseWheel ? 1 : 0;
391 TRACE(
"Mouse present %u, buttons %u, wheel %u\n",
397 TRACE(
"Keyboard type %u, subtype %u and number of func keys %u\n",
414 PVOID WaitObjects[3], pSignaledObject =
NULL;
526 ERR(
"Raw Input Thread Exit!\n");
542 ERR(
"Failed to allocate memory\n");
578 OldBlock = pti->
rpdesk->BlockInputThread;
586 pti->
rpdesk->BlockInputThread = (BlockIt ? pti :
NULL);
587 return OldBlock ==
NULL;
590 pti->
rpdesk->BlockInputThread = (BlockIt ? pti :
NULL);
591 return OldBlock ==
NULL;
601 TRACE(
"Enter NtUserBlockInput\n");
607 TRACE(
"Leave NtUserBlockInput, ret=%i\n",
ret);
629 if (pai->
pti2 == pti)
635 if (pai->
pti1 == pti)
645 if (!pai && !ptiFrom && !ptiTo)
break;
686 ERR(
"Attach Allocated! ptiFrom 0x%p ptiTo 0x%p paiCount %d\n",ptiFrom,ptiTo,
paiCount);
695 ERR(
"ptiFrom is Foreground\n");
709 ERR(
"ptiFrom NOT Foreground\n");
737 ERR(
"ptiTo receiving ptiFrom Cursor\n");
748 ERR(
"Attach Threads are already associated!\n");
760 while (*ppai !=
NULL)
762 if ( (*ppai)->pti2 == ptiTo && (*ppai)->pti1 == ptiFrom )
772 ppai = &((*ppai)->paiNext);
777 ERR(
"Attach Free! ptiFrom 0x%p ptiTo 0x%p paiCount %d\n",ptiFrom,ptiTo,
paiCount);
786 ERR(
"ptiTo is now pti FG.\n");
800 if (spwndActive->
head.pti == ptiFrom)
808 if (spwndFocus->
head.pti == ptiFrom)
818 ERR(
"Detaching Threads are not associated!\n");
851 TRACE(
"Enter NtUserAttachThreadInput %s\n",(fAttach ?
"TRUE" :
"FALSE" ));
856 if ( !pti || !ptiTo )
858 TRACE(
"AttachThreadInput pti or ptiTo NULL.\n");
866 TRACE(
"AttachThreadInput Error Status 0x%x. \n",
Status);
872 TRACE(
"Leave NtUserAttachThreadInput, ret=%d\n",Ret);
892 TRACE(
"Enter NtUserSendInput\n");
903 if (!nInputs || !pInput ||
cbSize !=
sizeof(
INPUT))
932 switch (SafeInput.
type)
943 FIXME(
"INPUT_HARDWARE not supported!\n");
946 ERR(
"SendInput(): Invalid input type: 0x%x\n", SafeInput.
type);
952 TRACE(
"Leave NtUserSendInput, ret=%u\n", uRet);
#define UlongToHandle(ul)
#define DBG_DEFAULT_CHANNEL(ch)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
static HANDLE ShutdownEvent
#define IntIsActiveDesktop(Desktop)
PTHREADINFO gptiForeground
_In_ PIO_STATUS_BLOCK IoStatusBlock
#define NT_SUCCESS(StatCode)
#define RTL_CONSTANT_STRING(s)
#define ERROR_INVALID_PARAMETER
#define ERROR_ACCESS_DENIED
static void cleanup(void)
#define EngGetTickCount32()
#define ExAllocatePoolWithTag(hernya, size, tag)
#define PsGetCurrentThread()
NTSTATUS ExInitializeResourceLite(PULONG res)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeSetEvent(pEvt, foo, foo2)
#define ExDeleteResourceLite(res)
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
PUSER_MESSAGE_QUEUE gpqForeground
_Must_inspect_result_ _In_ WAIT_TYPE _In_opt_ PLARGE_INTEGER _In_opt_ PKWAIT_BLOCK WaitBlockArray
#define TIF_DONTATTACHQUEUE
#define UserHMGetHandle(obj)
struct _THREADINFO * GetW32ThreadInfo(VOID)
#define LOW_REALTIME_PRIORITY
#define ExFreePoolWithTag(_P, _T)
#define InitializeObjectAttributes(p, n, a, r, s)
VOID FASTCALL co_MsqInsertMouseMessage(MSG *Msg, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Hook)
VOID FASTCALL MsqDestroyMessageQueue(_In_ PTHREADINFO pti)
PUSER_MESSAGE_QUEUE FASTCALL MsqCreateMessageQueue(PTHREADINFO pti)
#define IntReferenceMessageQueue(MsgQueue)
#define IntDereferenceMessageQueue(MsgQueue)
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID ApcContext
NTSYSAPI NTSTATUS NTAPI ZwCancelIoFile(_In_ HANDLE FileHandle, _Out_ PIO_STATUS_BLOCK IoStatusBlock)
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
#define IOCTL_KEYBOARD_QUERY_ATTRIBUTES
#define WHEELMOUSE_I8042_HARDWARE
#define WHEELMOUSE_SERIAL_HARDWARE
#define IOCTL_MOUSE_QUERY_ATTRIBUTES
#define HORIZONTAL_WHEEL_PRESENT
#define WHEELMOUSE_HID_HARDWARE
NTSYSAPI NTSTATUS NTAPI ZwDeviceIoControlFile(IN HANDLE DeviceHandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL, IN PVOID UserApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG IoControlCode, IN PVOID InputBuffer, IN ULONG InputBufferSize, OUT PVOID OutputBuffer, IN ULONG OutputBufferSize)
NTSTATUS NTAPI KeWaitForMultipleObjects(IN ULONG Count, IN PVOID Object[], IN WAIT_TYPE WaitType, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL, OUT PKWAIT_BLOCK WaitBlockArray OPTIONAL)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
PWINSTATION_OBJECT InputWindowStation
BOOL FASTCALL UserSetProcessWindowStation(HWINSTA hWindowStation)
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
NTSTATUS NTAPI ObOpenObjectByPointer(IN PVOID Object, IN ULONG HandleAttributes, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PHANDLE Handle)
NTSTATUS NTAPI PoRequestShutdownEvent(OUT PVOID *Event)
#define OBJ_KERNEL_HANDLE
#define SM_MOUSEWHEELPRESENT
WCHAR Data[ANYSIZE_ARRAY]
struct _ATTACHINFO * paiNext
KEYBOARD_ID KeyboardIdentifier
USHORT NumberOfFunctionKeys
struct _CLIENTINFO * pClientInfo
struct _USER_MESSAGE_QUEUE * MessageQueue
KPRIORITY NTAPI KeSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define LN_START_SCREENSAVE
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
#define W32PF_IDLESCREENSAVER
POBJECT_TYPE ExWindowStationObjectType
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
VOID FASTCALL IntSetFocusMessageQueue(PUSER_MESSAGE_QUEUE NewQueue)
PUSER_MESSAGE_QUEUE FASTCALL IntGetFocusMessageQueue(VOID)
BOOL FASTCALL UserRegisterHotKey(PWND pWnd, int id, UINT fsModifiers, UINT vk)
VOID FASTCALL SetDebugHotKeys(VOID)
PPROCESSINFO ppiScrnSaver
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
PTHREADINFO FASTCALL IntTID2PTI(HANDLE id)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
BOOL FASTCALL UserObjectInDestroy(HANDLE h)
VOID FASTCALL UserReferenceObject(PVOID obj)
VOID FASTCALL ProcessTimers(VOID)
VOID FASTCALL StartTheTimers(VOID)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
_Reserved_ PVOID Reserved
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)