8 #define TestFilename L"C:\\File"
9 #define TestExpectedFilename L"\\??\\" TestFilename
10 #define TestHandle (HANDLE) 1
15 DWORD dwDesiredAccess
;
17 LPSECURITY_ATTRIBUTES lpSecurityAttributes
;
18 DWORD dwCreationDisposition
;
19 DWORD dwFlagsAndAttributes
;
21 } CreateFile_PARAMETERS
;
26 ACCESS_MASK DesiredAccess
;
29 ULONG CreateDisposition
;
33 } NtCreateFile_PARAMETERS
;
37 CreateFile_PARAMETERS CreateFileParameters
;
38 NtCreateFile_PARAMETERS NtCreateFileParameters
;
39 } CreateFileTest_Parameters
;
41 static CreateFileTest_Parameters CreateFileTests
[] =
46 lpFileName
: TestFilename
,
47 dwDesiredAccess
: GENERIC_ALL
,
48 dwShareMode
: FILE_SHARE_WRITE
,
49 lpSecurityAttributes
: NULL
,
50 dwCreationDisposition
: CREATE_ALWAYS
,
51 dwFlagsAndAttributes
: 0,
54 NtCreateFileParameters
:
56 ObjectName
: TestExpectedFilename
,
57 DesiredAccess
: GENERIC_ALL
|SYNCHRONIZE
|FILE_READ_ATTRIBUTES
,
59 ShareAccess
: FILE_SHARE_WRITE
,
60 CreateDisposition
: FILE_OVERWRITE_IF
,
61 CreateOptions
: FILE_NON_DIRECTORY_FILE
|FILE_SYNCHRONOUS_IO_NONALERT
,
68 static CreateFileTest_Parameters
*CurrentTest
;
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
,
78 ULONG CreateDisposition
,
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
;
94 static _HOOK NtCreateFileHooks
[] =
96 {"NtCreateFile", MockNtCreateFile
},
100 static void TestFile()
105 _SetHooks(NtCreateFileHooks
);
106 for (index
= 0; index
< sizeof(CreateFileTests
) / sizeof(CreateFileTests
[0]); index
++)
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
);
122 static void RunTest()
127 _Dispatcher(CreatefileTest
, "CreateFileW")