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 为假,同样返回该错误码。
超级会员免费看
订阅专栏 解锁全文
3109

被折叠的 条评论
为什么被折叠?



