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