-/* $Id: file.c,v 1.26 2003/07/11 01:23:14 royce Exp $
+/* $Id: file.c,v 1.27 2003/11/08 07:42:10 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
PDEVICE_OBJECT DeviceObject;
PIO_STACK_LOCATION StackPtr;
PVOID SystemBuffer;
- IO_STATUS_BLOCK IoSB;
assert(IoStatusBlock != NULL);
assert(FileInformation != NULL);
return(STATUS_INSUFFICIENT_RESOURCES);
}
- //trigger FileObject/Event dereferencing
+ /* Trigger FileObject/Event dereferencing */
Irp->Tail.Overlay.OriginalFileObject = FileObject;
Irp->AssociatedIrp.SystemBuffer = SystemBuffer;
- Irp->UserIosb = &IoSB;
+ Irp->UserIosb = IoStatusBlock;
Irp->UserEvent = &FileObject->Event;
KeResetEvent( &FileObject->Event );
Status = IoCallDriver(FileObject->DeviceObject,
Irp);
- if (Status==STATUS_PENDING && !(FileObject->Flags & FO_SYNCHRONOUS_IO))
+ if (Status == STATUS_PENDING && (FileObject->Flags & FO_SYNCHRONOUS_IO))
{
KeWaitForSingleObject(&FileObject->Event,
Executive,
KernelMode,
FALSE,
NULL);
- Status = IoSB.Status;
+ Status = IoStatusBlock->Status;
}
- if (IoStatusBlock)
- {
- *IoStatusBlock = IoSB;
- }
if (NT_SUCCESS(Status))
{
SystemBuffer,
IoStatusBlock->Information);
}
-
- ExFreePool(SystemBuffer);
- return(Status);
+
+ ExFreePool(SystemBuffer);
+
+ return Status;
}
return STATUS_INSUFFICIENT_RESOURCES;
}
- //trigger FileObject/Event dereferencing
+ /* Trigger FileObject/Event dereferencing */
Irp->Tail.Overlay.OriginalFileObject = FileObject;
Irp->AssociatedIrp.SystemBuffer = FileInformation;
Status = IoCallDriver(FileObject->DeviceObject,
Irp);
- if (Status==STATUS_PENDING && !(FileObject->Flags & FO_SYNCHRONOUS_IO))
+ if (Status==STATUS_PENDING && (FileObject->Flags & FO_SYNCHRONOUS_IO))
{
KeWaitForSingleObject(&FileObject->Event,
Executive,
PIRP Irp;
NTSTATUS Status;
PVOID SystemBuffer;
- IO_STATUS_BLOCK IoSB;
assert(IoStatusBlock != NULL)
assert(FileInformation != NULL)
DPRINT("FileObject %x\n", FileObject);
- //io completion port?
+ /* io completion port? */
if (FileInformationClass == FileCompletionInformation)
{
PKQUEUE Queue;
NULL);
if (NT_SUCCESS(Status))
{
- //FIXME: maybe use lookaside list
+ /* FIXME: maybe use lookaside list */
FileObject->CompletionContext = ExAllocatePool(NonPagedPool, sizeof(IO_COMPLETION_CONTEXT));
FileObject->CompletionContext->Key = ((PFILE_COMPLETION_INFORMATION)FileInformation)->CompletionKey;
FileObject->CompletionContext->Port = Queue;
FileInformation,
Length);
- //trigger FileObject/Event dereferencing
+ /* Trigger FileObject/Event dereferencing */
Irp->Tail.Overlay.OriginalFileObject = FileObject;
Irp->AssociatedIrp.SystemBuffer = SystemBuffer;
- Irp->UserIosb = &IoSB;
+ Irp->UserIosb = IoStatusBlock;
Irp->UserEvent = &FileObject->Event;
KeResetEvent( &FileObject->Event );
DPRINT("FileObject->DeviceObject %x\n", FileObject->DeviceObject);
Status = IoCallDriver(FileObject->DeviceObject,
Irp);
- if (Status == STATUS_PENDING && !(FileObject->Flags & FO_SYNCHRONOUS_IO))
+ if (Status == STATUS_PENDING && (FileObject->Flags & FO_SYNCHRONOUS_IO))
{
KeWaitForSingleObject(&FileObject->Event,
Executive,
KernelMode,
FALSE,
NULL);
- Status = IoSB.Status;
- }
- if (IoStatusBlock)
- {
- *IoStatusBlock = IoSB;
+ Status = IoStatusBlock->Status;
}
+
ExFreePool(SystemBuffer);
-
+
return Status;
}