write.c revision 78a072e1b56619e3230735ae073668311232ec94
/*++
Copyright (c) 1989 - 1999 Microsoft Corporation
Module Name:
Abstract:
This module implements the mini redirector call down routines pertaining
to write of file system objects.
--*/
#include "precomp.h"
#include "rdbss_vbox.h"
#pragma hdrstop
static NTSTATUS
/*++
Routine Description:
This routine opens a file across the network.
Arguments:
RxContext - the RDBSS context
Return Value:
RXSTATUS - The return status for the operation
--*/
{
#ifndef VBOX
#endif
&&
)
)
||
(
&&
)
);
if ( OriginalDataMdl == NULL
{
AssertFailed();
return STATUS_INVALID_PARAMETER;
}
//
// Lengths that are not sector aligned will be rounded up to
// the next sector boundary. The rounded up length should be
// < AllocationSize.
//
/* @todo async io !!!! */
if( SynchronousIo )
{
int vboxRC;
#ifdef VBOX_FAKE_IO_READ_WRITE
#else
vboxRC = vboxCallWrite(&pDeviceExtension->hgcmClient, &pNetRootExtension->map, pVBoxFobx->hFile, ByteOffset, &ByteCount, (uint8_t *)pbUserBuffer, true /* locked */);
#endif
if (Status != STATUS_SUCCESS)
ByteCount = 0; /* Nothing written */
Log(("VBOXSF: VBoxMRxWrite: This I/O is sync!\n"));
/* Never call RxLowIoCompletion here!! */
}
else {
Log(("VBOXSF: VBoxMRxWrite: This I/O is async!\n"));
}
Log(("VBOXSF: VBoxMRxWrite: Status = %x, Info = %x\n",RxContext->IoStatusBlock.Status,RxContext->IoStatusBlock.Information));
#ifndef VBOX
Exit:
#endif
return(Status);
}
{
Log(("VBOXSF: VBoxMRxWriteWorker: calling the worker\n"));
}
#ifdef VBOX_ASYNC_RW
{
if (Status == STATUS_SUCCESS)
{
}
return Status;
}
#else
{
}
#endif /* !VBOX_ASYNC_RW */