*
* REVISIONS
*
+ * @implemented
*/
NTSTATUS STDCALL NtReadFile(HANDLE FileHandle,
HANDLE EventHandle,
ObDereferenceObject(FileObject);
return(Status);
}
+
}
else
{
ByteOffset,
Event,
IoStatusBlock);
+
+ //trigger FileObject/Event dereferencing
+ Irp->Tail.Overlay.OriginalFileObject = FileObject;
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
StackPtr->Parameters.Read.Key = 0;
}
+
Status = IoCallDriver(FileObject->DeviceObject, Irp);
if (Status == STATUS_PENDING && FileObject->Flags & FO_SYNCHRONOUS_IO)
{
/* Wait failed. */
return(Status);
}
+
Status = Iosb.Status;
return(Status);
}
+
if (FileObject->Flags & FO_SYNCHRONOUS_IO)
{
*UserIoStatusBlock = Iosb;
*
* REVISIONS
*
+ * @implemented
*/
NTSTATUS STDCALL NtWriteFile(HANDLE FileHandle,
HANDLE EventHandle,
PKEVENT Event = NULL;
IO_STATUS_BLOCK Iosb;
PIO_STATUS_BLOCK IoStatusBlock;
-
+
DPRINT("NtWriteFile(FileHandle %x Buffer %x Length %x ByteOffset %x, "
"IoStatusBlock %x)\n", FileHandle, Buffer, Length, ByteOffset,
IoStatusBlock);
ObDereferenceObject(FileObject);
return(Status);
}
+
}
else
{
Event,
IoStatusBlock);
+ //trigger FileObject/Event dereferencing
+ Irp->Tail.Overlay.OriginalFileObject = FileObject;
+
Irp->Overlay.AsynchronousParameters.UserApcRoutine = ApcRoutine;
Irp->Overlay.AsynchronousParameters.UserApcContext = ApcContext;
{
StackPtr->Parameters.Write.Key = 0;
}
-
+
Status = IoCallDriver(FileObject->DeviceObject, Irp);
if (Status == STATUS_PENDING && FileObject->Flags & FO_SYNCHRONOUS_IO)
{
/* Wait failed. */
return(Status);
}
+
Status = Iosb.Status;
return(Status);
}
+
if (FileObject->Flags & FO_SYNCHRONOUS_IO)
{
*UserIoStatusBlock = Iosb;
* RETURN VALUE
*
* REVISIONS
- *
*/
NTSTATUS
STDCALL
* RETURN VALUE
*
* REVISIONS
- *
*/
NTSTATUS
STDCALL