Began seperation of machine-dependant/independant sections of memory
[reactos.git] / reactos / ntoskrnl / io / page.c
1 /* $Id: page.c,v 1.8 2000/04/07 02:23:59 dwelch Exp $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/ke/bug.c
6 * PURPOSE: Graceful system shutdown if a bug is detected
7 * PROGRAMMER: David Welch (welch@mcmail.com)
8 * UPDATE HISTORY:
9 * Created 22/05/98
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 IoPageRead(PFILE_OBJECT FileObject,
23 PMDL Mdl,
24 PLARGE_INTEGER Offset,
25 PIO_STATUS_BLOCK StatusBlock)
26 {
27 PIRP Irp;
28 KEVENT Event;
29 PIO_STACK_LOCATION StackPtr;
30 NTSTATUS Status;
31
32 DPRINT("IoPageRead(FileObject %x, Mdl %x)\n",
33 FileObject, Mdl);
34
35 ObReferenceObjectByPointer(FileObject,
36 STANDARD_RIGHTS_REQUIRED,
37 IoFileObjectType,
38 UserMode);
39
40 KeInitializeEvent(&Event,NotificationEvent,FALSE);
41 Irp = IoBuildSynchronousFsdRequestWithMdl(IRP_MJ_READ,
42 FileObject->DeviceObject,
43 Mdl,
44 Offset,
45 &Event,
46 StatusBlock);
47 StackPtr = IoGetNextIrpStackLocation(Irp);
48 StackPtr->FileObject = FileObject;
49 DPRINT("Before IoCallDriver\n");
50 Status = IoCallDriver(FileObject->DeviceObject,Irp);
51 DPRINT("Status %d STATUS_PENDING %d\n",Status,STATUS_PENDING);
52 if (Status==STATUS_PENDING && (FileObject->Flags & FO_SYNCHRONOUS_IO))
53 {
54 DPRINT("Waiting for io operation\n");
55 if (FileObject->Flags & FO_ALERTABLE_IO)
56 {
57 KeWaitForSingleObject(&Event,Executive,KernelMode,TRUE,NULL);
58 }
59 else
60 {
61 DPRINT("Non-alertable wait\n");
62 KeWaitForSingleObject(&Event,Executive,KernelMode,FALSE,NULL);
63 }
64 Status = StatusBlock->Status;
65 }
66 return(Status);
67 }
68
69
70 NTSTATUS STDCALL IoSynchronousPageWrite (DWORD Unknown0,
71 DWORD Unknown1,
72 DWORD Unknown2,
73 DWORD Unknown3,
74 DWORD Unknown4)
75 {
76 UNIMPLEMENTED;
77 return (STATUS_NOT_IMPLEMENTED);
78 }
79
80
81 /* EOF */