Files
BeneficialCode-WinArk/KernelLibrary/IoTimer.cpp
T

52 lines
1.6 KiB
C++

#include "pch.h"
#include "IoTimer.h"
#include "Logging.h"
#include "typesdefs.h"
NTSTATUS IoTimer::Init(PDEVICE_OBJECT DeviceObject, PIO_TIMER_ROUTINE TimerRoutine,
PVOID Context) {
return IoInitializeTimer(DeviceObject, TimerRoutine, Context);
}
void IoTimer::Start(PDEVICE_OBJECT DeviceObject) {
IoStartTimer(DeviceObject);
}
void IoTimer::Stop(PDEVICE_OBJECT DeviceObject) {
IoStopTimer(DeviceObject);
}
void IoTimer::EnumIoTimer(IoTimerData* pData, IoTimerInfo* pInfo) {
PLIST_ENTRY pIopTimerQueueHead = *(PLIST_ENTRY*)pData->pIopTimerQueueHead;
LIST_ENTRY IopTimerQueueHead = *pIopTimerQueueHead;
PLIST_ENTRY timerEntry;
PIO_TIMER timer;
KIRQL irql;
PKSPIN_LOCK pIopTimerLock = (PKSPIN_LOCK)pData->pIopTimerLock;
KeAcquireSpinLock(pIopTimerLock, &irql);
ULONG count = *pData->pIopTimerCount;
int j = 0;
for (timerEntry = IopTimerQueueHead.Flink;
(timerEntry != &IopTimerQueueHead)&& count;
timerEntry = timerEntry->Flink) {
timer = CONTAINING_RECORD(timerEntry, IO_TIMER, TimerList);
if (timer->TimerFlag) {
LogInfo("Type: %d,TimerRoutine: 0x%p,DeviceObject: 0x%p,TimerFlag: 0x%d",
timer->Type,
timer->TimerRoutine,
timer->DeviceObject,
timer->TimerFlag);
pInfo[j].DeviceObject = timer->DeviceObject;
pInfo[j].TimerFlag = timer->TimerFlag;
pInfo[j].TimerRoutine = timer->TimerRoutine;
pInfo[j].Type = timer->Type;
j++;
count--;
}
}
KeReleaseSpinLock(pIopTimerLock, irql);
}