mirror of
https://github.com/BeneficialCode/WinArk
synced 2026-08-09 12:00:31 +00:00
52 lines
1.6 KiB
C++
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);
|
|
} |