Bring back ext2 code from branch
[reactos.git] / rostests / win32 / kernel32 / tests / CreateFile.c
1 #include <k32.h>
2
3 #ifdef __GNUC__
4 #include "regtests.h"
5 #define NDEBUG
6 #include "debug.h"
7
8 #define TestFilename L"C:\\File"
9 #define TestExpectedFilename L"\\??\\" TestFilename
10 #define TestHandle (HANDLE) 1
11
12 typedef struct
13 {
14 LPCWSTR lpFileName;
15 DWORD dwDesiredAccess;
16 DWORD dwShareMode;
17 LPSECURITY_ATTRIBUTES lpSecurityAttributes;
18 DWORD dwCreationDisposition;
19 DWORD dwFlagsAndAttributes;
20 HANDLE hTemplateFile;
21 } CreateFile_PARAMETERS;
22
23 typedef struct
24 {
25 PWCHAR ObjectName;
26 ACCESS_MASK DesiredAccess;
27 ULONG FileAttributes;
28 ULONG ShareAccess;
29 ULONG CreateDisposition;
30 ULONG CreateOptions;
31 PVOID EaBuffer;
32 ULONG EaLength;
33 } NtCreateFile_PARAMETERS;
34
35 typedef struct
36 {
37 CreateFile_PARAMETERS CreateFileParameters;
38 NtCreateFile_PARAMETERS NtCreateFileParameters;
39 } CreateFileTest_Parameters;
40
41 static CreateFileTest_Parameters CreateFileTests[] =
42 {
43 {
44 CreateFileParameters:
45 {
46 lpFileName: TestFilename,
47 dwDesiredAccess: GENERIC_ALL,
48 dwShareMode: FILE_SHARE_WRITE,
49 lpSecurityAttributes: NULL,
50 dwCreationDisposition: CREATE_ALWAYS,
51 dwFlagsAndAttributes: 0,
52 hTemplateFile: NULL
53 },
54 NtCreateFileParameters:
55 {
56 ObjectName: TestExpectedFilename,
57 DesiredAccess: GENERIC_ALL|SYNCHRONIZE|FILE_READ_ATTRIBUTES,
58 FileAttributes: 0,
59 ShareAccess: FILE_SHARE_WRITE,
60 CreateDisposition: FILE_OVERWRITE_IF,
61 CreateOptions: FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT,
62 NULL,
63 0
64 }
65 }
66 };
67
68 static CreateFileTest_Parameters *CurrentTest;
69
70 static NTSTATUS STDCALL
71 MockNtCreateFile(PHANDLE FileHandle,
72 ACCESS_MASK DesiredAccess,
73 POBJECT_ATTRIBUTES ObjectAttributes,
74 PIO_STATUS_BLOCK IoStatusBlock,
75 PLARGE_INTEGER AllocateSize,
76 ULONG FileAttributes,
77 ULONG ShareAccess,
78 ULONG CreateDisposition,
79 ULONG CreateOptions,
80 PVOID EaBuffer,
81 ULONG EaLength)
82 {
83 _AssertEqualWideString(CurrentTest->NtCreateFileParameters.ObjectName,
84 ObjectAttributes->ObjectName->Buffer);
85 _AssertEqualValue(CurrentTest->NtCreateFileParameters.DesiredAccess, DesiredAccess);
86 _AssertEqualValue(CurrentTest->NtCreateFileParameters.FileAttributes, FileAttributes);
87 _AssertEqualValue(CurrentTest->NtCreateFileParameters.ShareAccess, ShareAccess);
88 _AssertEqualValue(CurrentTest->NtCreateFileParameters.CreateDisposition, CreateDisposition);
89 _AssertEqualValue(CurrentTest->NtCreateFileParameters.CreateOptions, CreateOptions);
90 *FileHandle = TestHandle;
91 return STATUS_SUCCESS;
92 }
93
94 static _HOOK NtCreateFileHooks[] =
95 {
96 {"NtCreateFile", MockNtCreateFile},
97 {NULL, NULL}
98 };
99
100 static void TestFile()
101 {
102 HANDLE FileHandle;
103 int index;
104
105 _SetHooks(NtCreateFileHooks);
106 for (index = 0; index < sizeof(CreateFileTests) / sizeof(CreateFileTests[0]); index++)
107 {
108 CurrentTest = &CreateFileTests[index];
109 FileHandle = CreateFileW(CurrentTest->CreateFileParameters.lpFileName,
110 CurrentTest->CreateFileParameters.dwDesiredAccess,
111 CurrentTest->CreateFileParameters.dwShareMode,
112 CurrentTest->CreateFileParameters.lpSecurityAttributes,
113 CurrentTest->CreateFileParameters.dwCreationDisposition,
114 CurrentTest->CreateFileParameters.dwFlagsAndAttributes,
115 CurrentTest->CreateFileParameters.hTemplateFile);
116 _AssertEqualValue(NO_ERROR, GetLastError());
117 _AssertEqualValue(TestHandle, FileHandle);
118 }
119 _UnsetAllHooks();
120 }
121
122 static void RunTest()
123 {
124 TestFile();
125 }
126
127 _Dispatcher(CreatefileTest, "CreateFileW")
128
129 #endif