Windows VxD与Win32应用程序通信详解
1. 释放缓冲区函数
首先来看释放缓冲区的函数FreeBuffer,其代码如下:
DWORD FreeBuffer( DMA_BUFFER_DESCRIPTOR *pBufDesc ) { DWORD rc; if (bOwned) { bOwned = FALSE; if (pBufDesc->LinAddr == LinAddr) { if (!bWin3x) { PageFree( pBufDesc->LinAddr, 0 ); } } else { rc = DMABUF_NOT_ALLOCED; } } else { rc = DMABUF_NOT_ALLOCED; } return rc; }这个函数的主要功能是释放指定的DMA缓冲区。如果bOwned为真,说明缓冲区已被占用,会检查传入的线性地址是否与当前记录的线性地址一致。若一致且不是Win3x系统,会调用PageFree函数释放缓冲区;若不一致,则返回DMABUF_NOT_ALLOCED错误码。若bOwned为假,同样返回该错误码。