我在驱动中创建了个设备A....申请了个内存赋给一个全局的指针,对于这个设备的读写
全部
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT);
KdPrint(("XXXX读写")); return STATUS_SUCCESS;只定义的一个I/O控制码 用来接收应用层传下来的数据。并将这个数据拷贝到全局指针指的内存中。这个驱动还创建了其它一些设备....对于这些设备的读写操作放在了一个线程中来做。测试的时候发现使用这个驱动后产生了内存泄漏,通过查找发现只要我不创建设备A就不会,产生泄漏...但是我查找了半天也没有发现我的内存是在什么时候泄漏的在A设备的申请了内存我需要一直的使用我会在UnLoad中给释放掉。CreateDevice (
IN PDRIVER_OBJECT pDriverObject)
{
NTSTATUS status;
PDEVICE_OBJECT pDevObj;
PKEYDEVICE_EXTENSION pDevExt;
UNICODE_STRING symLinkName;
//创建设备名称
UNICODE_STRING devName;
RtlInitUnicodeString(&devName,L"\\Device\\FileKeyDevice");
//创建设备
status = IoCreateDevice( pDriverObject,
sizeof(KEYDEVICE_EXTENSION),
&devName,
FILE_DEVICE_UNKNOWN,
0, TRUE,
&pDevObj );
if (!NT_SUCCESS(status))
return status; pDevObj->Flags |= DO_BUFFERED_IO;
pDevExt = (PKEYDEVICE_EXTENSION)pDevObj->DeviceExtension;
pDevExt->pDevice = pDevObj;
pDevExt->ustrDeviceName = devName; RtlInitUnicodeString(&symLinkName,L"\\??\\FileWriteKey");
pDevExt->ustrSymLinkName = symLinkName;
status = IoCreateSymbolicLink( &symLinkName,&devName );
if (!NT_SUCCESS(status))
{
IoDeleteDevice( pDevObj );
return status;
}
return STATUS_SUCCESS;
}
而且内存是16K的不断增加...哪位大侠知道可能是什么原因么?
驱动的中创建的线程是是针对设备而言的么???是全局的么(针对所有设备)???
全部
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0; IoCompleteRequest(Irp, IO_NO_INCREMENT);
KdPrint(("XXXX读写")); return STATUS_SUCCESS;只定义的一个I/O控制码 用来接收应用层传下来的数据。并将这个数据拷贝到全局指针指的内存中。这个驱动还创建了其它一些设备....对于这些设备的读写操作放在了一个线程中来做。测试的时候发现使用这个驱动后产生了内存泄漏,通过查找发现只要我不创建设备A就不会,产生泄漏...但是我查找了半天也没有发现我的内存是在什么时候泄漏的在A设备的申请了内存我需要一直的使用我会在UnLoad中给释放掉。CreateDevice (
IN PDRIVER_OBJECT pDriverObject)
{
NTSTATUS status;
PDEVICE_OBJECT pDevObj;
PKEYDEVICE_EXTENSION pDevExt;
UNICODE_STRING symLinkName;
//创建设备名称
UNICODE_STRING devName;
RtlInitUnicodeString(&devName,L"\\Device\\FileKeyDevice");
//创建设备
status = IoCreateDevice( pDriverObject,
sizeof(KEYDEVICE_EXTENSION),
&devName,
FILE_DEVICE_UNKNOWN,
0, TRUE,
&pDevObj );
if (!NT_SUCCESS(status))
return status; pDevObj->Flags |= DO_BUFFERED_IO;
pDevExt = (PKEYDEVICE_EXTENSION)pDevObj->DeviceExtension;
pDevExt->pDevice = pDevObj;
pDevExt->ustrDeviceName = devName; RtlInitUnicodeString(&symLinkName,L"\\??\\FileWriteKey");
pDevExt->ustrSymLinkName = symLinkName;
status = IoCreateSymbolicLink( &symLinkName,&devName );
if (!NT_SUCCESS(status))
{
IoDeleteDevice( pDevObj );
return status;
}
return STATUS_SUCCESS;
}
而且内存是16K的不断增加...哪位大侠知道可能是什么原因么?
驱动的中创建的线程是是针对设备而言的么???是全局的么(针对所有设备)???
解决方案 »
- 关于绘制彩色按钮
- 跪求_tcsstr()函数的源代码
- windows有没有像.net的Workspace那种控件或ActiveX控件?应该怎么实现?
- 数据库访问效率慢--为什么呀--急呀
- MFC新建类的问题
- 如何实现搜索网页链接的方法~~~~~~~~~求救
- 请教几个关于string的基本问题?急!
- 关于函数调用的问题,请大家指教!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 怎么用vc++/MFC读取iges文件
- 有哪位看过VC++技术内幕(第四版),为什么它的第一个程序就不能运行?(潘爱民王国印译)
- picture控件显示24位bmp灰度图
- 请各位指教!C++
pDevExt->ustrDeviceName = devName;
其他的从你的代码中,没看到由什么问题?
晕了...
磁盘驱动不可以创建FILE_DEVICE_UNKNOWN类型的设备么......