c3e5f3e80e82879dbdedfb2255e20365903d2053
[reactos.git] / 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 <ddk/ntddk.h>
15 #include <internal/io.h>
16
17 #define NDEBUG
18 #include <internal/debug.h>
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 */