Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

103 lines
1.8 KiB

/*++
File: ws1.c
Idle detection dll for USER32.dll
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include "ws1.h"
NTSTATUS InitIdle (IN PVOID DllHandle,ULONG Reason,IN PCONTEXT Context OPTIONAL);
LRESULT CALLBACK WhenIdle (int code, WPARAM wParam, LPARAM lParam);
HANDLE hEvent;
HHOOK hIdleHook = NULL;
NTSTATUS
InitIdle (
IN PVOID DllHandle,
ULONG Reason,
IN PCONTEXT Context OPTIONAL
)
{
HANDLE hIdleModule;
HOOKPROC pfnIdleModuleIdleProc;
DllHandle, Context; // avoid compiler warnings
if (Reason == DLL_PROCESS_ATTACH) {
hEvent = CreateEvent (NULL, FALSE, FALSE, "IdleDetectEvent");
hIdleModule = GetModuleHandle("ws1");
pfnIdleModuleIdleProc = (HOOKPROC)GetProcAddress(hIdleModule, "WhenIdle");
hIdleHook = SetWindowsHookEx(WH_FOREGROUNDIDLE,
pfnIdleModuleIdleProc,
hIdleModule,
0);
}
else if (Reason == DLL_PROCESS_DETACH) {
UnhookWindowsHookEx (hIdleHook);
CloseHandle (hEvent);
}
return TRUE;
} /* InitIdle () */
LRESULT CALLBACK WhenIdle (int code, WPARAM wParam, LPARAM lParam)
{
SetEvent(hEvent);
return 0;
} /* WhenIdle () */
BOOL WAITUNTILIDLE (DWORD dwTimeOut)
{
ResetEvent (hEvent);
PostMessage(GetForegroundWindow(), WM_NULL, 0, 0);
if (WaitForSingleObject (hEvent, dwTimeOut)) {
return FALSE;
}
return TRUE;
} /* WaitForIdle () */
BOOL WaitUntilIdle (DWORD dwTimeOut)
{
ResetEvent (hEvent);
PostMessage(GetForegroundWindow(), WM_NULL, 0, 0);
if (WaitForSingleObject (hEvent, dwTimeOut)) {
return FALSE;
}
return TRUE;
} /* WaitForIdle () */
void SETNOTIDLE (void)
{
return;
} /* SetNotIdle () */
void SetNotIdle (void)
{
return;
} /* SetNotIdle () */