阅读:1507回复:3
急,关于Pci卡的CmResourceTypeMemory资源
没有用过CmResourceTypeMemory资源,我是这样用的:
在DEVICE_EXTENSION里定义: typedef struct _mpci{ ... PHYSICAL_ADDRESS phy_memory; PVOID MemoryBase; ULONG MemoryLength; }mpci,*pmpci; 在StartDevice里: pmpci dx; ......//枚举资源 switch(resource->Type) { ... case CmResourceTypeMemory: dx->phy_memory=resource->u.Memory.Start; dx->MemoryLength=resource->u.Memory.Length; break; ... } //处理一下: dx->MemoryBase=(PVOID)(dx->phy_memory.LowPart); //在使用的时候: char buf[20]; RtlCopyMemory((PULONG)dx->MemoryBase,buf,20); 不知道我这样使用CmResourceTypeMemory资源对不对,看到一些例程都是把CmResourceTypeMemory的处理放在和处理端口类似的代码里: 先得到u.Memory.Start,然后用MmMapIoSpace得到一个PUCHAR的地址,然后对其操作,但是那不是对映射到内存中的端口的操作吗? 如果本来就是Pci卡的内存资源呢?还需要再映射吗? 我这样操作的结果也好像不对,处理的过程正确吗? |
|
|
沙发#
发布于:2002-12-15 17:48
必须要用 MmMapIoSpace 函数进行映射,
然后才能使用 |
|
板凳#
发布于:2002-12-15 20:01
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2002-12-16 11:03
多谢二位,MmMapIoSpace 后用RtlCopyMemory应该可以正常操作吧,我这里好像不正常,还需要其他的转化吗?
|
|
|