ReactOS 0.4.16-dev-2522-g97cc325
rw.c File Reference
#include <k32.h>
#include <debug.h>
Include dependency graph for rw.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

 DEBUG_CHANNEL (kernel32file)
 
BOOL WINAPI WriteFile (IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
 
BOOL WINAPI ReadFile (IN HANDLE hFile, IN LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead, OUT LPDWORD lpNumberOfBytesRead OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
 
VOID WINAPI ApcRoutine (PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved)
 
BOOL WINAPI WriteFileEx (IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, IN LPOVERLAPPED lpOverlapped, IN LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
 
BOOL WINAPI ReadFileEx (IN HANDLE hFile, IN LPVOID lpBuffer, IN DWORD nNumberOfBytesToRead OPTIONAL, IN LPOVERLAPPED lpOverlapped, IN LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
 
BOOL WINAPI ReadFileScatter (HANDLE hFile, FILE_SEGMENT_ELEMENT aSegmentArray[], DWORD nNumberOfBytesToRead, LPDWORD lpReserved, LPOVERLAPPED lpOverlapped)
 
BOOL WINAPI WriteFileGather (HANDLE hFile, FILE_SEGMENT_ELEMENT aSegmentArray[], DWORD nNumberOfBytesToWrite, LPDWORD lpReserved, LPOVERLAPPED lpOverlapped)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 14 of file rw.c.

Function Documentation

◆ ApcRoutine()

VOID WINAPI ApcRoutine ( PVOID  ApcContext,
PIO_STATUS_BLOCK  IoStatusBlock,
ULONG  Reserved 
)

Definition at line 239 of file rw.c.

242{
243 DWORD dwErrorCode;
244 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine =
246
248 lpCompletionRoutine(dwErrorCode,
251}
unsigned long DWORD
Definition: ntddk_ex.h:95
VOID(WINAPI * LPOVERLAPPED_COMPLETION_ROUTINE)(_In_ DWORD dwErrorCode, _In_ DWORD dwNumberOfBytesTransfered, _Inout_ LPOVERLAPPED lpOverlapped)
Definition: minwinbase.h:386
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID ApcContext
Definition: iofuncs.h:727
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)

◆ DEBUG_CHANNEL()

DEBUG_CHANNEL ( kernel32file  )

◆ ReadFile()

BOOL WINAPI ReadFile ( IN HANDLE  hFile,
IN LPVOID  lpBuffer,
IN DWORD  nNumberOfBytesToRead,
OUT LPDWORD lpNumberOfBytesRead  OPTIONAL,
IN LPOVERLAPPED lpOverlapped  OPTIONAL 
)

Definition at line 121 of file rw.c.

126{
128
129 TRACE("ReadFile(hFile %p)\n", hFile);
130
131 if (lpNumberOfBytesRead != NULL) *lpNumberOfBytesRead = 0;
132
134
136 {
138 lpBuffer,
139 nNumberOfBytesToRead,
140 lpNumberOfBytesRead,
141 NULL))
142 {
143 DWORD dwMode;
144 GetConsoleMode(hFile, &dwMode);
145 if ((dwMode & ENABLE_PROCESSED_INPUT) && *(PCHAR)lpBuffer == 0x1a)
146 {
147 /* EOF character entered; simulate end-of-file */
148 *lpNumberOfBytesRead = 0;
149 }
150 return TRUE;
151 }
152 return FALSE;
153 }
154
155 if (lpOverlapped != NULL)
156 {
159
160 Offset.u.LowPart = lpOverlapped->Offset;
161 Offset.u.HighPart = lpOverlapped->OffsetHigh;
162 lpOverlapped->Internal = STATUS_PENDING;
163 ApcContext = (((ULONG_PTR)lpOverlapped->hEvent & 0x1) ? NULL : lpOverlapped);
164
166 lpOverlapped->hEvent,
167 NULL,
170 lpBuffer,
171 nNumberOfBytesToRead,
172 &Offset,
173 NULL);
174
175 /* return FALSE in case of failure and pending operations! */
177 {
178 if (Status == STATUS_END_OF_FILE && lpNumberOfBytesRead != NULL)
179 *lpNumberOfBytesRead = 0;
180
182 return FALSE;
183 }
184
185 if (lpNumberOfBytesRead != NULL)
186 *lpNumberOfBytesRead = lpOverlapped->InternalHigh;
187 }
188 else
189 {
191
193 NULL,
194 NULL,
195 NULL,
196 &Iosb,
197 lpBuffer,
198 nNumberOfBytesToRead,
199 NULL,
200 NULL);
201
202 /* Wait in case operation is pending */
203 if (Status == STATUS_PENDING)
204 {
206 if (NT_SUCCESS(Status)) Status = Iosb.Status;
207 }
208
210 {
211 /*
212 * lpNumberOfBytesRead must not be NULL here, in fact Win doesn't
213 * check that case either and crashes (only after the operation
214 * completed).
215 */
216 *lpNumberOfBytesRead = 0;
217 return TRUE;
218 }
219
220 /*
221 * lpNumberOfBytesRead must not be NULL here, in fact Win doesn't
222 * check that case either and crashes (only after the operation
223 * completed).
224 */
225 *lpNumberOfBytesRead = Iosb.Information;
226
227 if (!NT_SUCCESS(Status))
228 {
230 return FALSE;
231 }
232 }
233
234 TRACE("ReadFile() succeeded\n");
235 return TRUE;
236}
LONG NTSTATUS
Definition: precomp.h:26
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
BOOL WINAPI GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode)
Definition: console.c:1571
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleA(IN HANDLE hConsoleInput, OUT LPVOID lpBuffer, IN DWORD nNumberOfCharsToRead, OUT LPDWORD lpNumberOfCharsRead, IN PCONSOLE_READCONSOLE_CONTROL pInputControl OPTIONAL)
Definition: readwrite.c:1195
HANDLE TranslateStdHandle(IN HANDLE hHandle)
Definition: handle.c:19
return Iosb
Definition: create.c:4403
#define ULONG_PTR
Definition: config.h:101
Status
Definition: gdiplustypes.h:25
_In_ HANDLE hFile
Definition: mswsock.h:90
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED lpOverlapped
Definition: mswsock.h:93
_Out_ LPWSTR lpBuffer
Definition: netsh.h:68
NTSYSAPI NTSTATUS NTAPI NtWaitForSingleObject(IN HANDLE hObject, IN BOOLEAN bAlertable, IN PLARGE_INTEGER Timeout)
_In_ ULONG _In_ ULONG Offset
Definition: ntddpcm.h:101
DWORD BaseSetLastNTError(IN NTSTATUS Status)
Definition: reactos.cpp:167
#define IsConsoleHandle(h)
Definition: console.h:14
#define STATUS_END_OF_FILE
Definition: shellext.h:67
NTSTATUS NTAPI NtReadFile(HANDLE FileHandle, HANDLE Event, PIO_APC_ROUTINE ApcRoutine, PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length, PLARGE_INTEGER ByteOffset, PULONG Key)
#define TRACE(s)
Definition: solgame.cpp:4
#define STATUS_PENDING
Definition: telnetd.h:14
char * PCHAR
Definition: typedefs.h:51
#define ENABLE_PROCESSED_INPUT
Definition: wincon.h:107

◆ ReadFileEx()

BOOL WINAPI ReadFileEx ( IN HANDLE  hFile,
IN LPVOID  lpBuffer,
IN DWORD nNumberOfBytesToRead  OPTIONAL,
IN LPOVERLAPPED  lpOverlapped,
IN LPOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine 
)

Definition at line 295 of file rw.c.

300{
303
304 Offset.u.LowPart = lpOverlapped->Offset;
305 Offset.u.HighPart = lpOverlapped->OffsetHigh;
306 lpOverlapped->Internal = STATUS_PENDING;
307
309 NULL,
311 lpCompletionRoutine,
313 lpBuffer,
314 nNumberOfBytesToRead,
315 &Offset,
316 NULL);
317
318 if (!NT_SUCCESS(Status))
319 {
321 return FALSE;
322 }
323
324 return TRUE;
325}
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE ApcRoutine
Definition: iofuncs.h:726

Referenced by pipeserver(), ReadPipeCompletion(), serverThreadMain5(), test_readfileex_pending(), and WdmAudCommitWaveBufferByLegacy().

◆ ReadFileScatter()

BOOL WINAPI ReadFileScatter ( HANDLE  hFile,
FILE_SEGMENT_ELEMENT  aSegmentArray[],
DWORD  nNumberOfBytesToRead,
LPDWORD  lpReserved,
LPOVERLAPPED  lpOverlapped 
)

Definition at line 333 of file rw.c.

338{
339 PIO_STATUS_BLOCK pIOStatus;
342
343 DPRINT("(%p %p %u %p)\n", hFile, aSegmentArray, nNumberOfBytesToRead, lpOverlapped);
344
345 Offset.LowPart = lpOverlapped->Offset;
346 Offset.HighPart = lpOverlapped->OffsetHigh;
347 pIOStatus = (PIO_STATUS_BLOCK) lpOverlapped;
348 pIOStatus->Status = STATUS_PENDING;
349 pIOStatus->Information = 0;
350
352 NULL,
353 NULL,
354 NULL,
355 pIOStatus,
356 aSegmentArray,
357 nNumberOfBytesToRead,
358 &Offset,
359 NULL);
360
361 if (!NT_SUCCESS(Status))
362 {
364 return FALSE;
365 }
366
367 return TRUE;
368}
#define SetLastError(x)
Definition: compat.h:752
struct _IO_STATUS_BLOCK * PIO_STATUS_BLOCK
Definition: change.c:34
NTSTATUS NTAPI NtReadFileScatter(IN HANDLE FileHandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL, IN PVOID UserApcContext OPTIONAL, OUT PIO_STATUS_BLOCK UserIoStatusBlock, IN FILE_SEGMENT_ELEMENT BufferDescription[], IN ULONG BufferLength, IN PLARGE_INTEGER ByteOffset, IN PULONG Key OPTIONAL)
Definition: iofunc.c:3063
#define DPRINT
Definition: sndvol32.h:73

◆ WriteFile()

BOOL WINAPI WriteFile ( IN HANDLE  hFile,
IN LPCVOID  lpBuffer,
IN DWORD nNumberOfBytesToWrite  OPTIONAL,
OUT LPDWORD  lpNumberOfBytesWritten,
IN LPOVERLAPPED lpOverlapped  OPTIONAL 
)

Definition at line 24 of file rw.c.

29{
31
32 TRACE("WriteFile(hFile %p)\n", hFile);
33
34 if (lpNumberOfBytesWritten != NULL) *lpNumberOfBytesWritten = 0;
35
37
39 {
40 return WriteConsoleA(hFile,
43 lpNumberOfBytesWritten,
45 }
46
47 if (lpOverlapped != NULL)
48 {
51
52 Offset.u.LowPart = lpOverlapped->Offset;
53 Offset.u.HighPart = lpOverlapped->OffsetHigh;
54 lpOverlapped->Internal = STATUS_PENDING;
55 ApcContext = (((ULONG_PTR)lpOverlapped->hEvent & 0x1) ? NULL : lpOverlapped);
56
58 lpOverlapped->hEvent,
59 NULL,
64 &Offset,
65 NULL);
66
67 /* return FALSE in case of failure and pending operations! */
69 {
71 return FALSE;
72 }
73
74 if (lpNumberOfBytesWritten != NULL)
75 *lpNumberOfBytesWritten = lpOverlapped->InternalHigh;
76 }
77 else
78 {
80
82 NULL,
83 NULL,
84 NULL,
85 &Iosb,
88 NULL,
89 NULL);
90
91 /* Wait in case operation is pending */
93 {
95 if (NT_SUCCESS(Status)) Status = Iosb.Status;
96 }
97
98 /*
99 * lpNumberOfBytesWritten must not be NULL here, in fact Win doesn't
100 * check that case either and crashes (only after the operation
101 * completed).
102 */
103 *lpNumberOfBytesWritten = Iosb.Information;
104
105 if (!NT_SUCCESS(Status))
106 {
108 return FALSE;
109 }
110 }
111
112 TRACE("WriteFile() succeeded\n");
113 return TRUE;
114}
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleA(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
Definition: readwrite.c:1468
_In_ HANDLE _In_ DWORD nNumberOfBytesToWrite
Definition: mswsock.h:91
NTSYSAPI NTSTATUS NTAPI NtWriteFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN PVOID WriteBuffer, IN ULONG WriteBufferLength, IN PLARGE_INTEGER FileOffset OPTIONAL, IN PULONG LockOperationKey OPTIONAL)

Referenced by __report_error(), __WINE_PRINTF_ATTR(), _hwrite(), _overlapped_write_async(), _overlapped_write_sync(), _RunRemoteTest(), _tiffWriteProc(), _VCrtDbgReportA(), _VCrtDbgReportW(), append_file(), ata_bblk(), BackupBootSector(), BestFit_CreateFile(), BestFit_Write(), build_exe(), cabinet_write(), child_process(), ClipboardWriteMemory(), CloseEnhMetaFile(), CloseMetaFile(), BtrfsRecv::cmd_setxattr(), BtrfsRecv::cmd_write(), CmosWriteFile(), ConErrPrintf(), ConOutPuts(), ConWrite(), copy(), CopyEnhMetaFileA(), CopyEnhMetaFileW(), CopyMetaFileW(), create_and_write_file(), create_assembly(), create_avi_file(), create_bitmap(), create_bitmap_file(), create_cache_entry(), create_cache_file(), create_cdf_file(), create_chm(), create_file(), create_file_data(), create_ico_file(), create_inf_file(), create_manifest_file(), create_source_file(), create_source_fileA(), create_source_fileW(), create_temp_binary(), create_temp_file(), create_temp_manifest_file(), create_test_dll(), create_test_dll_sections(), create_test_file(), create_testfontfile(), create_textstream(), create_tmp_ini_file(), create_xml_file(), CreateEnhMetaFileW(), CreateMetaFileW(), createTestFile(), CreateTestFile(), CRYPT_CacheURL(), CRYPT_FileOutputFunc(), CRYPT_SavePKCSToFile(), custom_action_server(), custom_client_thread(), custom_stop_server(), DllRegisterServer(), doChild(), DoEntry(), DoExport(), DoFileSave(), domdoc_save_writecallback(), DoSaveFile(), DosWriteFile(), DoTypeFile(), DoWriteFile(), dump_memory64_info(), dump_memory_info(), dump_system_info(), DumpMemoryRaw(), DumpMemoryTxt(), EMFDRV_WriteRecord(), EnumThreadProc(), CShellCommandValue::Execute(), exerciseServer(), export_field(), export_forcecodepage(), export_record(), export_stream(), export_summaryinformation(), ExtCabCallback(), extract2(), extract_one(), extract_resource(), ExtractFilesFromZip(), ExtractResource(), CZipExtract::ExtractSingle(), ExtractTTFFile(), fci_write(), fdi_write(), FileLockBytesImpl_WriteAt(), FNWRITE(), FormatOutput(), FTP_RetrieveFileData(), FTPFILE_ReadFile(), gen_forward_chain_testdll(), Generate(), get_test_dll_path(), get_thread_dll_path(), GetAndSendInputThread(), getpass(), ICreateTypeLib2_fnSaveAllChanges(), IDirectXFileImpl_CreateEnumObject(), IDirectXFileImpl_RegisterTemplates(), ImageAddCertificate(), IMAGEHLP_RecalculateChecksum(), IMAGEHLP_SetSecurityDirOffset(), ImageRemoveCertificate(), inf_open_file_content(), initFileFromData(), InitLogging(), InstallDevice(), InstanceThread(), IStream_fnWrite(), ITERATE_PublishIcon(), load_resource(), load_v6_module(), LocalmonWritePort(), LocalWritePrinter(), LogToFile(), mailslot_test(), MailSlotWriter(), main(), make_tmp_file(), makeFile(), makestringfile(), MFDRV_CloseMetaFile(), MFDRV_WriteRecord(), MSI_ProcessMessageVerbatim(), myprintf(), named_pipe_client_func(), CNewMenu::NewItemByNonCommand(), OLECONVERT_GetOLE20FromOLE10(), output_header(), output_string(), output_writeconsole(), OutputResult(), TANSIParser::ParseBuffer(), CDownloadManager::PerformDownloadAndInstall(), PersistFile_Save(), PipeWriter(), print_string(), printit(), PROFILE_WriteLine(), PROFILE_WriteMarker(), pSetupDebugPrint(), read_http_stream(), read_pipe_test(), RecycleBin5_Create(), BtrfsContextMenu::reflink_copy(), reflink_copy2(), RemoveFile(), replace(), Rs232Thread(), Rs232WriteByteWin32(), WriterThread::Run(), run_cmd(), run_script(), save_base64(), save_blackbox(), save_der(), save_persistent_cookie(), save_pfx(), save_profile(), save_prop(), SaveServicesToFile(), SaveTextFileFromEdit(), sc_cb_write(), ScConnectControlPipe(), ScrnshotDownloadCallback(), ScServiceDispatcher(), send_msg(), send_subvol(), CJournaledTestList::SerializeIntoJournal(), serverThreadMain1(), serverThreadMain2(), serverThreadMain3(), serverThreadMain4(), SetupLogErrorA(), START_TEST(), stream_out(), taskkill_vprintfW(), tcp_send(), TerminateShell(), test_AtlAxCreateControl(), test_ax_win(), test_bind_image_ex(), test_cache_read(), test_calchash(), test_catalog_properties(), test_CloseHandle(), test_completion(), test_Console(), test_create_catalog_file(), test_create_db_imp(), test_create_exe_imp(), test_create_file_imp(), test_create_ne_imp(), test_CreateNamedPipe(), test_CreatePipe(), test_CryptCATAdminAddRemoveCatalog(), test_dib_bits_access(), test_DisconnectNamedPipe(), test_domdoc(), test_ExitProcess(), test_file_contents(), test_file_protocol(), test_FileSecurity(), test_filesourcefilter(), test_FindFirstChangeNotification(), test_FlushFileBuffers(), test_FreeConsole(), test_get_digest_stream(), test_get_inf_class(), test_http_cache(), test_image_load(), test_ImpersonateNamedPipeClient(), test_import_resolution(), test_int_widths(), test_iocp_callback(), test_ITextDocument_Open(), test_kernel32_tp_io(), test_LoadIconWithScaleDown(), test_LoadImage_working_directory_run(), test_LoadImageFile(), test_LocalizedNames(), test_LoopbackRead(), test_LZCopy(), test_LZRead(), test_mhtml_protocol_binding(), test_monochrome_icon(), test_multiple_signatures(), test_nowait(), test_null_device(), test_OleLoadPicturePath(), test_openbackup(), test_overlapped(), test_parent_process_attribute(), test_pe_image_hash(), test_pe_os_version(), test_profile_delete_on_close(), test_profile_existing(), test_profile_refresh(), test_profile_sections(), test_profile_sections_names(), test_profile_string(), test_query_recyclebin(), Test_RawSize(), test_read_write(), test_ReadFile(), test_readfileex_pending(), test_readonlyfile(), test_readonlyfile_cab(), test_RegLoadMUIString(), test_ResolveDelayLoadedAPI(), test_saxreader(), test_saxreader_encoding(), test_section_access(), Test_SectionContents(), test_sip(), test_sip_create_indirect_data(), test_SIPRetrieveSubjectGUID(), test_textstream(), test_tp_io(), test_TransformWithLoadingLocalFile(), Test_Truncate(), test_WaitRx(), test_waittxempty(), test_wintrust_digest(), test_write_watch(), testWriteSimple(), textstream_writecrlf(), textstream_writestr(), BtrfsSend::Thread(), translateinfstringex_test(), UDFPhWriteSynchronous(), unpack_avi_file(), CJournaledTestList::UpdateJournal(), VfdCreateImageFile(), VfdFormatMedia(), VfdOpenImage(), VfdSaveImage(), win32_write_file_func(), WMSFT_write_segment(), Write(), CPipe::Write(), write_binary_nolock(), write_buffer_to_file(), write_double_translated_ansi_nolock(), write_file(), write_inifile(), write_manifest(), write_raw_file(), write_resource(), write_resource_file(), write_string_to_console(), write_text_ansi_nolock(), write_text_utf16le_nolock(), write_text_utf8_nolock(), write_tmp_file(), write_to_file(), write_typelib(), write_wav(), writeat(), WriteClipboardFile(), WriteDisk(), WriteEncodedText(), CJournaledTestList::WriteInitialJournalFile(), WriteJobShadowFile(), WritePrinter(), WriteRdpFile(), WriteSdbFile(), TNetwork::WriteString(), WriteToLog(), WriteToPipeThread(), WriteVolumeSector(), wWinMain(), and XCOPY_wprintf().

◆ WriteFileEx()

BOOL WINAPI WriteFileEx ( IN HANDLE  hFile,
IN LPCVOID  lpBuffer,
IN DWORD nNumberOfBytesToWrite  OPTIONAL,
IN LPOVERLAPPED  lpOverlapped,
IN LPOVERLAPPED_COMPLETION_ROUTINE  lpCompletionRoutine 
)

Definition at line 258 of file rw.c.

263{
266
267 Offset.u.LowPart = lpOverlapped->Offset;
268 Offset.u.HighPart = lpOverlapped->OffsetHigh;
269 lpOverlapped->Internal = STATUS_PENDING;
270
272 NULL,
274 lpCompletionRoutine,
278 &Offset,
279 NULL);
280
281 if (!NT_SUCCESS(Status))
282 {
284 return FALSE;
285 }
286
287 return TRUE;
288}

Referenced by ReadPipeCompletion(), serverThreadMain5(), test_readfileex_pending(), WdmAudCommitWaveBufferByLegacy(), WriteFileEx_Committer(), and WriteFileEx_Remixer().

◆ WriteFileGather()

BOOL WINAPI WriteFileGather ( HANDLE  hFile,
FILE_SEGMENT_ELEMENT  aSegmentArray[],
DWORD  nNumberOfBytesToWrite,
LPDWORD  lpReserved,
LPOVERLAPPED  lpOverlapped 
)

Definition at line 375 of file rw.c.

380{
381 PIO_STATUS_BLOCK IOStatus;
384
385 DPRINT("%p %p %u %p\n", hFile, aSegmentArray, nNumberOfBytesToWrite, lpOverlapped);
386
387 Offset.LowPart = lpOverlapped->Offset;
388 Offset.HighPart = lpOverlapped->OffsetHigh;
389 IOStatus = (PIO_STATUS_BLOCK) lpOverlapped;
390 IOStatus->Status = STATUS_PENDING;
391 IOStatus->Information = 0;
392
394 NULL,
395 NULL,
396 NULL,
397 IOStatus,
398 aSegmentArray,
400 &Offset,
401 NULL);
402
403 if (!NT_SUCCESS(Status))
404 {
406 return FALSE;
407 }
408
409 return TRUE;
410}
NTSTATUS NTAPI NtWriteFileGather(IN HANDLE FileHandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL, IN PVOID UserApcContext OPTIONAL, OUT PIO_STATUS_BLOCK UserIoStatusBlock, IN FILE_SEGMENT_ELEMENT BufferDescription[], IN ULONG BufferLength, IN PLARGE_INTEGER ByteOffset, IN PULONG Key OPTIONAL)
Definition: iofunc.c:4132