阅读:1653回复:4
VXD中如何使用SEH(即结构异常处理)?
windows9X中,我想做个VXD,在4G空间内搜索内存,就象softice中的搜索命令一样,这会涉及SEH即异常处理,那位大哥给我详细介绍一下怎么处理搜索无效地址时的异常,即怎么截换系统的异常?
|
|
最新喜欢:![]() |
沙发#
发布于: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下),看看或许有点用吧 |
|
板凳#
发布于:2002-04-25 08:35
能具体点吗?比如我从0X80000000开始搜索,怎么用PageQuery找出所有的有效空间?
|
|
地板#
发布于: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 |
|
地下室#
发布于:2002-04-25 11:04
我的意思就是是否以4K为单位依次查询,多言无益,我还是自己试试吧,谢了,给你10分。
|
|