- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2024-3-7
 
- 在线时间
 - 2 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 40 
 
 
 
 
 | 
 
 
测试没有问题,可以正常遍历哦。 
 
 
- #include<ntddk.h>
 
 - typedef struct _KTIMER_TABLE_ENTRY
 
 - {
 
 -         ULONG Lock;
 
 -         LIST_ENTRY Entry;
 
 -         ULARGE_INTEGER Time;
 
 - } KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;
 
 - PKTIMER_TABLE_ENTRY timeTable;
 
  
- PKTIMER pkTimer;
 
 - PLIST_ENTRY plist;
 
  
- VOID EnumDpcTimer()
 
 - {
 
 -         ULONG kPrcb=0;
 
 -         ULONG index = 0;
 
  
-         __asm push eax;
 
 -         __asm mov eax,fs:[0x20];
 
 -         __asm add eax,0x19A0
 
 -         __asm mov kPrcb,eax;
 
 -         __asm pop eax;
 
 -         //timeTable = (PKTIMER_TABLE_ENTRY)(kPrcb+0x19A0);
 
 -         timeTable = (PKTIMER_TABLE_ENTRY)(kPrcb);
 
 -         for (index; index < 0x100; index++)
 
 -         {
 
 -                 plist=timeTable[index].Entry.Flink;
 
 -                 if (!MmIsAddressValid(plist))
 
 -                 {
 
 -                         continue;
 
 -                 }
 
 -                 while (plist!=&timeTable[index].Entry)
 
 -                 {
 
 -                         //pkTimer=(PKTIMER)((ULONG)plist-0x18);
 
 -                         pkTimer=(PKTIMER)CONTAINING_RECORD(plist,KTIMER,TimerListEntry);
 
  
-                         if (MmIsAddressValid(pkTimer)&&MmIsAddressValid(pkTimer->Dpc))
 
 -                         {
 
 -                                 if (pkTimer->Period&0xF0000000)
 
 -                                 {
 
 -                                         break;
 
 -                                 }
 
 -                                 KdPrint(("0x%08x  ,0x%08x  , %d\n",pkTimer,pkTimer->Dpc->DeferredRoutine,pkTimer->Period));
 
 -                         }else
 
 -                         {
 
 -                                 break;
 
 -                         }
 
  
-                         plist=plist->Flink;
 
 -                 }
 
 -         }
 
 - }
 
  
- VOID DdkUnload(IN PDRIVER_OBJECT objDriver)
 
 - {
 
 -         // 2. 删除设备对象
 
 -         if ( objDriver->DeviceObject )
 
 -                 IoDeleteDevice(objDriver->DeviceObject);
 
 - }
 
  
- NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath)
 
 - {
 
 -         UNREFERENCED_PARAMETER(RegistryPath);
 
  
-         EnumDpcTimer();
 
 -         // 5. 设置卸载函数
 
 -         DriverObject->DriverUnload = DdkUnload;
 
 -         return STATUS_SUCCESS;
 
 - }
 
 
  复制代码 
 |   
 
 
 
 |