ReactOS 0.4.17-dev-243-g1369312
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_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
 
BOOL WINAPI ReadFile (_In_ HANDLE hFile, _Out_writes_bytes_to_opt_(nNumberOfBytesToRead, *lpNumberOfBytesRead) __out_data_source(FILE) LPVOID lpBuffer, _In_ DWORD nNumberOfBytesToRead, _Out_opt_ LPDWORD lpNumberOfBytesRead, _Inout_opt_ LPOVERLAPPED lpOverlapped)
 
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 245 of file rw.c.

248{
249 DWORD dwErrorCode;
250 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine =
252
254 lpCompletionRoutine(dwErrorCode,
257}
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:100
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)

◆ DEBUG_CHANNEL()

DEBUG_CHANNEL ( kernel32file  )

◆ ReadFile()

BOOL WINAPI ReadFile ( _In_ HANDLE  hFile,
_Out_writes_bytes_to_opt_(nNumberOfBytesToRead, *lpNumberOfBytesRead) __out_data_source(FILE) LPVOID  lpBuffer,
_In_ DWORD  nNumberOfBytesToRead,
_Out_opt_ LPDWORD  lpNumberOfBytesRead,
_Inout_opt_ LPOVERLAPPED  lpOverlapped 
)

Definition at line 126 of file rw.c.

132{
134
135 TRACE("ReadFile(hFile %p)\n", hFile);
136
137 if (lpNumberOfBytesRead != NULL) *lpNumberOfBytesRead = 0;
138
140
142 {
144 lpBuffer,
145 nNumberOfBytesToRead,
146 lpNumberOfBytesRead,
147 NULL))
148 {
149 DWORD dwMode;
150 GetConsoleMode(hFile, &dwMode);
151 if ((dwMode & ENABLE_PROCESSED_INPUT) && *(PCHAR)lpBuffer == 0x1a)
152 {
153 /* EOF character entered; simulate end-of-file */
154 *lpNumberOfBytesRead = 0;
155 }
156 return TRUE;
157 }
158 return FALSE;
159 }
160
161 if (lpOverlapped != NULL)
162 {
165
166 Offset.u.LowPart = lpOverlapped->Offset;
167 Offset.u.HighPart = lpOverlapped->OffsetHigh;
168 lpOverlapped->Internal = STATUS_PENDING;
169 ApcContext = (((ULONG_PTR)lpOverlapped->hEvent & 0x1) ? NULL : lpOverlapped);
170
172 lpOverlapped->hEvent,
173 NULL,
176 lpBuffer,
177 nNumberOfBytesToRead,
178 &Offset,
179 NULL);
180
181 /* return FALSE in case of failure and pending operations! */
183 {
184 if (Status == STATUS_END_OF_FILE && lpNumberOfBytesRead != NULL)
185 *lpNumberOfBytesRead = 0;
186
188 return FALSE;
189 }
190
191 if (lpNumberOfBytesRead != NULL)
192 *lpNumberOfBytesRead = lpOverlapped->InternalHigh;
193 }
194 else
195 {
196 IO_STATUS_BLOCK Iosb = { 0 };
197
199 NULL,
200 NULL,
201 NULL,
202 &Iosb,
203 lpBuffer,
204 nNumberOfBytesToRead,
205 NULL,
206 NULL);
207
208 /* Wait in case operation is pending */
209 if (Status == STATUS_PENDING)
210 {
212 if (NT_SUCCESS(Status)) Status = Iosb.Status;
213 }
214
216 {
217 /*
218 * Windows 2003 and Vista do not check for lpNumberOfBytesRead == NULL,
219 * but Windows 8+ does. Avoid crashing.
220 */
221 if (lpNumberOfBytesRead != NULL)
222 *lpNumberOfBytesRead = 0;
223 return TRUE;
224 }
225
226 /*
227 * Windows 2003 and Vista do not check for lpNumberOfBytesRead == NULL,
228 * but Windows 8+ does. Avoid crashing.
229 */
230 if (lpNumberOfBytesRead != NULL)
231 *lpNumberOfBytesRead = Iosb.Information;
232
233 if (!NT_SUCCESS(Status))
234 {
236 return FALSE;
237 }
238 }
239
240 TRACE("ReadFile() succeeded\n");
241 return TRUE;
242}
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:24
_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 301 of file rw.c.

306{
309
310 Offset.u.LowPart = lpOverlapped->Offset;
311 Offset.u.HighPart = lpOverlapped->OffsetHigh;
312 lpOverlapped->Internal = STATUS_PENDING;
313
315 NULL,
317 lpCompletionRoutine,
319 lpBuffer,
320 nNumberOfBytesToRead,
321 &Offset,
322 NULL);
323
324 if (!NT_SUCCESS(Status))
325 {
327 return FALSE;
328 }
329
330 return TRUE;
331}
_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 339 of file rw.c.

344{
345 PIO_STATUS_BLOCK pIOStatus;
348
349 DPRINT("(%p %p %u %p)\n", hFile, aSegmentArray, nNumberOfBytesToRead, lpOverlapped);
350
351 Offset.LowPart = lpOverlapped->Offset;
352 Offset.HighPart = lpOverlapped->OffsetHigh;
353 pIOStatus = (PIO_STATUS_BLOCK) lpOverlapped;
354 pIOStatus->Status = STATUS_PENDING;
355 pIOStatus->Information = 0;
356
358 NULL,
359 NULL,
360 NULL,
361 pIOStatus,
362 aSegmentArray,
363 nNumberOfBytesToRead,
364 &Offset,
365 NULL);
366
367 if (!NT_SUCCESS(Status))
368 {
370 return FALSE;
371 }
372
373 return TRUE;
374}
#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_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID  lpBuffer,
_In_ DWORD  nNumberOfBytesToWrite,
_Out_opt_ LPDWORD  lpNumberOfBytesWritten,
_Inout_opt_ LPOVERLAPPED  lpOverlapped 
)

Definition at line 25 of file rw.c.

31{
33
34 TRACE("WriteFile(hFile %p)\n", hFile);
35
36 if (lpNumberOfBytesWritten != NULL) *lpNumberOfBytesWritten = 0;
37
39
41 {
42 return WriteConsoleA(hFile,
45 lpNumberOfBytesWritten,
47 }
48
49 if (lpOverlapped != NULL)
50 {
53
54 Offset.u.LowPart = lpOverlapped->Offset;
55 Offset.u.HighPart = lpOverlapped->OffsetHigh;
56 lpOverlapped->Internal = STATUS_PENDING;
57 ApcContext = (((ULONG_PTR)lpOverlapped->hEvent & 0x1) ? NULL : lpOverlapped);
58
60 lpOverlapped->hEvent,
61 NULL,
66 &Offset,
67 NULL);
68
69 /* return FALSE in case of failure and pending operations! */
71 {
73 return FALSE;
74 }
75
76 if (lpNumberOfBytesWritten != NULL)
77 *lpNumberOfBytesWritten = lpOverlapped->InternalHigh;
78 }
79 else
80 {
81 IO_STATUS_BLOCK Iosb = { 0 };
82
84 NULL,
85 NULL,
86 NULL,
87 &Iosb,
90 NULL,
91 NULL);
92
93 /* Wait in case operation is pending */
95 {
97 if (NT_SUCCESS(Status)) Status = Iosb.Status;
98 }
99
100 /*
101 * Windows 2003 and Vista do not check for lpNumberOfBytesWritten == NULL,
102 * but Windows 8+ does and Wine code (crypt32) relies on this.
103 * We ignore Hyrum's Law and assume that crashing here is not a
104 * behavior that software relies on.
105 */
106 if (lpNumberOfBytesWritten != NULL)
107 *lpNumberOfBytesWritten = Iosb.Information;
108
109 if (!NT_SUCCESS(Status))
110 {
112 return FALSE;
113 }
114 }
115
116 TRACE("WriteFile() succeeded\n");
117 return TRUE;
118}
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(), blocking_thread(), build_exe(), cabinet_write(), child_process(), ClipboardWriteMemory(), CloseEnhMetaFile(), CloseMetaFile(), BtrfsRecv::cmd_setxattr(), BtrfsRecv::cmd_write(), CmosWriteFile(), ConErrPrintf(), connect_and_write_pipe(), 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(), iosb_delayed_write_thread(), 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_blocking(), 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_empty_name(), 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_iosb(), 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_NtMapViewOfSection(), test_NtMapViewOfSectionEx(), 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_transceive(), test_TransformWithLoadingLocalFile(), Test_Truncate(), test_unknownfontdecode(), test_WaitRx(), test_waittxempty(), test_wintrust_digest(), test_write_watch(), Test_WriteFile_async(), Test_WriteFile_sync(), 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 264 of file rw.c.

269{
272
273 Offset.u.LowPart = lpOverlapped->Offset;
274 Offset.u.HighPart = lpOverlapped->OffsetHigh;
275 lpOverlapped->Internal = STATUS_PENDING;
276
278 NULL,
280 lpCompletionRoutine,
284 &Offset,
285 NULL);
286
287 if (!NT_SUCCESS(Status))
288 {
290 return FALSE;
291 }
292
293 return TRUE;
294}

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 381 of file rw.c.

386{
387 PIO_STATUS_BLOCK IOStatus;
390
391 DPRINT("%p %p %u %p\n", hFile, aSegmentArray, nNumberOfBytesToWrite, lpOverlapped);
392
393 Offset.LowPart = lpOverlapped->Offset;
394 Offset.HighPart = lpOverlapped->OffsetHigh;
395 IOStatus = (PIO_STATUS_BLOCK) lpOverlapped;
396 IOStatus->Status = STATUS_PENDING;
397 IOStatus->Information = 0;
398
400 NULL,
401 NULL,
402 NULL,
403 IOStatus,
404 aSegmentArray,
406 &Offset,
407 NULL);
408
409 if (!NT_SUCCESS(Status))
410 {
412 return FALSE;
413 }
414
415 return TRUE;
416}
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