yukiyex
驱动牛犊
驱动牛犊
  • 注册日期2001-06-28
  • 最后登录2010-06-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2159回复:2

串口过滤的简单问题

楼主#
更多 发布于:2002-12-30 19:41
我写了一个过滤驱动,可是在Attach的时候出现问题。代码如下:

估计在ObDereferenceObject(pTargetFileObj);出现问题因为这个调用好像没起作用,如果这里不调用,在UnLoad中调用就好用,不过在
UnLoad之前Com口就无法打开。如果先ObReferenceObject(pTargetDevice)在UnLoad事就重启,别的代码好像也是如此,可我怎么不行,急死了,各位帮忙。
NTSTATUS FilterAttach(PDRIVER_OBJECT pDriverObject,
 PUNICODE_STRING pTargetDeviceName,
 ACCESS_MASK DesiredAccess,
 PDEVICE_OBJECT* ppNewDeviceObject)
{
NTSTATUS status=STATUS_SUCCESS;
PDEVICE_OBJECT pDevObj=NULL;
PDEVICE_OBJECT pLowerDevice=NULL;
PDEVICE_OBJECT pTargetDevice=NULL;
    PFILE_OBJECT pTargetFileObj=NULL;
PDEVICE_EXTENSION pDevExt=NULL;

status=IoGetDeviceObjectPointer(
pTargetDeviceName,
DesiredAccess,//FILE_ALL_ACCESS,
&pTargetFileObj,
&pTargetDevice
);
if(!NT_SUCCESS(status))
{
return status;
}

status=IoCreateDevice(
pDriverObject,
sizeof(DEVICE_EXTENSION),
NULL,
pTargetDevice->DeviceType,//FILE_DEVICE_UNKNOWN,
pTargetDevice->Characteristics,//0,
FALSE,
&pDevObj
);
if(!NT_SUCCESS(status))
{
*ppNewDeviceObject=NULL;
ObDereferenceObject(pTargetFileObj);
return status;
}
*ppNewDeviceObject=pDevObj;
pDevObj->Flags&=~DO_DEVICE_INITIALIZING;

//Initialize the device extension
pDevExt=pDevObj->DeviceExtension;
RtlZeroMemory(pDevExt,sizeof(DEVICE_EXTENSION));
// Fill device extension
pDevExt->Num=0;
pDevExt->bFirstTime=TRUE;
//
pLowerDevice=IoAttachDeviceToDeviceStack(pDevObj,pTargetDevice);
if(!pLowerDevice)
{
ExDeleteResourceLite(&pDevExt->eres);
ObDereferenceObject(pTargetFileObj);
IoDeleteDevice(pDevObj);
return STATUS_DEVICE_REMOVED;//STATUS_IO_DEVICE_ERROR
}
ObDereferenceObject(pTargetFileObj);
pTargetFileObj=NULL;

// Fill device extension
pDevExt->pDevce=pDevObj;
pDevExt->DeviceType=VIRTUALPORT_DEVICE_FILTER_TYPE;
pDevExt->pLowerDevice=pLowerDevice;
pDevExt->pTargetDevice=pTargetDevice;
pDevExt->pTargetFileObj=pTargetFileObj;

return status;
}
附件名称/大小 下载次数 最后更新
2002-12-30_VirtualPort.zip (16KB)  41

最新喜欢:

TH1999TH1999
yuki
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-31 10:09
ObDereferenceObject不能在这调用
估计问题出在DesiredAccess上,一般应该是FILE_READ_ATTRIBUTES,而不是FILE_ALL_ACCESS
yukiyex
驱动牛犊
驱动牛犊
  • 注册日期2001-06-28
  • 最后登录2010-06-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-07 19:32
自己解决了,代码有问题,很低级的错误。
yuki
游客

返回顶部