beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:989回复:2

如何为每个设备分配一块内存。

楼主#
更多 发布于:2002-07-05 15:32
作了一个驱动程序,希望为每个设备都分配一块独立的内存。
应该在什么地方加代码?怎么加呢?

我在×××Create()中加入
KIRQL irql;
KeAcquireSpinLock(&BufferLock,&irql);
ULONG NewBufferSize = 1024;
PVOID NewBuffer = ExAllocatePool(NonPagedPool,NewBufferSize);
if( NewBuffer == NULL)
{
DebugPrint(\"Can\'t allocate memory!\");
}
else
{
RtlZeroMemory(NewBuffer,NewBufferSize);
Buffer = (PUCHAR)NewBuffer;
BufferSize = NewBufferSize;
}
KeReleaseSpinLock(&BufferLock,irql);
结果变成了所有设备的公共内存。

请指教!
只要能解决问题,就一定给分。 希望高手赐教!
brucezh
驱动老牛
驱动老牛
  • 注册日期2002-01-30
  • 最后登录2007-02-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-05 15:34
是不是在OnAddDevice中,我只是猜测
打一枪……换个地方……再打一枪……
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-05 16:14
这容易,你在
typedef struct _DEVICE_EXTENSION {
...
...
UCHAR   pBuffer;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
添加一项pBuffer,然后分配内存
KIRQL irql;
PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
KeAcquireSpinLock(&BufferLock,&irql);
ULONG NewBufferSize = 1024;
PVOID NewBuffer = ExAllocatePool(NonPagedPool,NewBufferSize);
if( NewBuffer == NULL)
{
DebugPrint(\"Can\'t allocate memory!\");
}
else
{
RtlZeroMemory(NewBuffer,NewBufferSize);
pdx->pBuffer = (PUCHAR)NewBuffer;
}
KeReleaseSpinLock(&BufferLock,irql);
最后记得释放内存
游客

返回顶部