Reactos
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: Test for NtQueryInformationFile
5 * COPYRIGHT: Copyright 2019 Thomas Faber (thomas.faber@reactos.org)
6 */
7
8#include "precomp.h"
9
10#define ntv6(x) (LOBYTE(LOWORD(GetVersion())) >= 6 ? (x) : 0)
11
12START_TEST(NtQueryInformationFile)
13{
14 NTSTATUS Status;
15
16 Status = NtQueryInformationFile(NULL, NULL, NULL, 0, 0);
17 ok(Status == STATUS_INVALID_INFO_CLASS ||
18 ntv6(Status == STATUS_NOT_IMPLEMENTED), "Status = %lx\n", Status);
19
20 Status = NtQueryInformationFile(NULL, NULL, NULL, 0, 0x80000000);
21 ok(Status == STATUS_INVALID_INFO_CLASS ||
22 ntv6(Status == STATUS_NOT_IMPLEMENTED), "Status = %lx\n", Status);
23
24 /* Get the full path of the current executable */
25 CHAR Path[MAX_PATH];
26 DWORD Length = GetModuleFileNameA(NULL, Path, _countof(Path));
27 ok(Length != 0, "GetModuleFileNameA failed\n");
28 if (Length == 0)
29 return;
30
31 /* Open the file */
32 HANDLE hFile = CreateFileA(Path,
33 GENERIC_READ,
34 FILE_SHARE_READ,
35 NULL,
36 OPEN_EXISTING,
37 FILE_ATTRIBUTE_NORMAL,
38 NULL);
39 ok(hFile != INVALID_HANDLE_VALUE, "CreateFileA failed\n");
40 if (hFile == INVALID_HANDLE_VALUE)
41 return;
42
43 /* Query FileEndOfFileInformation */
44 FILE_END_OF_FILE_INFORMATION EndOfFileInformation;
45 EndOfFileInformation.EndOfFile.QuadPart = 0xdeaddead;
46 Status = NtQueryInformationFile(hFile,
47 NULL,
48 &EndOfFileInformation,
49 sizeof(EndOfFileInformation),
50 FileEndOfFileInformation);
51 ok_hex(Status, STATUS_INVALID_INFO_CLASS);
52 ok(EndOfFileInformation.EndOfFile.QuadPart == 0xdeaddead, "EndOfFile is modified\n");
53
54 CloseHandle(hFile);
55}