KD System Rewrite:
[reactos.git] / reactos / ntoskrnl / io / page.c
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/io/page.c
6 * PURPOSE: No purpose listed.
7 *
8 * PROGRAMMERS: No programmer listed.
9 */
10
11 /* INCLUDES *****************************************************************/
12
13 #include <ntoskrnl.h>
14 #define NDEBUG
15 #include <internal/debug.h>
16
17 /* FUNCTIONS *****************************************************************/
18
19 NTSTATUS STDCALL
20 IoPageWrite(PFILE_OBJECT FileObject,
21 PMDL Mdl,
22 PLARGE_INTEGER Offset,
23 PKEVENT Event,
24 PIO_STATUS_BLOCK StatusBlock)
25 {
26 PIRP Irp;
27 PIO_STACK_LOCATION StackPtr;
28 NTSTATUS Status;
29
30 DPRINT("IoPageWrite(FileObject %x, Mdl %x)\n",
31 FileObject, Mdl);
32
33 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_WRITE,
34 FileObject->DeviceObject,
35 Mdl,
36 Offset,
37 Event,
38 StatusBlock,
39 TRUE);
40 if (Irp == NULL)
41 {
42 return (STATUS_INSUFFICIENT_RESOURCES);
43 }
44 Irp->Flags = IRP_NOCACHE|IRP_PAGING_IO;
45 StackPtr = IoGetNextIrpStackLocation(Irp);
46 StackPtr->FileObject = FileObject;
47 StackPtr->Parameters.Write.Length = MmGetMdlByteCount(Mdl);
48 DPRINT("Before IoCallDriver\n");
49 Status = IofCallDriver(FileObject->DeviceObject,Irp);
50 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);
51 return(Status);
52 }
53
54
55 /*
56 * @implemented
57 */
58 NTSTATUS STDCALL
59 IoPageRead(PFILE_OBJECT FileObject,
60 PMDL Mdl,
61 PLARGE_INTEGER Offset,
62 PKEVENT Event,
63 PIO_STATUS_BLOCK StatusBlock)
64 {
65 PIRP Irp;
66 PIO_STACK_LOCATION StackPtr;
67 NTSTATUS Status;
68
69 DPRINT("IoPageRead(FileObject %x, Mdl %x)\n",
70 FileObject, Mdl);
71
72 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_READ,
73 FileObject->DeviceObject,
74 Mdl,
75 Offset,
76 Event,
77 StatusBlock,
78 TRUE);
79 if (Irp == NULL)
80 {
81 return (STATUS_INSUFFICIENT_RESOURCES);
82 }
83 Irp->Flags = IRP_NOCACHE|IRP_PAGING_IO;
84 StackPtr = IoGetNextIrpStackLocation(Irp);
85 StackPtr->FileObject = FileObject;
86 StackPtr->Parameters.Read.Length = MmGetMdlByteCount(Mdl);
87 DPRINT("Before IoCallDriver\n");
88 Status = IofCallDriver(FileObject->DeviceObject, Irp);
89 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);
90
91 return(Status);
92 }
93
94
95 /*
96 * @implemented
97 */
98 NTSTATUS STDCALL
99 IoSynchronousPageWrite (PFILE_OBJECT FileObject,
100 PMDL Mdl,
101 PLARGE_INTEGER Offset,
102 PKEVENT Event,
103 PIO_STATUS_BLOCK StatusBlock)
104 {
105 PIRP Irp;
106 PIO_STACK_LOCATION StackPtr;
107 NTSTATUS Status;
108
109 DPRINT("IoSynchronousPageWrite(FileObject %x, Mdl %x)\n",
110 FileObject, Mdl);
111
112 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_WRITE,
113 FileObject->DeviceObject,
114 Mdl,
115 Offset,
116 Event,
117 StatusBlock,
118 TRUE);
119 if (Irp == NULL)
120 {
121 return (STATUS_INSUFFICIENT_RESOURCES);
122 }
123 Irp->Flags = IRP_NOCACHE|IRP_PAGING_IO|IRP_SYNCHRONOUS_PAGING_IO;
124 StackPtr = IoGetNextIrpStackLocation(Irp);
125 StackPtr->FileObject = FileObject;
126 StackPtr->Parameters.Write.Length = MmGetMdlByteCount(Mdl);
127 DPRINT("Before IoCallDriver\n");
128 Status = IofCallDriver(FileObject->DeviceObject,Irp);
129 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);
130 return(Status);
131 }
132
133
134 /* EOF */