阅读:1478回复:16
pxe基本信息查询
各位老大:
PXE (preboot execute environment)是由Intel 公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程. 偏偏我要解决这个问题,现在我在自己的scsi驱动中需要访问PXE里缓冲IP地址信息,在Windows 2000 Boot stage 0下,如何解决? 我使用了这样的代码 NTSTATUS GetphysicMem(LONG baseaddr) { UNICODE_STRING ObjName; OBJECT_ATTRIBUTES obj_ar; HANDLE hSection; PVOID pBaseAddr; LARGE_INTEGER phyAddr; SIZE_T size; // size=0xffff; size=BASEMEMORYSIZE; pBaseAddr=NULL; // phyAddr.LowPart=0x000f0000; //物理内存的基址,就是f000:0000 phyAddr.LowPart=baseaddr; // phyAddr.LowPart=0x000000a0; phyAddr.HighPart=0x00000000; RtlInitUnicodeString(&ObjName,L\"\\\\device\\\\physicalmemory\"); InitializeObjectAttributes( &obj_ar, &ObjName, OBJ_CASE_INSENSITIVE, (HANDLE) NULL, (PSECURITY_DESCRIPTOR) NULL ); ZwOpenSection(&hSection,SECTION_ALL_ACCESS,&obj_ar); ZwMapViewOfSection( (HANDLE)hSection, //打开Section时得到的句柄 (HANDLE)0xffffffff, //将要映射进程的句柄, &pBaseAddr, //映射的基址 0, //没怎么看明白,设为0就好了 BASEMEMORYSIZE, //分配的大小 &phyAddr, //物理内存的地址 &size, //指向读取内存块大小的指针 ViewShare, //子进程的可继承性设定 0, //分配类型 ViewUnmap); //保护类型 RtlCopyMemory(gBaseBuffer,pBaseAddr,size); ZwUnmapViewOfSection((HANDLE)0xffffffff,pBaseAddr); return STATUS_SUCCESS; } 但没有查到,各位高手有没有办法? |
|
最新喜欢:![]() |
沙发#
发布于:2004-05-20 16:57
没有查到,是什么意思??是影射的物理内存里没有你的东西,还是压根就没有影射???
|
|
|
板凳#
发布于:2004-05-20 17:12
呵呵,在dos实模式下应该是可以查到的,我现在需要确认两个问题:
1、映射的内存里面没有我的东西 2、我的映射方法是否正确 我是在scsi驱动启动之初读取内存的,但没有查找到我要的东西,我估计和实模式/保护模式有关系,同时映射方法是否正确也是一个问题,希望大虾能够解决 |
|
地板#
发布于:2004-06-11 16:25
to wowocock老大:
我在scsi驱动里面调用上面的方法能够查询到实模式下640k~1M的数据吗?方法是否正确(scsi在第0级保护模式下启动) |
|
地下室#
发布于:2004-06-14 09:14
如果你启动的时候没有装载过pxe,那你是察看不出来pxe的程序的,i am sure.
|
|
5楼#
发布于:2004-06-14 10:06
你的意思是,我的这种方法应该是正确的吗?
|
|
6楼#
发布于:2004-06-14 11:12
我的感觉是你的方法是正确的,问题是pxe没load进来,你可以在dos下写个程序试验,pxe spec上面有的,一般来说pxe是肯定没加载的
|
|
7楼#
发布于:2004-06-14 11:33
我同事曾经在dos下看到过这个数据,我就怀疑在实模式下的数据,到了保护模式下,就看不到了,需要使用特殊的方法,但我不知道除了我这种方法之外还有什么其他的方法可以看到.
|
|
8楼#
发布于:2004-06-15 09:19
你去问问看你的同事怎么在dos下看到的?怀疑他用pxe启动然后再用int19h载入dos。不然我想象不出pxe怎么出现
|
|
9楼#
发布于:2004-06-15 10:38
不是的,直接使用了pxe网络启动dos,之后就能在高端内存看到
|
|
10楼#
发布于:2004-06-15 10:42
那就是啊,你现在也是从pxe启动的么?windows启动好像只使用512k以下的内存啊。
|
|
11楼#
发布于:2004-06-15 11:09
不错,我现在也是从pxe启动,但这个高端内存在驱动中好像搜索不到
|
|
12楼#
发布于:2004-06-15 11:54
在2000下面一般物理内存map到kernel memory都是8000000开始的,你用softice看看吧。
|
|
13楼#
发布于:2004-06-15 13:43
各位老大: 你确保信息放在这个地址吗? 如果没有你当然得不到。 |
|
|
14楼#
发布于:2004-06-15 17:03
我现在是查了从0开始查,查到1M都没有找到,8000000是个什么地址?我算了一下,如果是16进制应该是128M呢,你的意思是实模式下的数据到保护模式后应该在128M以上吗?
|
|
15楼#
发布于:2004-06-15 17:18
一般来说2000下,物理内存0是从80000000h开始的,这里是windows核心内存的开始的地方.当然你也可以用MmMapIoSpace()去把物理内存map一下。直接去拿试试看吧
|
|
16楼#
发布于:2004-06-21 10:21
哈哈,这个问题已经在上周得到圆满解决,pxe的数据已经全部得到,谢谢各位大虾的帮助
|
|