• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 通用Hook函数方法检测进程的问题

通用Hook函数方法检测进程的问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了易语言hook进程保护,hook函数,xposed hook函数,易语言hook函数,hook api函数等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 通用Hook函数方法检测进程的问题
描述:

我刚开始学写驱动程序,需要在驱动中获得系统的进程列表,并传回给应用程序。
我现在的做法是HOOK函数ZwQuerySystemInformation,在自己的Hook函数中调用原函数后,遍历所有系统进程并分配空间,将进程信息存入动态链表。但是这样会导致内核崩溃,是什么原因呢?是不是这样会改变堆栈里面的值呢? 
正确的做法应该是什么呢?
附部分源代码:
typedef struct _procinfo
{
ULONG ProcessId;
UNICODE_STRING ProcessName;
struct _procinfo  * Next;
}PROCINFO,*PPROCINFO;
NTSTATUS 
NewZwQuerySystemInformation(
IN     ULONG       SystemInformationClass,
IN OUT PVOID       SystemInformation,
IN     ULONG       SystemInformaitonLength,
OUT    PULONG      ReturnLength OPTIONAL)
{
NTSTATUS          NtStatus;
PSYSTEM_PROCESSES ProcCur  = NULL;
PSYSTEM_PROCESSES ProcPre  = NULL;
PPROCINFO         pNewPI = NULL;
if(SystemInformationClass == 5)
{
DbgPrint("ZwQuerySystemInformation for Process/Thead\n");
}
NtStatus = (OldZwQuerySystemInformation)(SystemInformationClass,
     SystemInformation,
     SystemInformaitonLength,
     ReturnLength);
if(NT_SUCCESS(NtStatus) && SystemInformationClass == 5)
{
ProcCur = (PSYSTEM_PROCESSES)SystemInformation;
pCurrentPI = pFirstPI;
while(ProcCur != NULL)
{
pCurrentNK = pFirstNK;
pNewPI = ExAllocatePool(NonPagedPool,sizeof(PROCINFO));
if(pNewPI != NULL)
{
if(pFirstPI == NULL)
{
pFirstPI = pNewPI;
pCurrentPI = pNewPI;
}
else
{
pCurrentPI->Next = pNewPI;
pCurrentPI = pNewPI;
}
pCurrentPI->ProcessId = ProcCur->ProcessId;
RtlCopyUnicodeString(&pCurrentPI->ProcessName, &ProcCur->ProcessName);
pCurrentPI->Next = NULL;
NumProcInfo++;
}
ProcPre = ProcCur;
if(ProcCur->NextEntryDelta != 0)
{
ProcCur = (PSYSTEM_PROCESSES)((PTSTR)ProcCur + ProcCur->NextEntryDelta);
}
else
{
ProcCur = NULL;
}
}
}
return NtStatus;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 通用Hook函数方法检测进程的问题

相关文章

  • 2017-06-05 stm32F103ZET6PWM捕获不到
  • 2017-06-05 有关Redhat默认网关的问题
  • 2017-06-05 单片机中如何使用结构体管理变量
  • 2017-06-05 文章标题人机接口设备(HID)和USB设备问题
  • 2017-06-05 有偿破解土壤侵蚀分析专业软件硬件狗crack
  • 2017-06-05 wince60车机系统求解决GPS端口释放问题
  • 2017-06-05 无传感网络openwsn求助
  • 2017-06-05 Warning:StackpointerissetuptoincorrectalignmentStackaddr=0xAAAAAAAA
  • 2017-06-05 ------------------inf文件找不到指定的驱动问题,哭求大神打救----------------
  • 2017-06-05 有哪位老大知道PowerPC和PC的数据格式的转换?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 求stc89c52rc复位电路原理图
    • 大家好,我一直有一个疑问,就是很以前那种普通的老人手机,那些功能是怎么实现的呢,老人手机不能装操作系统,比如计算器那都是运行在什么基础之上的呢?求大神指教!
    • 嵌入式系统驱动程序设计窍门
    • 关于CPU利用率和多线程开发
    • IIC接口
    • MDK使用外扩ram
    • 硬盘控制器0x170-0x17f端口的详细说明
    • eeprom断电丢失,我要疯了,求助
    • 实时嵌入式系统是怎么保证实时性的?例如pSOS?
    • 覆盖上传图片访问得到以前的图片!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有