求助论坛,初学者代码看不懂额

IT保安 2014-12-17 03:00:26

初学者自学驱动,看的是郁金香的教程+驱动开发技术详解这本书,遇到一段代码,说的是
给NtOpenProcess下个hook做保护,代码如下

/定义NtOpenProcess原型
extern "C" NTSTATUS __stdcall NTOPENPROCESS
(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK AccessMask,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId
);
NTOPENPROCESS* RealNtOpenProcess;


#pragma PAGECODE //自定义一个NtOpenProcess
extern "C" NTSTATUS __stdcall MyNtOpenProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN PCLIENT_ID ClientId )
{
NTSTATUS rc;
HANDLE PID;

KdPrint(("++++++++++++Entry MyNtOpenProcess int ++++++++++++++\n"));

rc = (NTSTATUS)RealNtOpenProcess( ProcessHandle, DesiredAccess, ObjectAttributes, ClientId );

不全贴了太长了,问题就在这一句,rc = (NTSTATUS)RealNtOpenProcess( ProcessHandle, DesiredAccess, ObjectAttributes, ClientId );
这个RealNtOpenProcess我没找到函数体啊,只在前面定义了一个头部.怎么就可以调用此函数了并将结果返回给rc了呢?
迫切求解答!

...全文
207 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly_dragon_fly 2014-12-17
  • 打赏
  • 举报
回复
你还没明白什么叫钩子吧? RealNtOpenProcess是个函数指针,它应该是在driverentry时从SSDT中取得,然后把MyNtOpenProcess放到刚才取的地方,至于怎么从SSDT中取已经比较麻烦了,可能你要找个以前的OS来测试,尽量不要打SP,
luciferisnotsatan 2014-12-17
  • 打赏
  • 举报
回复
引用 楼主 tk2003 的回复:
初学者自学驱动
lz是C++初学者,还是C++老鸟,驱动初学者?C++初学者,就别去看这些了,先看看怎么写用户态下的代码吧。
luciferisnotsatan 2014-12-17
  • 打赏
  • 举报
回复
初学者就别去看这些东西。 Nt,Zw,Rtl这些函数别说实现了,连头文件你都找不到。这些是微软非公开的函数。
JiangWenjie2014 2014-12-17
  • 打赏
  • 举报
回复
可能是别人封装的库,只给你了头文件和库文件,没让你看到里面的实现。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧