Chinaunix首页 | 论坛 | 博客
  • 博客访问: 95268
  • 博文数量: 46
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 505
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 19:56
文章分类
文章存档

2008年(46)

我的朋友

分类: WINDOWS

2008-06-22 16:18:00

驱动程序里面内存的分配:
使用exAllocatePoolWithTag进行带标记的内存分配:

#define MEM_TAG ‘MyTt’

    // 目标字符串,接下来它需要分配空间。

    UNICODE_STRING dst = { 0 };

    // 分配空间给目标字符串。根据源字符串的长度。

    UNICODE_string src;

    Rtlinitunicodestring(&src,L"tsdf");

    dst.Buffer =

        (PWCHAR)ExAllocatePoolWithTag(NonpagedPool,src->Length,MEM_TAG);

    if(dst.Buffer == NULL)

    {

        // 错误处理

        status = STATUS_INSUFFICIENT_RESOUCRES;

        ……

    }

    dst.Length = dst.MaximumLength = src->Length;

    status = RtlCopyUnicodeString(&dst,&src);

    ASSERT(status == STATUS_SUCCESS);

  使用该函数进行内存分配后必须使用exfreepool进行内存回收,不然内存就泄露了,即使关闭程序还是泄露,必须要关闭系统才行。

  

    ExFreePool(dst.Buffer);

    dst.Buffer = NULL;

    dst.Length = dst.MaximumLength = 0;

 

阅读(938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~