2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Ancillary Function Driver
5 * PURPOSE: File object read/write functions
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * CSH 01/09-2000 Created
13 PDEVICE_EXTENSION DeviceExt
,
14 PFILE_OBJECT FileObject
,
19 * FUNCTION: Reads data from a file
24 return STATUS_UNSUCCESSFUL
;
31 PDEVICE_OBJECT DeviceObject
,
37 Irp
->IoStatus
.Status
= STATUS_UNSUCCESSFUL
;
38 Irp
->IoStatus
.Information
= 0;
39 return STATUS_UNSUCCESSFUL
;
41 PDEVICE_EXTENSION DeviceExt
= DeviceObject
->DeviceExtension
;
42 PIO_STACK_LOCATION IoSp
= IoGetCurrentIrpStackLocation(Irp
);
43 PFILE_OBJECT FileObject
= IoSp
->FileObject
;
49 Length
= IoSp
->Parameters
.Read
.Length
;
50 Buffer
= MmGetSystemAddressForMdl(Irp
->MdlAddress
);
51 Offset
= IoSp
->Parameters
.Read
.ByteOffset
.u
.LowPart
;
53 Status
= AfdReadFile(DeviceExt
, FileObject
, Buffer
, Length
, Offset
);
55 Irp
->IoStatus
.Status
= Status
;
56 Irp
->IoStatus
.Information
= Length
;
57 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
66 PDEVICE_OBJECT DeviceObject
,
69 PDEVICE_EXTENSION DeviceExt
= DeviceObject
->DeviceExtension
;
70 PIO_STACK_LOCATION IoSp
= IoGetCurrentIrpStackLocation(Irp
);
71 PFILE_OBJECT FileObject
= IoSp
->FileObject
;
79 FCB
= FileObject
->FsContext
;
80 CCB
= FileObject
->FsContext2
;
85 Length
= IoSp
->Parameters
.Write
.Length
;
86 Buffer
= MmGetSystemAddressForMdl(Irp
->MdlAddress
);
87 Offset
= IoSp
->Parameters
.Write
.ByteOffset
.u
.LowPart
;
89 AFD_DbgPrint(MAX_TRACE
, ("Called. Length (%d) Buffer (0x%X) Offset (0x%X)\n",
90 Length
, Buffer
, Offset
));
92 assert((FCB
->SocketType
== SOCK_STREAM
) || (FCB
->SocketType
== SOCK_DGRAM
));
94 switch (FCB
->SocketType
) {
96 /* FIXME: Support connectionful communication */
99 /* Connectionless communication */
100 //Status = TdiSendDatagram(FCB->TdiAddressObject, WH2N(2000), 0x7F000001, Buffer, Length);
101 //if (!NT_SUCCESS(Status)) {
106 /* FIXME: Support raw communication */
110 Irp
->IoStatus
.Status
= Status
;
111 Irp
->IoStatus
.Information
= Length
;
112 IoCompleteRequest(Irp
, IO_NO_INCREMENT
);
114 AFD_DbgPrint(MAX_TRACE
, ("Leaving.\n"));