阅读:2159回复:2
串口过滤的简单问题
我写了一个过滤驱动,可是在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; } |
|
最新喜欢:TH1999
|
沙发#
发布于:2002-12-31 10:09
ObDereferenceObject不能在这调用
估计问题出在DesiredAccess上,一般应该是FILE_READ_ATTRIBUTES,而不是FILE_ALL_ACCESS |
|
板凳#
发布于:2003-01-07 19:32
自己解决了,代码有问题,很低级的错误。
|
|
|