Windows: Restrict the Service IOCTLS to the service process
[openafs.git] / src / WINNT / afsrdr / kernel / fs / AFSCleanup.cpp
index 5209873..8ead4b5 100644 (file)
@@ -56,7 +56,6 @@ AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
 {
 
     NTSTATUS ntStatus = STATUS_SUCCESS;
-    AFSDeviceExt *pDeviceExt = (AFSDeviceExt *)DeviceObject->DeviceExtension;
     IO_STACK_LOCATION *pIrpSp = IoGetCurrentIrpStackLocation( Irp);
 
     __try
@@ -77,6 +76,12 @@ AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
                 //
 
                 AFSCleanupIrpPool();
+
+                //
+                // And reset the Service PID
+                //
+                AFSDeregisterService();
+
             }
 
             if( FlagOn( (ULONG_PTR)pIrpSp->FileObject->FsContext, AFS_REDIRECTOR_INSTANCE))
@@ -102,12 +107,14 @@ try_exit:
 
         NOTHING;
     }
-    __except( AFSExceptionFilter( GetExceptionCode(), GetExceptionInformation()) )
+    __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
     {
 
         AFSDbgLogMsg( 0,
                       0,
                       "EXCEPTION - AFSCleanup\n");
+
+        AFSDumpTraceFilesFnc();
     }
 
     return ntStatus;
@@ -117,14 +124,13 @@ NTSTATUS
 AFSCommonCleanup( IN PDEVICE_OBJECT DeviceObject,
                   IN PIRP Irp)
 {
-
+    UNREFERENCED_PARAMETER(DeviceObject);
     NTSTATUS ntStatus = STATUS_SUCCESS;
-    AFSDeviceExt *pDeviceExt = (AFSDeviceExt *)DeviceObject->DeviceExtension;
     IO_STACK_LOCATION *pIrpSp = IoGetCurrentIrpStackLocation( Irp);
     PFILE_OBJECT pFileObject = NULL;
     AFSDeviceExt *pControlDeviceExt = (AFSDeviceExt *)AFSDeviceObject->DeviceExtension;
     BOOLEAN bCompleteRequest = TRUE;
-
+    AFSFcb* pFcb = NULL;
     __Enter
     {
 
@@ -134,7 +140,10 @@ AFSCommonCleanup( IN PDEVICE_OBJECT DeviceObject,
 
         pFileObject = pIrpSp->FileObject;
 
-        if( pIrpSp->FileObject->FsContext == NULL)
+        pFcb = (AFSFcb*) pIrpSp->FileObject->FsContext;
+
+        if( pFcb == NULL ||
+            pFcb->Header.NodeTypeCode == AFS_REDIRECTOR_FCB)
         {
 
             //