Use free Windows DDK and compile with latest MinGW releases.
[reactos.git] / reactos / ntoskrnl / io / page.c
1 /* $Id: page.c,v 1.18 2002/09/07 15:12:53 chorns Exp $
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
16 #define NDEBUG
17 #include <internal/debug.h>
18
19
20 /* FUNCTIONS *****************************************************************/
21
22 NTSTATUS STDCALL
23 IoPageWrite(PFILE_OBJECT FileObject,
24 PMDL Mdl,
25 PLARGE_INTEGER Offset,
26 PKEVENT Event,
27 PIO_STATUS_BLOCK StatusBlock)
28 {
29 PIRP Irp;
30 PIO_STACK_LOCATION StackPtr;
31 NTSTATUS Status;
32
33 DPRINT("IoPageWrite(FileObject %x, Mdl %x)\n",
34 FileObject, Mdl);
35
36 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_WRITE,
37 FileObject->DeviceObject,
38 Mdl,
39 Offset,
40 Event,
41 StatusBlock,
42 TRUE);
43 if (Irp == NULL)
44 {
45 return (STATUS_INSUFFICIENT_RESOURCES);
46 }
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);
53 return(Status);
54 }
55
56
57 NTSTATUS STDCALL
58 IoPageRead(PFILE_OBJECT FileObject,
59 PMDL Mdl,
60 PLARGE_INTEGER Offset,
61 PKEVENT Event,
62 PIO_STATUS_BLOCK StatusBlock)
63 {
64 PIRP Irp;
65 PIO_STACK_LOCATION StackPtr;
66 NTSTATUS Status;
67
68 DPRINT("IoPageRead(FileObject %x, Mdl %x)\n",
69 FileObject, Mdl);
70
71 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_READ,
72 FileObject->DeviceObject,
73 Mdl,
74 Offset,
75 Event,
76 StatusBlock,
77 TRUE);
78 if (Irp == NULL)
79 {
80 return (STATUS_INSUFFICIENT_RESOURCES);
81 }
82 Irp->Flags = IRP_NOCACHE|IRP_PAGING_IO;
83 StackPtr = IoGetNextIrpStackLocation(Irp);
84 StackPtr->FileObject = FileObject;
85 DPRINT("Before IoCallDriver\n");
86 Status = IofCallDriver(FileObject->DeviceObject, Irp);
87 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);
88
89 return(Status);
90 }
91
92
93 NTSTATUS STDCALL
94 IoSynchronousPageWrite (PFILE_OBJECT FileObject,
95 PMDL Mdl,
96 PLARGE_INTEGER Offset,
97 PKEVENT Event,
98 PIO_STATUS_BLOCK StatusBlock)
99 {
100 PIRP Irp;
101 PIO_STACK_LOCATION StackPtr;
102 NTSTATUS Status;
103
104 DPRINT("IoSynchronousPageWrite(FileObject %x, Mdl %x)\n",
105 FileObject, Mdl);
106
107 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_WRITE,
108 FileObject->DeviceObject,
109 Mdl,
110 Offset,
111 Event,
112 StatusBlock,
113 TRUE);
114 if (Irp == NULL)
115 {
116 return (STATUS_INSUFFICIENT_RESOURCES);
117 }
118 Irp->Flags = IRP_NOCACHE|IRP_PAGING_IO|IRP_SYNCHRONOUS_PAGING_IO;
119 StackPtr = IoGetNextIrpStackLocation(Irp);
120 StackPtr->FileObject = FileObject;
121 DPRINT("Before IoCallDriver\n");
122 Status = IofCallDriver(FileObject->DeviceObject,Irp);
123 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);
124 return(Status);
125 }
126
127
128 /* EOF */