Beispiel #1
0
NTSTATUS
NTAPI
NtfsFsdRead(PDEVICE_OBJECT DeviceObject,
            PIRP Irp)
{
    PDEVICE_EXTENSION DeviceExt;
    PIO_STACK_LOCATION Stack;
    PFILE_OBJECT FileObject;
    PVOID Buffer;
    ULONG ReadLength;
    LARGE_INTEGER ReadOffset;
    ULONG ReturnedReadLength = 0;
    NTSTATUS Status = STATUS_SUCCESS;

    DPRINT("NtfsRead(DeviceObject %x, Irp %x)\n",DeviceObject,Irp);

    DeviceExt = DeviceObject->DeviceExtension;
    Stack = IoGetCurrentIrpStackLocation(Irp);
    FileObject = Stack->FileObject;

    ReadLength = Stack->Parameters.Read.Length;
    ReadOffset = Stack->Parameters.Read.ByteOffset;
    Buffer = MmGetSystemAddressForMdl(Irp->MdlAddress);

    Status = NtfsReadFile(DeviceExt,
                          FileObject,
                          Buffer,
                          ReadLength,
                          ReadOffset.u.LowPart,
                          Irp->Flags,
                          &ReturnedReadLength);
    if (NT_SUCCESS(Status))
    {
        if (FileObject->Flags & FO_SYNCHRONOUS_IO)
        {
            FileObject->CurrentByteOffset.QuadPart =
                ReadOffset.QuadPart + ReturnedReadLength;
        }

        Irp->IoStatus.Information = ReturnedReadLength;
    }
    else
    {
        Irp->IoStatus.Information = 0;
    }

    Irp->IoStatus.Status = Status;
    IoCompleteRequest(Irp,IO_NO_INCREMENT);

    return Status;
}
Beispiel #2
0
//Implementation of DeviceRead routine.
static DWORD NtfsDeviceRead(__COMMON_OBJECT* pDrv,__COMMON_OBJECT* pDev,__DRCB* pDrcb)
{
	__NTFS_FILE_OBJECT*     pFileObject      = NULL;
	BYTE*                   pBuffer          = NULL;
	UINT_32                 toReadSize       = 0;
	UINT_32                 ReadSize         = 0;

	if((NULL == pDev) || (NULL == pDrcb))
	{
		return 0;
	}
	pFileObject = (__NTFS_FILE_OBJECT*)((__DEVICE_OBJECT*)pDev)->lpDevExtension;
	toReadSize  = pDrcb->dwOutputLen;
	pBuffer     = (BYTE*)pDrcb->lpOutputBuffer;
	if(NtfsReadFile(pFileObject,pBuffer,toReadSize,&ReadSize,NULL))
	{
		return ReadSize;
	}
	else
	{
		return 0;
	}
}