From dd705acbd0a540646772983d0a0ec3a2daa6866b Mon Sep 17 00:00:00 2001 From: jean Date: Wed, 13 Jan 1999 15:53:56 +0000 Subject: [PATCH] correct some bugs in WriteFile function svn path=/trunk/; revision=166 --- reactos/lib/kernel32/file/file.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/reactos/lib/kernel32/file/file.c b/reactos/lib/kernel32/file/file.c index f411d5a9314..52941dc9d9a 100644 --- a/reactos/lib/kernel32/file/file.c +++ b/reactos/lib/kernel32/file/file.c @@ -88,22 +88,31 @@ WINBOOL STDCALL WriteFile(HANDLE hFile, LPOVERLAPPED lpOverLapped) { - LARGE_INTEGER Offset; + PLARGE_INTEGER Offset; + LARGE_INTEGER ByteOffset; HANDLE hEvent = NULL; NTSTATUS errCode; - - if (lpOverLapped != NULL ) + PIO_STATUS_BLOCK IoStatusBlock; + IO_STATUS_BLOCK IIosb; + if ( lpOverLapped != NULL ) { - SET_LARGE_INTEGER_LOW_PART(Offset, lpOverLapped->Offset); - SET_LARGE_INTEGER_HIGH_PART(Offset, lpOverLapped->OffsetHigh); + SET_LARGE_INTEGER_LOW_PART(ByteOffset, lpOverLapped->Offset); + SET_LARGE_INTEGER_HIGH_PART(ByteOffset, lpOverLapped->OffsetHigh); + Offset = &ByteOffset; lpOverLapped->Internal = STATUS_PENDING; - hEvent= lpOverLapped->hEvent; + hEvent = lpOverLapped->hEvent; + IoStatusBlock = (PIO_STATUS_BLOCK)lpOverLapped; + } + else + { + IoStatusBlock = &IIosb; + Offset = NULL; } errCode = NtWriteFile(hFile,hEvent,NULL,NULL, (PIO_STATUS_BLOCK)lpOverLapped, (PVOID)lpBuffer, nNumberOfBytesToWrite, - &Offset, + Offset, NULL); if (!NT_SUCCESS(errCode)) {