/* FUNCTIONS ****************************************************************/
-#ifndef LIBCAPTIVE
-
VOID STDCALL
IopCloseFile(PVOID ObjectBody,
ULONG HandleCount)
DPRINT("IopCloseFile()\n");
- if (HandleCount > 0)
+ if (HandleCount > 0 || FileObject->DeviceObject == NULL)
{
return;
}
STANDARD_RIGHTS_REQUIRED,
IoFileObjectType,
UserMode);
-
+ KeResetEvent( &FileObject->Event );
+
Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLEANUP,
FileObject->DeviceObject,
NULL,
StackPtr->FileObject = FileObject;
Status = IoCallDriver(FileObject->DeviceObject, Irp);
+ if (Status == STATUS_PENDING)
+ {
+ KeWaitForSingleObject(&FileObject->Event, Executive, KernelMode, FALSE, NULL);
+ }
}
VOID STDCALL
NTSTATUS Status;
DPRINT("IopDeleteFile()\n");
+
+ if (FileObject->DeviceObject)
+ {
+ ObReferenceObjectByPointer(ObjectBody,
+ STANDARD_RIGHTS_REQUIRED,
+ IoFileObjectType,
+ UserMode);
- ObReferenceObjectByPointer(ObjectBody,
- STANDARD_RIGHTS_REQUIRED,
- IoFileObjectType,
- UserMode);
+ KeResetEvent( &FileObject->Event );
+ Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLOSE,
+ FileObject->DeviceObject,
+ NULL,
+ 0,
+ NULL,
+ NULL,
+ NULL);
+ StackPtr = IoGetNextIrpStackLocation(Irp);
+ StackPtr->FileObject = FileObject;
- Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLOSE,
- FileObject->DeviceObject,
- NULL,
- 0,
- NULL,
- NULL,
- NULL);
- StackPtr = IoGetNextIrpStackLocation(Irp);
- StackPtr->FileObject = FileObject;
-
- Status = IoCallDriver(FileObject->DeviceObject, Irp);
+ Status = IoCallDriver(FileObject->DeviceObject, Irp);
+ if (Status == STATUS_PENDING)
+ {
+ KeWaitForSingleObject(&FileObject->Event, Executive, KernelMode, FALSE, NULL);
+ }
+ }
if (FileObject->FileName.Buffer != NULL)
{
}
}
-#endif /* LIBCAPTIVE */
VOID IoInit (VOID)
{
IoFileObjectType->Mapping = &IopFileMapping;
IoFileObjectType->Dump = NULL;
IoFileObjectType->Open = NULL;
-#ifndef LIBCAPTIVE
IoFileObjectType->Close = IopCloseFile;
IoFileObjectType->Delete = IopDeleteFile;
-#else /* !LIBCAPTIVE */
- IoFileObjectType->Close = NULL;
- IoFileObjectType->Delete = NULL;
-#endif /* !LIBCAPTIVE */
IoFileObjectType->Parse = NULL;
IoFileObjectType->Security = NULL;
IoFileObjectType->QueryName = NULL;
#endif /* LIBCAPTIVE */
}
-#ifndef LIBCAPTIVE
PGENERIC_MAPPING STDCALL
IoGetFileObjectGenericMapping(VOID)
return(&IopFileMapping);
}
-#endif /* LIBCAPTIVE */
-
/* EOF */