5 #include "../../include/debug.h"
7 #define TestFilename L"C:\\File"
8 #define TestExpectedFilename L"\\??\\" TestFilename
9 #define TestHandle (HANDLE) 1
14 DWORD dwDesiredAccess
;
16 LPSECURITY_ATTRIBUTES lpSecurityAttributes
;
17 DWORD dwCreationDisposition
;
18 DWORD dwFlagsAndAttributes
;
20 } CreateFile_PARAMETERS
;
25 ACCESS_MASK DesiredAccess
;
28 ULONG CreateDisposition
;
32 } NtCreateFile_PARAMETERS
;
36 CreateFile_PARAMETERS CreateFileParameters
;
37 NtCreateFile_PARAMETERS NtCreateFileParameters
;
38 } CreateFileTest_Parameters
;
40 static CreateFileTest_Parameters CreateFileTests
[] =
45 lpFileName
: TestFilename
,
46 dwDesiredAccess
: GENERIC_ALL
,
47 dwShareMode
: FILE_SHARE_WRITE
,
48 lpSecurityAttributes
: NULL
,
49 dwCreationDisposition
: CREATE_ALWAYS
,
50 dwFlagsAndAttributes
: 0,
53 NtCreateFileParameters
:
55 ObjectName
: TestExpectedFilename
,
56 DesiredAccess
: GENERIC_ALL
|SYNCHRONIZE
|FILE_READ_ATTRIBUTES
,
58 ShareAccess
: FILE_SHARE_WRITE
,
59 CreateDisposition
: FILE_OVERWRITE_IF
,
60 CreateOptions
: FILE_NON_DIRECTORY_FILE
|FILE_SYNCHRONOUS_IO_NONALERT
,
67 static CreateFileTest_Parameters
*CurrentTest
;
69 static NTSTATUS STDCALL
70 MockNtCreateFile(PHANDLE FileHandle
,
71 ACCESS_MASK DesiredAccess
,
72 POBJECT_ATTRIBUTES ObjectAttributes
,
73 PIO_STATUS_BLOCK IoStatusBlock
,
74 PLARGE_INTEGER AllocateSize
,
77 ULONG CreateDisposition
,
82 _AssertEqualWideString(CurrentTest
->NtCreateFileParameters
.ObjectName
,
83 ObjectAttributes
->ObjectName
->Buffer
);
84 _AssertEqualValue(CurrentTest
->NtCreateFileParameters
.DesiredAccess
, DesiredAccess
);
85 _AssertEqualValue(CurrentTest
->NtCreateFileParameters
.FileAttributes
, FileAttributes
);
86 _AssertEqualValue(CurrentTest
->NtCreateFileParameters
.ShareAccess
, ShareAccess
);
87 _AssertEqualValue(CurrentTest
->NtCreateFileParameters
.CreateDisposition
, CreateDisposition
);
88 _AssertEqualValue(CurrentTest
->NtCreateFileParameters
.CreateOptions
, CreateOptions
);
89 *FileHandle
= TestHandle
;
90 return STATUS_SUCCESS
;
93 static HOOK NtCreateFileHooks
[] =
95 {"NtCreateFile", MockNtCreateFile
},
99 static void TestFile()
104 _SetHooks(NtCreateFileHooks
);
105 for (index
= 0; index
< sizeof(CreateFileTests
) / sizeof(CreateFileTests
[0]); index
++)
107 CurrentTest
= &CreateFileTests
[index
];
108 FileHandle
= CreateFileW(CurrentTest
->CreateFileParameters
.lpFileName
,
109 CurrentTest
->CreateFileParameters
.dwDesiredAccess
,
110 CurrentTest
->CreateFileParameters
.dwShareMode
,
111 CurrentTest
->CreateFileParameters
.lpSecurityAttributes
,
112 CurrentTest
->CreateFileParameters
.dwCreationDisposition
,
113 CurrentTest
->CreateFileParameters
.dwFlagsAndAttributes
,
114 CurrentTest
->CreateFileParameters
.hTemplateFile
);
115 _AssertEqualValue(NO_ERROR
, GetLastError());
116 _AssertEqualValue(TestHandle
, FileHandle
);
121 static void RunTest()
126 _Dispatcher(CreatefileTest
, "CreateFileW")