llllllllg
驱动牛犊
驱动牛犊
  • 注册日期2005-01-19
  • 最后登录2015-01-08
  • 粉丝0
  • 关注0
  • 积分53分
  • 威望7点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1564回复:4

Lookaside(后援式)链表 如何使用 ?

楼主#
更多 发布于:2005-07-09 18:38
  ExInitializeNPagedLookasideList  对于Lookaside(后援式)链表有一些问题还不是很清楚,
首先我觉得链表至少有一个数据结构,可这个链表好象仅用来分配相等大小的一窜memery。
其次,如果我分配了这样的memery,需要怎样来使用呢,我如何确定我定义或者分配的数据
会在这个memery中呢?
经典之作 , 成就经典之人 !
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-07-09 20:04
你就当是分配固定大小的malloc好了
llllllllg
驱动牛犊
驱动牛犊
  • 注册日期2005-01-19
  • 最后登录2015-01-08
  • 粉丝0
  • 关注0
  • 积分53分
  • 威望7点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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;
};
*/
经典之作 , 成就经典之人 !
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-07-09 23:28
WinIO的代码?
对应buffered_io的deviceiocontrol,pviobuffer指向的内存的大小,是in buffer和out buffer中较大的一个

你理解的对
llllllllg
驱动牛犊
驱动牛犊
  • 注册日期2005-01-19
  • 最后登录2015-01-08
  • 粉丝0
  • 关注0
  • 积分53分
  • 威望7点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-11 17:03
哈哈,高手,果然是高手!
那你一定也看过winio的代码了,可以给我们解释一下它的 pbPhysAddr,  pdwLinAddr
这两个变量指的是什么吗,我对线性空间和物理空间还是不太明白?

pdwLinAddr = (PDWORD)MapPhysToLin(pbPhysAddr, 4, &PhysicalMemoryHandle);

*pdwPhysVal = *pdwLinAddr;

*pdwLinAddr 所指的是虚拟地址所指的值吗 ?
------------------------------------------------------------
GetK32ProcAddress(int ord) 这个函数的功能我怎么一点也看不明白啊 !
------------------------------------------------------------
最近在看winio的代码,以前也看过一次,可基础太差,一点都看不明白。
看了本书之后,才刚好看懂一些,但还有些疑问。
现在是有了很平静的心情来看些关于驱动的代码和书籍了,觉得还有点意思。
经典之作 , 成就经典之人 !
游客

返回顶部