免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

LDR_DATA_TABLE_ENTRY 结构使用,枚举驱动

  1. #include "ntddk.h"

  2. #define PAGEDCODE code_seg("PAGE")
  3. #define LOCKEDCODE code_seg()
  4. #define INITCODE code_seg("INIT")

  5. #define PAGEDDATA data_seg("PAGE")
  6. #define LOCKEDDATA data_seg()
  7. #define INITDATA data_seg("INIT")


  8. typedef struct _LDR_DATA_TABLE_ENTRY {
  9.         LIST_ENTRY InLoadOrderLinks;
  10.         LIST_ENTRY InMemoryOrderLinks;
  11.         LIST_ENTRY InInitializationOrderLinks;
  12.         PVOID DllBase;
  13.         PVOID EntryPoint;
  14.         ULONG SizeOfImage;
  15.         UNICODE_STRING FullDllName;
  16.         UNICODE_STRING BaseDllName;
  17.         ULONG Flags;
  18.         USHORT LoadCount;
  19.         USHORT TlsIndex;
  20.         union {
  21.                 LIST_ENTRY HashLinks;
  22.                 struct {
  23.                         PVOID SectionPointer;
  24.                         ULONG CheckSum;
  25.                 };
  26.         };
  27.         union {
  28.                 struct {
  29.                         ULONG TimeDateStamp;
  30.                 };
  31.                 struct {
  32.                         PVOID LoadedImports;
  33.                 };
  34.         };
  35. } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;


  36. #pragma PAGEDCODE
  37. VOID EnumDriver(PDRIVER_OBJECT pDriverObject)
  38. {
  39.         PLDR_DATA_TABLE_ENTRY pDataTableEntry, pTempDataTableEntry;
  40.         PLIST_ENTRY pList;

  41.         pDataTableEntry = (PLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;

  42.         if (!pDataTableEntry)
  43.         {
  44.                 return;
  45.         }

  46.         pList = pDataTableEntry->InLoadOrderLinks.Flink;

  47.         while(pList != &pDataTableEntry->InLoadOrderLinks)
  48.         {
  49.                 pTempDataTableEntry = (PLDR_DATA_TABLE_ENTRY)pList;

  50.                 KdPrint(("\n%wZ\n", &pTempDataTableEntry->BaseDllName));

  51.                 pList = pList->Flink;
  52.         }
  53. }

  54. #pragma PAGEDCODE
  55. VOID MyDriverUnload(IN PDRIVER_OBJECT pDriverObject)
  56. {

  57.         KdPrint(("DriverEntry unLoading...\n"));

  58. }



  59. #pragma INITCODE
  60. NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegistryPath)
  61. {
  62.   NTSTATUS status = STATUS_SUCCESS;

  63.   EnumDriver(pDriverObject);

  64.   pDriverObject->DriverUnload = MyDriverUnload;
  65.   return status;
  66. }
复制代码

返回列表