反思一个问题的解决过程:多思考
今天来了后我就一直在调试驱动中没有在创建进程前向上层通知的问题,中间经历了几个过程,现在回想一下,如果是当时看代码的时候如果能够深入一些,应该就会一次解决问题的,会节约很多时间。
一、问题的来源
我们目前在做的一个软件中有一个功能是监视系统的进程创建,在进程创建前后创建后需要通知上层或者用户做出相应的反应。昨天我测试了进程通知的功能,发现以前的代码实际上完成的是进程创建后的通知,而我们现在需要的是进程创建前的通知。
在代码中发现有进程创建函数
HOOK
的功能,其中进程创建函数
hook
的功能被注释掉了。于是把注释去掉,打开进程创建函数
HOOK
的功能,测试发现还是有问题。由于这些功能都是在驱动中的,调试起来比较麻烦,我现在虽然用虚拟机在调试,但是启动虚拟机后系统反应比较慢,因此我准备用输出
log
的方式来查看代码的运行情况。
昨天我在驱动中的替换的函数地方加了
log
输出,测试后发现没有输出,说明
hook
功能没有成功。今天上班后我的第一个任务就是检查
hook
的代码。
二、注册表的设置
Hook
函数是在函数
SetSystemNotifiers
中进行的,调用的是函数
HookNtFunc
,我看了一下实现,发现有如下的代码:
if (!FlagOn( Globals.m_DrvFlags, _DRV_FLAG_HAS_SYSPATCH ))
return
FALSE;
看来这个功能是用一个标志来进行开关设置的,如果标志是默认关闭的,那么当然昨天的工作是不可能有效果的。需要马上检查该开关是如何初始化,什么地方设置的。
在代码中我搜索了一下
_DRV_FLAG_HAS_SYSPATCH
,发现只有一个地方进行了设置,其他地方都是获取该变量标志的值。设置这个值的地方是在函数
CheckSysPatch
中,代码写的很清楚:
if
(g_bIsW2003 || g_bIsW2K || g_bIsWXP)
{
NTSTATUS
status = RegQueryValue( L"SysPatch", &dwValue );
if
(NT_SUCCESS(status) )
{
if
(1 == dwValue)
SetFlag( Globals.m_DrvFlags,
_DRV_FLAG_HAS_SYSPATCH );
}
}
这就是在说表标志是从注册表中读取的。终于发现了问题,我马上修改安装文件和配置文件,在安装的时候把这个标志设置进去。
在修改之后,重新安装驱动,启动系统。首先我用
TraceView
查了一下在新创建进程下
Log
的输出情况,奇怪的是仍然没有发现有关于进程创建前
log
的输出。想到冰刃有查看
SSDT
的功能,我启动冰刃查看一下,结果冰刃显示函数没有
hook
。
三、启动入口代码的修改
调试到了这种情形确实很让人挠头,不应该发生的事情发生了。没有办法,我觉得调试一下驱动,不管系统反应慢,这是最后一招了。
于是启动
WinDBG
调试器,准备设置一下断点,但是发现因为驱动没有启动,设置驱动入口例程的,但是现实断点无效。不管了,先启动系统进入调试。不管事情比较顺利的是系统竟然在驱动入口处中断了,很好啊。马上开始单步执行,到了初始化的地方,发现原来
CheckSysPatch
没有调用。以前看代码的时候对这些不熟悉,后来驱动出了问题就屏蔽了很多代码,这段代码就属于屏蔽之列。真后悔啊。马上修改,重新编译。
四、功能完成?
这个问题解决了吗?
No
。因为在我准备测试的时候,老大来了告诉我们有新的事情需要做,这个事情先撂下。
事后我总结了一下,要是我一开始就专心去看源代码,把源代码彻底弄清楚,
SSDT
的过程弄清楚,那么虽然时间也会长些,但是对以后的工作打了一个很好的基础。现在的情况是,看见一点问题就去测试,就去修改,就去调试,结果总是出乎自己的预料。想起来以前看到的一个博客说的:写代码要多思考少用电脑。
搞清楚事情的来龙去脉总是不会有错的
。
分享到:
相关推荐
在小学三年级数学上册的学习中,解决问题的策略是极其重要的一个环节,这关系到孩子们对数学问题的理解和解决能力的培养。本节课“解决问题的策略(2)”着重讲解了如何利用画图策略来处理实际问题,这在苏教版教材...
《麦肯锡思考武器》是一本深受欢迎的商业咨询书籍,它主要讲述了如何运用逻辑思考来解决实际问题。这本书的核心理念是将麦肯锡公司的思维方式和解决问题的方法论传授给读者,帮助他们提升分析问题、制定策略和执行...
《有余数的除法解决问题》这一教学反思围绕着如何利用有余数的除法解决有规律排列的实际问题展开了深入的思考。通过具体的教学片段和问题探讨,重点在于帮助学生掌握找规律和利用余数解题的方法。 首先,教学中强调...
它是深度学习中的一个重要组成部分,因为反思贯穿于整个学习活动的过程中,其目的在于通过对学习过程及结果的调控,促进问题解决和知识的深化理解。 基于反思的深度学习将反思性学习视为核心内容,其理论基础包括...
标题中的“四年级数学下册5解决问题的策略5.1解决问题的策略_画线段图教学反思苏教版202005041191”指的是针对四年级学生的一个数学教学单元,该单元重点在于教授如何使用画线段图的方法来解决实际问题。在这个教学...
这节课主要关注的是“求一个数比另一个数多(少)几的问题”,这是一个基础且关键的数学概念,它涉及到数量的比较和减法运算。 首先,教学策略的实施至关重要。教师采用了承前启后的教学方法,通过简单的伸手指游戏...
- 表格:提供了一个结构化的方式来整理数据、比较不同解决方案,使问题分析更加清晰和有条理。 3. **适用场景**: - 项目讨论:在项目团队中,可以用来探讨遇到的问题,提出和评估各种解决方案。 - 教学培训:...
在小学五年级数学的教学中,解决问题的策略是一个至关重要的部分,尤其在苏教版的教材中,这个问题解决的策略被分为多个阶段进行深入探讨。在7.1单元中,主要聚焦于“解决问题的策略1”,这是一次旨在培养学生数学...
计算机解决问题的过程是教育领域中一个重要的知识点,尤其在信息技术课程中。这个教学设计旨在帮助学生理解计算机如何模拟人类解决问题的思维,并对比人与计算机在解决问题上的不同特点。 首先,教学目标明确了学生...
在小学四年级数学的教学过程中,解决问题的策略是一个重要的学习领域,特别是画直观图这一方法,对于培养学生的逻辑思维和空间观念具有深远影响。本节课聚焦于"画直观图"这一策略,旨在帮助学生掌握如何利用图形来...
6. **教学反馈**:课后反思提到学生在整个教学过程中表现出较高的学习积极性,回答问题富有想象力和创新性,写作时充满热情,作文难题得到了有效解决。 总的来说,这篇教学反思强调了在小学语文教学中如何通过引导...
在二年级数学上册的教学中,长度单位是一个基础且重要的概念,它涉及到日常生活中的测量和比较,对于孩子们理解和解决实际问题至关重要。在这个1.4单元的"解决问题"部分,教师们需要特别关注如何有效地教授这一内容...
以"粉刷墙壁"为例,这是一个非常贴近学生日常生活的场景。通过让学生观察教室的墙壁,教师引导学生认识到在实际问题中,计算表面积并不总是需要所有六个面的总面积,而是需要根据具体需求来确定。这一环节不仅锻炼了...
2. **培养应用意识**:在解决问题的过程中,教师应鼓励学生尝试多种解题策略,比如画图、列举、推理等,以锻炼他们的逻辑思维和创新思考。同时,引导学生将所学的乘法知识拓展到课堂之外,解决日常生活中遇到的类似...
解决一个问题后,进一步简化问题条件,提炼解题方法,这有助于我们形成更高效的问题解决技巧。 再者,反思不仅仅是即时的,也包括对过去反思的反思。随着知识的积累,我们原有的认知可能需要更新和完善。定期回顾和...
这一公式不仅适用于商业环境,还可以应用于个人生活、咨询业务等多个领域,有助于提升解决问题的效率和质量。 综上所述,《有效决策:解决复杂性问题的10步工作法》提供了一种实用的框架,让读者能够应对日益复杂...
”,这是为了激发学生的创新思维,让他们分享不同的解题策略,这既展示了问题解决的多样性,也尊重了每个学生的独立思考。在列式计算时,教师指导学生先分步列式,再列综合算式,以此强化步骤计算与综合计算之间的...
通过这样的过程,学生的思维得到了拓展,语言表达能力也得到了提升,形成了一个动态的“学习共同体”。 在帮助学生构建数学思维的过程中,教师的角色是梳理信息、推动思考的向导。例如,当学生使用图示和算式解决...
本教学反思体现了数学教学中的一些重要知识点,包括数学问题来源于生活又应用于生活的思想、创新始于问题、教师引导学生思考、分析和解决问题、数学教学中习题的选择、层次递进的教学设计、学生中心的教学思想、实践...
这篇文档标题为"习作:看图画,写一写教学反思一.docx",描述中并未提供具体信息,但从标签"资料"我们可以推测这是一个关于教学实践的反思,特别是针对小学低年级学生的看图作文教学。文档中提到了教学过程中遇到的...