yanghaoyun
驱动牛犊
驱动牛犊
  • 注册日期2002-03-22
  • 最后登录2002-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1652回复:4

VXD中如何使用SEH(即结构异常处理)?

楼主#
更多 发布于:2002-04-24 13:40
windows9X中,我想做个VXD,在4G空间内搜索内存,就象softice中的搜索命令一样,这会涉及SEH即异常处理,那位大哥给我详细介绍一下怎么处理搜索无效地址时的异常,即怎么截换系统的异常?

最新喜欢:

flyfoxflyfox
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-24 19:11
若你仅是害怕搜索时出现异常,不必用SEH
可先验证你要搜索区域的合法性:
DWORD PageQuery(
   DWORD pbase,
   PMEMORY_BASIC_INFORMATION pmbi,
   DWORD cbmbi
);
此VxdCall与Ring3下的VirtualQuery用法一样。

至于SEH,我没试过在9x内核中用,不知道行不行。不知有没有VxD的C++编译器支持SEH,若没有的话你自己手工加上试试。具体加法可参考一下《(Windows 95 System Programming SECRETs》、《Debug...?》等书,CIH用了一点点(在Ring3下),看看或许有点用吧
yanghaoyun
驱动牛犊
驱动牛犊
  • 注册日期2002-03-22
  • 最后登录2002-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-25 08:35
能具体点吗?比如我从0X80000000开始搜索,怎么用PageQuery找出所有的有效空间?
pjf
pjf
驱动中牛
驱动中牛
  • 注册日期2001-07-08
  • 最后登录2006-10-23
  • 粉丝0
  • 关注0
  • 积分42分
  • 威望4点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-25 10:35
Pmbi参数是你必须分配的MEMORY_BASIC_INFORMATION结构的地址在Winnt.h中有定义。各个域的说明:
1)BaseAddress与pvAddress参数的值相同,但是四舍五入为页面的边界值
2)AllocationBase用于指明包含在pvAddress参数中设定的地址区域的基地址
3)AllocationProtect用于指明一个地址空间区域被初次保留时赋予该区域的保护属性
4)RegionSize用于指明从基地址开始的所有页面的大小(以字节为计量单位)
这些页面与含有用pvSddress参数设定的地址的页面拥有相同的保护属性、状态和类型
5)State用于指明所有相邻页面的状态(MEM_FREE、MEM_RESERVE或MEM_COMMIT)。这些页面与含有用pvAddress参数设定的地址的页面拥有相同的保护属性、状态和类型如果它的状态是空闲,那么AllocationBase、AllocationProtect、Protect和Type等成员均未定义如果状态是MEM_RESERVE,则Protect成员未定义
6)Protect用于指明所有相邻页面的保护属性(PAGE_*)。这些页面与含有用pvAddress参数设定的地址的页面拥有相同的保属性、状态和类型
7)Type用于指明支持所有相邻页面的物理存储器的类型(MEM_IMAGE,MEM_MAPPED或MEM_PRIVATE)。这些相邻页面与含有用pvAddress参数,设定的地址的页面拥有相同的保护属性、状态和类型。如果是Windows 98,那么这个成员将总是MEM_PRIVATE
你可从MSDN中的VirtualQuery一样,查查MSDN有用。

你从每隔4kQuery一下,直至结束。
你要查高端系统内存?我没试过,希望内核中的PageQueryVMM服务管用了(不一定)
good luck
yanghaoyun
驱动牛犊
驱动牛犊
  • 注册日期2002-03-22
  • 最后登录2002-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-25 11:04
我的意思就是是否以4K为单位依次查询,多言无益,我还是自己试试吧,谢了,给你10分。
游客

返回顶部