nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2433回复:6

笨笨的问题

楼主#
更多 发布于:2003-02-19 09:44
有一些问题我不是很懂。我想问一下,问题简单不要打我哦。
1.DriverEntry中的两个参数DriverObject和RegistryPath的具体值是从什么地方得到的。
2.UNREFERENCED_PARAMETER和PAGED_CODE两个宏是什么意思,哪儿有具体的定义。

谢谢。
不限容量的免费邮箱 www.k65.net
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-19 17:25
怎么不回答我啊。是不是问题太简单了?没人愿意啊?
不限容量的免费邮箱 www.k65.net
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-19 21:25
你到2000DDK里查查看
应该可以查到
我做过98的,DDK里差不多都能找到
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-20 12:49
谢谢楼上的兄弟。关于driverentry的两个参数问题ddk中有说明,怪我没有看。sorry.
可是那两个宏我可没有找到。:(
不限容量的免费邮箱 www.k65.net
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-21 10:15
我在网上找到这样的文章,看够用吗?

宏PAGED_CODE
(UNREFERENCED_PARAMETER宏没找到,好像是检查函数参数的宏)
。。。
可分页内存和不可分页内存:
    上面讲了内存可以分页,但并不是每个分页内存区都可以换到磁盘文件中。我们把可以换出来的分页叫作“可
分页内存”,只能永久驻留在物理内存中而不能被换出来页的叫作“非分页内存”。
如果在DISPATCH_LEVEL或者更高的中断级中访问分页内存,就会引起缺页故障,内核会崩溃。如果在
PASSIVE_LEVEL中断级访问没有驻留在物理内存中的分页内存时,内核会阻塞我们的线程,直到内存管理器把此页
重新装回物理内存中。
    不要随意使用非分页内存,因为系统的资源是有限的,如果永久驻留在物理内存中的页太多,将导致可分页内
存更加频繁地进行交换,降低系统性能。
    在开发驱动程序时我们必须遵守这样几个原则:
决不(或几乎从不)直接引用用户模式的内存地址。
因为我们不能确切知道用户模式内存地址所指向的真实物理地址。
执行在高于或等于DISPATCH_LEVEL级的代码不可以引发页故障。
在驱动程序的checked版中,你可以使用PAGED_CODE预处理宏(在wdm.h中声明)来帮助发现有违背这个规则的代码。
例如:
NTSTATUS DispatchPower(PDEVICE_OBJECT fdo, PIRP Irp)
{
  PAGED_CODE()
  ...
}
PAGED_CODE包含条件编译语句。在checked-build方式中,如果当前IRQL太高,它就打印出一行信息并生成一个断
言失败。在free-build方式中,它不做任何事。如果测试驱动程序时包含DispatchPower代码的页正好在内存中,
那么你不会发现已经在一个提升的IRQL上调用了DispatchPower函数。即使这样,PAGED_CODE仍能查出问题。如果
该页碰巧不在内存中,系统将产生一个bug check。
我们可以调用以下几个函数来分配可分而和非可分页内存块:
ExAllocatePool(…)
调用方式如下:
PVOID p = ExAllocatePool(type, nbytes);
type参数是表2中列出的POOL_TYPE枚举常量,nbytes是要分配的字节数。返回值是一个内核模式虚拟地址指针,指
向已分配的内存块。如果内存不足,则返回一个NULL指针。如果指定的内存池类型为“must succeed”类型,即
NonPagedPoolMustSucceed或NonPagedPoolCacheAlignedMustS,那么内存不足将导致一个代码为
MUST_SUCCEED_POOL_EMPTY的bug check。
。。。

(是文章的部分,原文在http://www.sunistudio.com/ssdn/index.asp?act=-2&article=417)
5楼#
发布于:2003-02-21 11:23
在SDK,DDK,里面对UNREFERENCED_PARAMETER都有定义,对于这些,你应该自己多动手在M$的头文件里面查一下
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-21 13:31
谢谢挑战者和yuxuehu!
我想给分,可是找不到按钮。
找一找。还有对于UNREFERENCED_PARAMETER我在ddk的头文件中找了,可是没有看明白,所以才来问的。
不限容量的免费邮箱 www.k65.net
游客

返回顶部