mirror of
https://github.com/rapid7/metasploit-payloads
synced 2025-04-30 13:07:22 +02:00
61 lines
1.3 KiB
C
61 lines
1.3 KiB
C
#include "precomp.h"
|
|
|
|
/*
|
|
#ifdef _WIN64
|
|
// sf: for the x64 build we dont need to redifine this
|
|
#else
|
|
typedef struct tagLASTINPUTINFO {
|
|
UINT cbSize;
|
|
DWORD dwTime;
|
|
} LASTINPUTINFO, *PLASTINPUTINFO;
|
|
#endif
|
|
*/
|
|
|
|
/*
|
|
* Returns the number of seconds the local user has been idle
|
|
*/
|
|
DWORD request_ui_get_idle_time(Remote *remote, Packet *request)
|
|
{
|
|
LASTINPUTINFO info;
|
|
HMODULE user32 = NULL;
|
|
Packet *response = packet_create_response(request);
|
|
DWORD result = ERROR_SUCCESS;
|
|
BOOL (WINAPI *getLastInputInfo)(PLASTINPUTINFO) = NULL;
|
|
|
|
do
|
|
{
|
|
// Load user32
|
|
if (!(user32 = LoadLibrary("user32")))
|
|
{
|
|
result = GetLastError();
|
|
break;
|
|
}
|
|
|
|
// Resolve the address of GetLastInputInfo (Windows 2000+)
|
|
if (!(getLastInputInfo = (BOOL (WINAPI *)(PLASTINPUTINFO))GetProcAddress(
|
|
user32, "GetLastInputInfo")))
|
|
{
|
|
result = GetLastError();
|
|
break;
|
|
}
|
|
|
|
info.cbSize = sizeof(info);
|
|
|
|
if (getLastInputInfo(&info))
|
|
packet_add_tlv_uint(response, TLV_TYPE_IDLE_TIME,
|
|
(GetTickCount() - info.dwTime) / 1000);
|
|
else
|
|
result = GetLastError();
|
|
|
|
} while (0);
|
|
|
|
// Unload the library
|
|
if (user32)
|
|
FreeLibrary(user32);
|
|
|
|
// Transmit the response packet
|
|
packet_transmit_response(result, remote, response);
|
|
|
|
return ERROR_SUCCESS;
|
|
}
|