WEB开发网
开发学院操作系统windows 2008 深度剖析WinPcap之(三)——所涉及的Windows驱动基... 阅读

深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(3)

 2009-09-11 00:00:00 来源:WEB开发网   
核心提示: 将分配的内存,进行回收的函数是ExFreePool和ExFreePoolWithTag,深度剖析WinPcap之(三)——所涉及的Windows驱动基础知识(3)(2),它们的原型是:VOIDExFreePool(IN PVOID P);VOIDExFreePoolWithTag(IN PVOI

将分配的内存,进行回收的函数是ExFreePool和ExFreePoolWithTag,它们的原型是:

VOID
ExFreePool(
 IN PVOID  P
 );
VOID
ExFreePoolWithTag(
IN PVOID  P,
IN ULONG  Tag
);

参数P就是要释放的地址。

下面的代码为WinPcap中使用内核内存操作的实例:

PWCHAR getAdaptersList(void)
{
    …
    PWCHAR DeviceNames = (PWCHAR) ExAllocatePoolWithTag(PagedPool, BufLen,
 '0PWA');

ExFreePool(DeviceNames);
}

1.1.7       内存操作的运行时函数

运行时函数是程序运行时必不可少的,由编译器提供。针对不同的操作系统,运行时函数的实现方法不同,但接口基本保持一致。例如,malloc函数就是典型的运行时函数,所有编译器厂商都必须提供这个函数,但在不同操作系统上的实现方法就不尽相同了。

1.1.7.1     内存间复制(非重叠的情况)

在驱动程序开发中,经常用到内存的复制。DDK为程序员提供了RtlCopyMemory函数。

VOID
RtlCopyMemory(
    IN VOID UNALIGNED  *Destination,
    IN CONST VOID UNALIGNED  *Source,
    IN SIZE_T  Length
);

参数Destination表示要复制内存的目标地址。参数Source表示要复制内存的源地址。参数Length表示要复制的内存的长度,单位是字节。

1.1.7.2     内存间复制(可重叠的情况)

用RtICopyMemory可以复制内存,但其内部没有考虑目标内存与源内存重叠的情况。对可重叠的情况DDK提供了RtIMoveMemory函数。

Tags:深度 剖析 WinPcap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接