+IoCreateStreamFileObjectLite() by IoCreateStreamFileObject() wrapper
authorshort <>
Tue, 25 Mar 2003 00:33:49 +0000 (00:33 +0000)
committershort <>
Tue, 25 Mar 2003 00:33:49 +0000 (00:33 +0000)
 - 'Lite' version detection by IoCreateStreamFileObjectLite_is_owner()
 - cleanup of 'Lite' flag by IoCreateStreamFileObjectLite_remove()

ntoskrnl/io/iomgr.c

index 40afb04..848be7b 100644 (file)
@@ -45,6 +45,8 @@ static GENERIC_MAPPING IopFileMapping = {FILE_GENERIC_READ,
 
 /* FUNCTIONS ****************************************************************/
 
+extern BOOLEAN IoCreateStreamFileObjectLite_is_owner(FILE_OBJECT *FileObject);
+
 VOID STDCALL
 IopCloseFile(PVOID ObjectBody,
             ULONG HandleCount)
@@ -67,6 +69,11 @@ IopCloseFile(PVOID ObjectBody,
                              UserMode);
    KeResetEvent( &FileObject->Event );
   
+   if (IoCreateStreamFileObjectLite_is_owner(FileObject))
+     {
+       return;
+     }
+
    Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLEANUP,
                                      FileObject->DeviceObject,
                                      NULL,
@@ -84,6 +91,9 @@ IopCloseFile(PVOID ObjectBody,
    }
 }
 
+extern BOOLEAN IoCreateStreamFileObjectLite_is_owner(FILE_OBJECT *FileObject);
+extern void IoCreateStreamFileObjectLite_remove(FILE_OBJECT *FileObject);
+
 VOID STDCALL
 IopDeleteFile(PVOID ObjectBody)
 {
@@ -124,6 +134,11 @@ IopDeleteFile(PVOID ObjectBody)
        ExFreePool(FileObject->FileName.Buffer);
        FileObject->FileName.Buffer = 0;
      }
+
+   if (IoCreateStreamFileObjectLite_is_owner(FileObject))
+     {
+       IoCreateStreamFileObjectLite_remove(FileObject);
+     }
 }