2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/kernel32/file/rw.c
5 * PURPOSE: Read/write functions
6 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
11 /* INCLUDES ****************************************************************/
14 #include <ddk/ntddk.h>
19 #include <kernel32/kernel32.h>
21 /* FUNCTIONS ****************************************************************/
23 WINBOOL STDCALL
WriteFile(HANDLE hFile
,
25 DWORD nNumberOfBytesToWrite
,
26 LPDWORD lpNumberOfBytesWritten
,
27 LPOVERLAPPED lpOverLapped
)
32 IO_STATUS_BLOCK IIosb
;
33 PIO_STATUS_BLOCK IoStatusBlock
;
34 PLARGE_INTEGER ptrOffset
;
36 DPRINT("WriteFile(hFile %x)\n",hFile
);
38 if (lpOverLapped
!= NULL
)
40 Offset
.u
.LowPart
= lpOverLapped
->Offset
;
41 Offset
.u
.HighPart
= lpOverLapped
->OffsetHigh
;
42 lpOverLapped
->Internal
= STATUS_PENDING
;
43 hEvent
= lpOverLapped
->hEvent
;
44 IoStatusBlock
= (PIO_STATUS_BLOCK
)lpOverLapped
;
50 IoStatusBlock
= &IIosb
;
54 errCode
= NtWriteFile(hFile
,
60 nNumberOfBytesToWrite
,
63 if (!NT_SUCCESS(errCode
))
65 SetLastError(RtlNtStatusToDosError(errCode
));
66 DPRINT("WriteFile() failed\n");
69 if (lpNumberOfBytesWritten
!= NULL
)
71 *lpNumberOfBytesWritten
= IoStatusBlock
->Information
;
73 DPRINT("WriteFile() succeeded\n");
77 WINBOOL STDCALL
KERNEL32_ReadFile(HANDLE hFile
,
79 DWORD nNumberOfBytesToRead
,
80 LPDWORD lpNumberOfBytesRead
,
81 LPOVERLAPPED lpOverLapped
,
82 LPOVERLAPPED_COMPLETION_ROUTINE
88 IO_STATUS_BLOCK IIosb
;
89 PIO_STATUS_BLOCK IoStatusBlock
;
90 PLARGE_INTEGER ptrOffset
;
92 if (lpOverLapped
!= NULL
)
94 Offset
.u
.LowPart
= lpOverLapped
->Offset
;
95 Offset
.u
.HighPart
= lpOverLapped
->OffsetHigh
;
96 lpOverLapped
->Internal
= STATUS_PENDING
;
97 hEvent
= lpOverLapped
->hEvent
;
98 IoStatusBlock
= (PIO_STATUS_BLOCK
)lpOverLapped
;
104 IoStatusBlock
= &IIosb
;
107 errCode
= NtReadFile(hFile
,
109 (PIO_APC_ROUTINE
)lpCompletionRoutine
,
113 nNumberOfBytesToRead
,
117 if (errCode
!= STATUS_PENDING
&& lpNumberOfBytesRead
!= NULL
)
119 *lpNumberOfBytesRead
= IoStatusBlock
->Information
;
122 if (!NT_SUCCESS(errCode
))
124 SetLastError(RtlNtStatusToDosError(errCode
));
130 WINBOOL STDCALL
ReadFile(HANDLE hFile
,
132 DWORD nNumberOfBytesToRead
,
133 LPDWORD lpNumberOfBytesRead
,
134 LPOVERLAPPED lpOverLapped
)
136 return(KERNEL32_ReadFile(hFile
,
138 nNumberOfBytesToRead
,
144 WINBOOL STDCALL
ReadFileEx(HANDLE hFile
,
146 DWORD nNumberOfBytesToRead
,
147 LPOVERLAPPED lpOverLapped
,
148 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
)
150 return(KERNEL32_ReadFile(hFile
,
152 nNumberOfBytesToRead
,
155 lpCompletionRoutine
));