阅读:1564回复:4
Lookaside(后援式)链表 如何使用 ?
ExInitializeNPagedLookasideList 对于Lookaside(后援式)链表有一些问题还不是很清楚,
首先我觉得链表至少有一个数据结构,可这个链表好象仅用来分配相等大小的一窜memery。 其次,如果我分配了这样的memery,需要怎样来使用呢,我如何确定我定义或者分配的数据 会在这个memery中呢? |
|
|
沙发#
发布于:2005-07-09 20:04
你就当是分配固定大小的malloc好了
|
|
板凳#
发布于:2005-07-09 21:24
你的意思是否是向 malloc 那样分配了空间,然后就对他们进行副值来使用,就想副值一个结构什么的,
这样也可以理解,谢谢! 对了,还有几个问题需要向大侠请教,对于这个结构 tagPort32Struct Port32Struct; Port32Struct.bSize = bSize; Port32Struct.dwPortVal = dwPortVal; Port32Struct.wPortAddr = wPortAddr; return DeviceIoControl(hDriver, WINIO_WRITEPORT, &Port32Struct, sizeof(Port32Struct), NULL, 0, &dwBytesReturned, NULL); tagPort32Structruct 这个结构的定义是怎么样的啊,我怎么都没有找到。 对于下面这段语句,有许多疑问还没想明白,想向各位请教一下 主要是有个疑问,pviobuffer所指向的地址结构有多大,是否是tagPhys32Struct? 这段代码调用 memcpy 两次主要是用来干什么啊? 最重要的是,系统的输入和输出时使用的缓冲区是否都是pvIOBuffer = Irp->AssociatedIrp.SystemBuffer, 这样的话把交换来的数据再放到pvIOBuffer指向的地方,然后在输出吗, 还样的话还可以理解? struct tagPhys32Struct Phys32Struct; pvIOBuffer = Irp->AssociatedIrp.SystemBuffer; memcpy (&Phys32Struct, pvIOBuffer, dwInputBufferLength); ntStatus = MapPhysicalMemoryToLinearSpace(Phys32Struct.pvPhysAddress, Phys32Struct.dwPhysMemSizeInBytes, &Phys32Struct.pvPhysMemLin, &Phys32Struct.PhysicalMemoryHandle); memcpy (pvIOBuffer, &Phys32Struct, dwInputBufferLength); /* struct tagPhys32Struct { HANDLE PhysicalMemoryHandle; ULONG dwPhysMemSizeInBytes; PVOID pvPhysAddress; PVOID pvPhysMemLin; }; */ |
|
|
地板#
发布于:2005-07-09 23:28
WinIO的代码?
对应buffered_io的deviceiocontrol,pviobuffer指向的内存的大小,是in buffer和out buffer中较大的一个 你理解的对 |
|
地下室#
发布于:2005-07-11 17:03
哈哈,高手,果然是高手!
那你一定也看过winio的代码了,可以给我们解释一下它的 pbPhysAddr, pdwLinAddr 这两个变量指的是什么吗,我对线性空间和物理空间还是不太明白? pdwLinAddr = (PDWORD)MapPhysToLin(pbPhysAddr, 4, &PhysicalMemoryHandle); *pdwPhysVal = *pdwLinAddr; *pdwLinAddr 所指的是虚拟地址所指的值吗 ? ------------------------------------------------------------ GetK32ProcAddress(int ord) 这个函数的功能我怎么一点也看不明白啊 ! ------------------------------------------------------------ 最近在看winio的代码,以前也看过一次,可基础太差,一点都看不明白。 看了本书之后,才刚好看懂一些,但还有些疑问。 现在是有了很平静的心情来看些关于驱动的代码和书籍了,觉得还有点意思。 |
|
|