3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/io/page.c
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
15 #include <internal/io.h>
18 #include <internal/debug.h>
20 /* FUNCTIONS *****************************************************************/
23 IoPageWrite(PFILE_OBJECT FileObject,
25 PLARGE_INTEGER Offset,
27 PIO_STATUS_BLOCK StatusBlock)
30 PIO_STACK_LOCATION StackPtr;
33 DPRINT("IoPageWrite(FileObject %x, Mdl %x)\n",
36 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_WRITE,
37 FileObject->DeviceObject,
45 return (STATUS_INSUFFICIENT_RESOURCES);
47 Irp->Flags = IRP_NOCACHE|IRP_PAGING_IO;
48 StackPtr = IoGetNextIrpStackLocation(Irp);
49 StackPtr->FileObject = FileObject;
50 DPRINT("Before IoCallDriver\n");
51 Status = IofCallDriver(FileObject->DeviceObject,Irp);
52 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);
57 IoPageRead(PFILE_OBJECT FileObject,
59 PLARGE_INTEGER Offset,
61 PIO_STATUS_BLOCK StatusBlock)
64 PIO_STACK_LOCATION StackPtr;
67 DPRINT("IoPageRead(FileObject %x, Mdl %x)\n",
70 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_READ,
71 FileObject->DeviceObject,
79 return (STATUS_INSUFFICIENT_RESOURCES);
81 Irp->Flags = IRP_NOCACHE
84 #else /* !LIBCAPTIVE */
85 /* IRP_SYNCHRONOUS_PAGING_IO: We need to prevent STATUS_PENDING
86 * IRP_PAGING_IO: We need to pass check in W32 filesystem as we are FO_CLEANUP_COMPLETE (why?)
88 |IRP_PAGING_IO|IRP_SYNCHRONOUS_PAGING_IO;
89 #endif /* !LIBCAPTIVE */
90 StackPtr = IoGetNextIrpStackLocation(Irp);
91 StackPtr->FileObject = FileObject;
92 DPRINT("Before IoCallDriver\n");
93 Status = IofCallDriver(FileObject->DeviceObject, Irp);
94 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);
100 IoSynchronousPageWrite (PFILE_OBJECT FileObject,
102 PLARGE_INTEGER Offset,
104 PIO_STATUS_BLOCK StatusBlock)
107 PIO_STACK_LOCATION StackPtr;
110 DPRINT("IoSynchronousPageWrite(FileObject %x, Mdl %x, StatusBlock %x)\n",
111 FileObject, Mdl, StatusBlock);
113 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_WRITE,
114 FileObject->DeviceObject,
122 return (STATUS_INSUFFICIENT_RESOURCES);
124 Irp->Flags = IRP_NOCACHE|IRP_PAGING_IO|IRP_SYNCHRONOUS_PAGING_IO;
125 StackPtr = IoGetNextIrpStackLocation(Irp);
126 StackPtr->FileObject = FileObject;
127 DPRINT("Before IoCallDriver\n");
128 Status = IofCallDriver(FileObject->DeviceObject,Irp);
129 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);