龙马谷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

龙马谷VIP会员办理客服QQ:82926983(如果临时会话没有收到回复,请先加QQ好友再发。)
1 [已完结] GG修改器新手入门与实战教程 31课 2 [已完结] GG修改器美化修改教程 6课 3 [已完结] GG修改器Lua脚本新手入门教程 12课
4 [已完结] 触动精灵脚本新手入门必学教程 22课 5 [已完结] 手游自动化脚本入门实战教程 9课 6 [已完结] C++射击游戏方框骨骼透视与自瞄教程 27课
7 [已完结] C++零基础UE4逆向开发FPS透视自瞄教程 29课 8 [已完结] C++零基础大漠模拟器手游自动化辅助教程 22课 9 [已完结] C++零基础开发DXF内存脚本辅助教程 32课
以下是天马阁VIP教程,本站与天马阁合作,赞助VIP可以获得天马阁对应VIP会员,名额有限! 点击进入天马阁论坛
1 [已完结] x64CE与x64dbg入门基础教程 7课 2 [已完结] x64汇编语言基础教程 16课 3 [已完结] x64辅助入门基础教程 9课
4 [已完结] C++x64内存辅助实战技术教程 149课 5 [已完结] C++x64内存检测与过检测技术教程 10课 6 [已完结] C+x64二叉树分析遍历与LUA自动登陆教程 19课
7 [已完结] C++BT功能原理与x64实战教程 29课 8 [已完结] C+FPS框透视与自瞄x64实现原理及防护思路
查看: 5249|回复: 0

查看系统进程信息API ZwQuerySystemInformation

[复制链接]

15

主题

3

回帖

22

积分

编程入门

Rank: 1

龙马币
40

ZwQuerySystemInformation 查看系统进程信息


  1. #include <ntddk.h>

  2. typedef enum _SYSTEM_INFORMATION_CLASS {
  3.         SystemBasicInformation,
  4.         SystemProcessorInformation,
  5.         SystemPerformanceInformation,
  6.         SystemTimeOfDayInformation,
  7.         SystemPathInformation,
  8.         SystemProcessInformation, //5
  9.         SystemCallCountInformation,
  10.         SystemDeviceInformation,
  11.         SystemProcessorPerformanceInformation,
  12.         SystemFlagsInformation,
  13.         SystemCallTimeInformation,
  14.         SystemModuleInformation,
  15.         SystemLocksInformation,
  16.         SystemStackTraceInformation,
  17.         SystemPagedPoolInformation,
  18.         SystemNonPagedPoolInformation,
  19.         SystemHandleInformation,
  20.         SystemObjectInformation,
  21.         SystemPageFileInformation,
  22.         SystemVdmInstemulInformation,
  23.         SystemVdmBopInformation,
  24.         SystemFileCacheInformation,
  25.         SystemPoolTagInformation,
  26.         SystemInterruptInformation,
  27.         SystemDpcBehaviorInformation,
  28.         SystemFullMemoryInformation,
  29.         SystemLoadGdiDriverInformation,
  30.         SystemUnloadGdiDriverInformation,
  31.         SystemTimeAdjustmentInformation,
  32.         SystemSummaryMemoryInformation,
  33.         SystemNextEventIdInformation,
  34.         SystemEventIdsInformation,
  35.         SystemCrashDumpInformation,
  36.         SystemExceptionInformation,
  37.         SystemCrashDumpStateInformation,
  38.         SystemKernelDebuggerInformation,
  39.         SystemContextSwitchInformation,
  40.         SystemRegistryQuotaInformation,
  41.         SystemExtendServiceTableInformation,
  42.         SystemPrioritySeperation,
  43.         SystemPlugPlayBusInformation,
  44.         SystemDockInformation,
  45.         SystemPowerInformation2,
  46.         SystemProcessorSpeedInformation,
  47.         SystemCurrentTimeZoneInformation,
  48.         SystemLookasideInformation
  49. } SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;

  50. typedef struct _SYSTEM_THREAD_INFORMATION {
  51.         LARGE_INTEGER           KernelTime;
  52.         LARGE_INTEGER           UserTime;
  53.         LARGE_INTEGER           CreateTime;
  54.         ULONG                   WaitTime;
  55.         PVOID                   StartAddress;
  56.         CLIENT_ID               ClientId;
  57.         KPRIORITY               Priority;
  58.         LONG                    BasePriority;
  59.         ULONG                   ContextSwitchCount;
  60.         ULONG                   State;
  61.         KWAIT_REASON            WaitReason;
  62. }SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;

  63. typedef struct _SYSTEM_PROCESS_INFORMATION {
  64.         ULONG                   NextEntryOffset;
  65.         ULONG                   NumberOfThreads;
  66.         LARGE_INTEGER           Reserved[3];
  67.         LARGE_INTEGER           CreateTime;
  68.         LARGE_INTEGER           UserTime;
  69.         LARGE_INTEGER           KernelTime;
  70.         UNICODE_STRING          ImageName;
  71.         KPRIORITY               BasePriority;
  72.         HANDLE                  ProcessId;
  73.         HANDLE                  InheritedFromProcessId;
  74.         ULONG                   HandleCount;
  75.         ULONG                   Reserved2[2];
  76.         ULONG                   PrivatePageCount;
  77.         VM_COUNTERS             VirtualMemoryCounters;
  78.         IO_COUNTERS             IoCounters;
  79.         SYSTEM_THREAD_INFORMATION           Threads[0];
  80. } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;

  81. //不加extern "C" 一直报link错误
  82. extern "C"  NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation(
  83.         IN ULONG SystemInformationClass,
  84.         IN PVOID SystemInformation,
  85.         IN ULONG SystemInformationLength,
  86.         OUT PULONG ReturnLength);

  87. VOID Unload( __in  struct _DRIVER_OBJECT *DriverObject )
  88. {
  89.         KdPrint(("unload ....."));
  90. }

  91. NTSTATUS Ring0EnumProcess()
  92. {
  93.         ULONG        cbBuffer = 0x8000; //32k
  94.         PVOID        pSystemInfo;
  95.         NTSTATUS status;
  96.         PSYSTEM_PROCESS_INFORMATION pInfo;

  97.         //为查找进程分配足够的空间
  98.         do
  99.         {
  100.                 pSystemInfo = ExAllocatePool(NonPagedPool, cbBuffer);
  101.                 if (pSystemInfo == NULL)        //申请空间失败,返回
  102.                 {
  103.                         return 1;
  104.                 }
  105.                 status = ZwQuerySystemInformation(SystemProcessInformation, pSystemInfo, cbBuffer, NULL );
  106.                 if (status == STATUS_INFO_LENGTH_MISMATCH) //空间不足
  107.                 {
  108.                         ExFreePool(pSystemInfo);
  109.                         cbBuffer *= 2;
  110.                 }
  111.                 else if(!NT_SUCCESS(status))
  112.                 {
  113.                         ExFreePool(pSystemInfo);
  114.                         return 1;
  115.                 }

  116.         } while(status == STATUS_INFO_LENGTH_MISMATCH); //如果是空间不足,就一直循环

  117.         pInfo = (PSYSTEM_PROCESS_INFORMATION)pSystemInfo; //把得到的信息放到pInfo中

  118.         for (;;)
  119.         {
  120.                 LPWSTR pszProcessName = pInfo->ImageName.Buffer;
  121.                 if (pszProcessName == NULL)
  122.                 {
  123.                         pszProcessName = L"NULL";
  124.                 }
  125.                 KdPrint(("PID:%d, process name:%S\n", pInfo->ProcessId, pszProcessName));
  126.                 if (pInfo->NextEntryOffset == 0)        //==0,说明到达进程链的尾部了
  127.                 {
  128.                         break;
  129.                 }
  130.                 pInfo = (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pInfo) + pInfo->NextEntryOffset); //遍历

  131.         }
  132.         return STATUS_SUCCESS;
  133. }

  134. NTSTATUS DriverEntry( __in  PDRIVER_OBJECT DriverObject, __in  PUNICODE_STRING RegistryPath)
  135. {
  136.         DriverObject->DriverUnload = Unload;
  137.         Ring0EnumProcess();
  138.         return STATUS_SUCCESS;
  139. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

龙马谷| C/C++辅助教程| 安卓逆向安全| 论坛导航| 免责申明|Archiver|
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表龙马谷立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2018-2021 All Right Reserved.
在线客服
快速回复 返回顶部 返回列表