阅读:1430回复:3
IRP堆栈中分配的资源结构指什么?
书上说:
驱动程序接收到PnP子码IRP_MN_START_DEVICE时,IRP堆栈列表内的两个字段 Parameters.StartDevice.AllocateResourcesTranslated和 Parameters.StartDevice.AllocateResources,列出分配资源。 这两个字段代表什么意思?怎么用?为什么还用两个字段? [编辑 - 12/24/03 by rollstonelu] |
|
沙发#
发布于:2003-12-24 09:10
一个是你收集你卡上的资源,一个是把收集到的资源翻译为CPU可以访问的资源
|
|
|
板凳#
发布于:2003-12-24 10:14
楼上的再问一句:
if (ioStack->Parameters.StartDevice.AllocatedResources && ioStack->Parameters.StartDevice.AllocatedResourcesTranslated) { rawResourceList = &ioStack->Parameters.StartDevice.AllocatedResources->List[0].PartialResourceList; rawResource = &rawResourceList->PartialDescriptors[0]; translatedResourceList = &ioStack->Parameters.StartDevice.AllocatedResourcesTranslated->List[0].PartialResourceList; translatedResource = &translatedResourceList->PartialDescriptors[0]; for (i=0; i<rawResourceList->Count; i++, rawResource++, translatedResource++) { switch (rawResource->Type) { case CmResourceTypeNull: break; case CmResourceTypePort: ///???为什么还要对translatedResource进行查询 ///???我要添加Bar1(I/O)的 内存映射,是不是添加到这里呀? switch (translatedResource->Type) { case CmResourceTypePort: break; case CmResourceTypeMemory: break; default: break; case CmResourceTypeInterrupt: break; case CmResourceTypeMemory: // map memory ............... break; case CmResourceTypeDma: break; case CmResourceTypeDeviceSpecific: break; default: break; } } |
|
地板#
发布于:2003-12-25 08:52
楼上的再问一句: 查询是确认一下系统给你分配了什么类型的资源,并将它记录下来,便于以后使用。 |
|
|