ReactOS 0.4.17-dev-218-g5635d24
WriteFile.c File Reference
#include "precomp.h"
Include dependency graph for WriteFile.c:

Go to the source code of this file.

Functions

static void Test_WriteFile_sync (HANDLE hFile)
 
static void Test_WriteFile_async (HANDLE hFile)
 
 START_TEST (WriteFile)
 

Function Documentation

◆ START_TEST()

START_TEST ( WriteFile  )

Definition at line 140 of file WriteFile.c.

141{
143
144 /* Create a temp file name */
145 CHAR tempFileName[MAX_PATH];
146 if (!GetTempFileNameA(".", "writetest", 0, tempFileName))
147 {
148 skip("GetTempFileNameA failed with error %lu\n", GetLastError());
149 return;
150 }
151
152 /* Create a temp file to write to */
153 hFile = CreateFileA(tempFileName,
155 0,
156 NULL,
159 NULL);
161 {
162 skip("CreateFileA failed with error %lu\n", GetLastError());
163 return;
164 }
165
168
170}
static void Test_WriteFile_async(HANDLE hFile)
Definition: WriteFile.c:71
static void Test_WriteFile_sync(HANDLE hFile)
Definition: WriteFile.c:10
#define skip(...)
Definition: atltest.h:64
#define NULL
Definition: types.h:112
#define CloseHandle
Definition: compat.h:739
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:740
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
Definition: filename.c:26
#define CREATE_ALWAYS
Definition: disk.h:72
#define FILE_FLAG_DELETE_ON_CLOSE
Definition: disk.h:42
_In_ HANDLE hFile
Definition: mswsock.h:90
#define GENERIC_WRITE
Definition: nt_native.h:90
char CHAR
Definition: pedump.c:57
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

◆ Test_WriteFile_async()

static void Test_WriteFile_async ( HANDLE  hFile)
static

Definition at line 71 of file WriteFile.c.

72{
73 BOOL bResult;
74 UCHAR Buffer[128];
75 DWORD dwBytesWritten;
76 OVERLAPPED ol = { 0 };
77
79
80 /* Test NULL File */
81 SetLastError(0xdeadbeef);
82 dwBytesWritten = 0xdeadbeef;
83 bResult = WriteFile(NULL, Buffer, sizeof(Buffer), &dwBytesWritten, &ol);
84 ok_eq_bool(bResult, FALSE);
85 ok_eq_ulong(dwBytesWritten, 0);
87
88 /* Test INVALID_HANDLE_VALUE */
89 SetLastError(0xdeadbeef);
90 dwBytesWritten = 0xdeadbeef;
91 bResult = WriteFile(INVALID_HANDLE_VALUE, Buffer, sizeof(Buffer), &dwBytesWritten, &ol);
92 ok_eq_bool(bResult, FALSE);
93 ok_eq_ulong(dwBytesWritten, 0);
95
96 /* Write some bytes */
97 SetLastError(0xdeadbeef);
98 dwBytesWritten = 0xdeadbeef;
99 bResult = WriteFile(hFile, Buffer, sizeof(Buffer), &dwBytesWritten, &ol);
100 ok_eq_bool(bResult, TRUE);
101 dwBytesWritten = 0xdeadbeef;
102 bResult = GetOverlappedResult(hFile, &ol, &dwBytesWritten, TRUE);
103 ok_eq_bool(bResult, TRUE);
104 ok_eq_ulong(dwBytesWritten, sizeof(Buffer));
105 ok_eq_ulong(GetLastError(), (GetNTVersion() >= _WIN32_WINNT_WIN10) ? 0 : 0xdeadbeef);
106
107 /* Test with NULL lpBuffer */
108 SetLastError(0xdeadbeef);
109 dwBytesWritten = 0xdeadbeef;
110 StartSeh()
111 bResult = WriteFile(hFile, NULL, sizeof(Buffer), &dwBytesWritten, &ol);
112 ok_eq_bool(bResult, FALSE);
115
116 /* Test with NULL lpBuffer and 0 nNumberOfBytesToWrite */
117 SetLastError(0xdeadbeef);
118 dwBytesWritten = 0xdeadbeef;
119 StartSeh()
120 bResult = WriteFile(hFile, NULL, 0, &dwBytesWritten, &ol);
121 ok_eq_bool(bResult, TRUE);
122 ok_eq_ulong(GetLastError(), 0xdeadbeef);
123 bResult = GetOverlappedResult(hFile, &ol, &dwBytesWritten, TRUE);
124 ok_eq_bool(bResult, TRUE);
125 ok_eq_ulong(dwBytesWritten, 0);
126 ok_eq_ulong(GetLastError(), (GetNTVersion() >= _WIN32_WINNT_WIN10) ? 0 : 0xdeadbeef);
128
129 /* Test with NULL lpNumberOfBytesWritten */
130 SetLastError(0xdeadbeef);
131 bResult = WriteFile(hFile, Buffer, sizeof(Buffer), NULL, &ol);
132 ok_eq_bool(bResult, TRUE);
133 ok_eq_ulong(GetLastError(), 0xdeadbeef);
134 bResult = GetOverlappedResult(hFile, &ol, &dwBytesWritten, TRUE);
135 ok_eq_bool(bResult, TRUE);
136 ok_eq_ulong(dwBytesWritten, sizeof(Buffer));
137 ok_eq_ulong(GetLastError(), (GetNTVersion() >= _WIN32_WINNT_WIN10) ? 0 : 0xdeadbeef);
138}
#define ok_eq_ulong(value, expected)
Definition: apitest.h:120
#define GetNTVersion()
Definition: apitest.h:17
#define StartSeh()
Definition: apitest.h:93
#define ok_eq_bool(value, expected)
Definition: apitest.h:137
#define EndSeh(ExpectedStatus)
Definition: apitest.h:99
Definition: bufpool.h:45
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define FILE_BEGIN
Definition: compat.h:761
#define SetFilePointer
Definition: compat.h:743
#define SetLastError(x)
Definition: compat.h:752
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
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: rw.c:25
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
Definition: iocompl.c:221
#define _WIN32_WINNT_WIN10
Definition: sdkddkver.h:32
#define STATUS_SUCCESS
Definition: shellext.h:65
unsigned char UCHAR
Definition: typedefs.h:53
#define ERROR_INVALID_USER_BUFFER
Definition: winerror.h:1448
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList

Referenced by START_TEST().

◆ Test_WriteFile_sync()

static void Test_WriteFile_sync ( HANDLE  hFile)
static

Definition at line 10 of file WriteFile.c.

11{
12 UCHAR Buffer[128];
13 DWORD dwBytesWritten;
14 BOOL bResult;
15
17
18 /* Test NULL File */
19 SetLastError(0xdeadbeef);
20 dwBytesWritten = 0xdeadbeef;
21 bResult = WriteFile(NULL, Buffer, sizeof(Buffer), &dwBytesWritten, NULL);
22 ok_eq_bool(bResult, FALSE);
23 ok_eq_ulong(dwBytesWritten, 0);
25
26 /* Test INVALID_HANDLE_VALUE */
27 SetLastError(0xdeadbeef);
28 dwBytesWritten = 0xdeadbeef;
29 bResult = WriteFile(INVALID_HANDLE_VALUE, Buffer, sizeof(Buffer), &dwBytesWritten, NULL);
30 ok_eq_bool(bResult, FALSE);
31 ok_eq_ulong(dwBytesWritten, 0);
33
34 /* Write some bytes */
35 SetLastError(0xdeadbeef);
36 dwBytesWritten = 0xdeadbeef;
37 bResult = WriteFile(hFile, Buffer, sizeof(Buffer), &dwBytesWritten, NULL);
38 ok_eq_bool(bResult, TRUE);
39 ok_eq_ulong(dwBytesWritten, sizeof(Buffer));
40 ok_eq_ulong(GetLastError(), 0xdeadbeef);
41
42 /* Test with NULL lpBuffer */
43 SetLastError(0xdeadbeef);
44 dwBytesWritten = 0xdeadbeef;
45 StartSeh()
46 bResult = WriteFile(hFile, NULL, sizeof(Buffer), &dwBytesWritten, NULL);
47 ok_eq_bool(bResult, FALSE);
48 ok_eq_ulong(dwBytesWritten, 0);
51
52 /* Test with NULL lpBuffer and 0 nNumberOfBytesToWrite */
53 SetLastError(0xdeadbeef);
54 dwBytesWritten = 0xdeadbeef;
55 StartSeh()
56 bResult = WriteFile(hFile, NULL, 0, &dwBytesWritten, NULL);
57 ok_eq_bool(bResult, TRUE);
58 ok_eq_ulong(dwBytesWritten, 0);
59 ok_eq_ulong(GetLastError(), 0xdeadbeef);
61
62 /* Test with NULL lpNumberOfBytesWritten */
63 SetLastError(0xdeadbeef);
64 StartSeh()
65 bResult = WriteFile(hFile, Buffer, sizeof(Buffer), NULL, NULL);
66 ok_eq_bool(bResult, TRUE);
67 ok_eq_ulong(GetLastError(), 0xdeadbeef);
69}
#define EXCEPTION_ACCESS_VIOLATION
Definition: minwinbase.h:44
#define _WIN32_WINNT_WIN8
Definition: sdkddkver.h:29

Referenced by START_TEST().