From 2acec63b2ed75bf4b71ad257db573c4b8f9639e7 Mon Sep 17 00:00:00 2001 From: tumagonx Date: Tue, 8 Aug 2017 10:54:53 +0700 Subject: initial commit --- timer.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 timer.c (limited to 'timer.c') diff --git a/timer.c b/timer.c new file mode 100644 index 0000000..3210000 --- /dev/null +++ b/timer.c @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2004 Security Architects Corporation. All rights reserved. + * + * Module Name: + * + * timer.c + * + * Abstract: + * + * This module implements various timer hooking routines. + * + * Author: + * + * Eugene Tsyrklevich 25-Mar-2004 + * + * Revision History: + * + * None. + */ + + +#include "timer.h" + + +#ifdef ALLOC_PRAGMA +#pragma alloc_text (INIT, InitTimerHooks) +#endif + + +fpZwCreateTimer OriginalNtCreateTimer = NULL; +fpZwOpenTimer OriginalNtOpenTimer = NULL; + + +/* + * HookedNtCreateTimer() + * + * Description: + * This function mediates the NtCreateTimer() system service and checks the + * provided timer name against the global and current process security policies. + * + * NOTE: ZwCreateTimer creates or opens a timer object. [NAR] + * + * Parameters: + * Those of NtCreateTimer(). + * + * Returns: + * STATUS_ACCESS_DENIED if the call does not pass the security policy check. + * Otherwise, NTSTATUS returned by NtCreateTimer(). + */ + +NTSTATUS +NTAPI +HookedNtCreateTimer +( + OUT PHANDLE TimerHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN TIMER_TYPE TimerType +) +{ + PCHAR FunctionName = "HookedNtCreateTimer"; + + + HOOK_ROUTINE_START(TIMER); + + + ASSERT(OriginalNtCreateTimer); + + rc = OriginalNtCreateTimer(TimerHandle, DesiredAccess, ObjectAttributes, TimerType); + + + HOOK_ROUTINE_FINISH(TIMER); +} + + + +/* + * HookedNtOpenTimer() + * + * Description: + * This function mediates the NtOpenTimer() system service and checks the + * provided timer name against the global and current process security policies. + * + * NOTE: ZwOpenTimer opens a timer object. [NAR] + * + * Parameters: + * Those of NtOpenTimer(). + * + * Returns: + * STATUS_ACCESS_DENIED if the call does not pass the security policy check. + * Otherwise, NTSTATUS returned by NtOpenTimer(). + */ + +NTSTATUS +NTAPI +HookedNtOpenTimer +( + OUT PHANDLE TimerHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes +) +{ + PCHAR FunctionName = "HookedNtOpenTimer"; + + + HOOK_ROUTINE_START(TIMER); + + + ASSERT(OriginalNtOpenTimer); + + rc = OriginalNtOpenTimer(TimerHandle, DesiredAccess, ObjectAttributes); + + + HOOK_ROUTINE_FINISH(TIMER); +} + + + +/* + * InitTimerHooks() + * + * Description: + * Initializes all the mediated timer operation pointers. The "OriginalFunction" pointers + * are initialized by InstallSyscallsHooks() that must be called prior to this function. + * + * NOTE: Called once during driver initialization (DriverEntry()). + * + * Parameters: + * None. + * + * Returns: + * TRUE to indicate success, FALSE if failed. + */ + +BOOLEAN +InitTimerHooks() +{ + if ( (OriginalNtCreateTimer = (fpZwCreateTimer) ZwCalls[ZW_CREATE_TIMER_INDEX].OriginalFunction) == NULL) + { + LOG(LOG_SS_TIMER, LOG_PRIORITY_DEBUG, ("InitTimerHooks: OriginalNtCreateTimer is NULL\n")); + return FALSE; + } + + if ( (OriginalNtOpenTimer = (fpZwOpenTimer) ZwCalls[ZW_OPEN_TIMER_INDEX].OriginalFunction) == NULL) + { + LOG(LOG_SS_TIMER, LOG_PRIORITY_DEBUG, ("InitTimerHooks: OriginalNtOpenTimer is NULL\n")); + return FALSE; + } + + return TRUE; +} -- cgit v1.3