[Com0com-cvs] com0com/sys pnp.c,1.4,1.5
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2006-06-23 07:37:29
|
Update of /cvsroot/com0com/com0com/sys In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv31366 Modified Files: pnp.c Log Message: Disabled usage pDevExt after deleting device Added check of openCount to IRP_MN_QUERY_REMOVE_DEVICE Index: pnp.c =================================================================== RCS file: /cvsroot/com0com/com0com/sys/pnp.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** pnp.c 14 Jul 2005 13:51:07 -0000 1.4 --- pnp.c 23 Jun 2006 07:37:24 -0000 1.5 *************** *** 2,6 **** * $Id$ * ! * Copyright (c) 2004-2005 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify --- 2,6 ---- * $Id$ * ! * Copyright (c) 2004-2006 Vyacheslav Frolov * * This program is free software; you can redistribute it and/or modify *************** *** 20,23 **** --- 20,27 ---- * * $Log$ + * Revision 1.5 2006/06/23 07:37:24 vfrolov + * Disabled usage pDevExt after deleting device + * Added check of openCount to IRP_MN_QUERY_REMOVE_DEVICE + * * Revision 1.4 2005/07/14 13:51:07 vfrolov * Replaced ASSERT by HALT_UNLESS *************** *** 109,112 **** --- 113,117 ---- case IRP_MN_REMOVE_DEVICE: RemoveFdoBus(pDevExt); + pDevExt = NULL; break; } *************** *** 300,313 **** PDEVICE_OBJECT pLowDevObj = pDevExt->pLowDevObj; // IRP_MN_REMOVE_DEVICE deletes *pDevExt! switch (minorFunction) { case IRP_MN_REMOVE_DEVICE: RemoveFdoPort(pDevExt); break; } ! IoSkipCurrentIrpStackLocation(pIrp); ! status = IoCallDriver(pLowDevObj, pIrp); ! TraceCode((PC0C_COMMON_EXTENSION)pDevExt, "PNP ", codeNameTablePnp, minorFunction, &status); return status; --- 305,332 ---- PDEVICE_OBJECT pLowDevObj = pDevExt->pLowDevObj; // IRP_MN_REMOVE_DEVICE deletes *pDevExt! + status = STATUS_SUCCESS; + switch (minorFunction) { + case IRP_MN_QUERY_REMOVE_DEVICE: + if (pDevExt->openCount) + status = STATUS_DEVICE_BUSY; + break; case IRP_MN_REMOVE_DEVICE: RemoveFdoPort(pDevExt); + pDevExt = NULL; break; } ! if (status == STATUS_SUCCESS) { ! IoSkipCurrentIrpStackLocation(pIrp); ! status = IoCallDriver(pLowDevObj, pIrp); ! TraceCode((PC0C_COMMON_EXTENSION)pDevExt, "PNP ", codeNameTablePnp, minorFunction, &status); ! } else { ! TraceIrp("PNP", pIrp, &status, TRACE_FLAG_RESULTS); ! ! pIrp->IoStatus.Status = status; ! IoCompleteRequest(pIrp, IO_NO_INCREMENT); ! } return status; |