2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite NPFS file information test
5 * PROGRAMMER: Pierre Schweitzer <pierre@reactos.org>
11 #define MAX_INSTANCES 1
13 #define OUT_QUOTA 4096
14 #define PIPE_NAME L"\\KmtestNpfsFileInfoTestPipe"
19 IN HANDLE ServerHandle
)
22 IO_STATUS_BLOCK IoStatusBlock
;
26 WCHAR PartialName
[50];
29 RtlFillMemory(&FileAllInfo
, sizeof(FileAllInfo
), 0xFF);
30 Status
= ZwQueryInformationFile(ServerHandle
,
35 ok_eq_hex(Status
, STATUS_SUCCESS
);
36 ok_eq_hex(IoStatusBlock
.Status
, STATUS_SUCCESS
);
37 ok_eq_longlong(FileAllInfo
.BasicInformation
.CreationTime
.QuadPart
, 0);
38 ok_eq_longlong(FileAllInfo
.BasicInformation
.LastAccessTime
.QuadPart
, 0);
39 ok_eq_longlong(FileAllInfo
.BasicInformation
.LastWriteTime
.QuadPart
, 0);
40 ok_eq_longlong(FileAllInfo
.BasicInformation
.ChangeTime
.QuadPart
, 0);
41 ok_eq_ulong(FileAllInfo
.BasicInformation
.FileAttributes
, FILE_ATTRIBUTE_NORMAL
);
42 ok_eq_longlong(FileAllInfo
.StandardInformation
.AllocationSize
.QuadPart
, 8192);
43 ok_eq_longlong(FileAllInfo
.StandardInformation
.EndOfFile
.QuadPart
, 0);
44 ok_eq_ulong(FileAllInfo
.StandardInformation
.NumberOfLinks
, 1);
45 ok_bool_true(FileAllInfo
.StandardInformation
.DeletePending
, "DeletePending");
46 ok_bool_false(FileAllInfo
.StandardInformation
.Directory
, "Directory");
47 ok(FileAllInfo
.InternalInformation
.IndexNumber
.QuadPart
!= 0xFFFFFFFFFFFFFFFF, "FileAllInfo.InternalInformation.IndexNumber = 0xFFFFFFFFFFFFFFFF, whereas it shouldn't\n");
48 ok(FileAllInfo
.InternalInformation
.IndexNumber
.QuadPart
!= 0, "FileAllInfo.InternalInformation.IndexNumber = 0, whereas it shouldn't\n");
49 ok_eq_ulong(FileAllInfo
.EaInformation
.EaSize
, 0);
50 ok_eq_ulong(FileAllInfo
.AccessInformation
.AccessFlags
, (FILE_GENERIC_READ
| FILE_GENERIC_WRITE
));
51 ok_eq_longlong(FileAllInfo
.PositionInformation
.CurrentByteOffset
.QuadPart
, 0);
52 ok_eq_ulong(FileAllInfo
.ModeInformation
.Mode
, FILE_SYNCHRONOUS_IO_NONALERT
);
53 ok_eq_ulong(FileAllInfo
.AlignmentInformation
.AlignmentRequirement
, 0);
54 ok_eq_ulong(FileAllInfo
.NameInformation
.FileNameLength
, sizeof(PIPE_NAME
) - sizeof(WCHAR
));
55 ok_eq_size(RtlCompareMemory(FileAllInfo
.NameInformation
.FileName
, PIPE_NAME
, sizeof(PIPE_NAME
) - sizeof(WCHAR
)), (sizeof(PIPE_NAME
) - sizeof(WCHAR
)));
56 ok_eq_wchar(FileAllInfo
.NameInformation
.FileName
[sizeof(PIPE_NAME
) / sizeof(WCHAR
) - 1], 0xFFFF);
57 ok_eq_ulong(IoStatusBlock
.Information
, (FIELD_OFFSET(FILE_ALL_INFORMATION
, NameInformation
.FileName
) + sizeof(PIPE_NAME
) - sizeof(WCHAR
)));
59 RtlFillMemory(&FileAllInfo
, sizeof(FileAllInfo
), 0xFF);
60 Status
= ZwQueryInformationFile(ServerHandle
,
63 sizeof(FILE_ALL_INFORMATION
) + 4 * sizeof(WCHAR
),
65 ok_eq_hex(Status
, STATUS_BUFFER_OVERFLOW
);
66 ok_eq_hex(IoStatusBlock
.Status
, STATUS_BUFFER_OVERFLOW
);
67 ok_eq_longlong(FileAllInfo
.BasicInformation
.CreationTime
.QuadPart
, 0);
68 ok_eq_longlong(FileAllInfo
.BasicInformation
.LastAccessTime
.QuadPart
, 0);
69 ok_eq_longlong(FileAllInfo
.BasicInformation
.LastWriteTime
.QuadPart
, 0);
70 ok_eq_longlong(FileAllInfo
.BasicInformation
.ChangeTime
.QuadPart
, 0);
71 ok_eq_ulong(FileAllInfo
.BasicInformation
.FileAttributes
, FILE_ATTRIBUTE_NORMAL
);
72 ok_eq_longlong(FileAllInfo
.StandardInformation
.AllocationSize
.QuadPart
, 8192);
73 ok_eq_longlong(FileAllInfo
.StandardInformation
.EndOfFile
.QuadPart
, 0);
74 ok_eq_ulong(FileAllInfo
.StandardInformation
.NumberOfLinks
, 1);
75 ok_bool_true(FileAllInfo
.StandardInformation
.DeletePending
, "DeletePending");
76 ok_bool_false(FileAllInfo
.StandardInformation
.Directory
, "Directory");
77 ok(FileAllInfo
.InternalInformation
.IndexNumber
.QuadPart
!= 0xFFFFFFFFFFFFFFFF, "FileAllInfo.InternalInformation.IndexNumber = 0xFFFFFFFFFFFFFFFF, whereas it shouldn't\n");
78 ok(FileAllInfo
.InternalInformation
.IndexNumber
.QuadPart
!= 0, "FileAllInfo.InternalInformation.IndexNumber = 0, whereas it shouldn't\n");
79 ok_eq_ulong(FileAllInfo
.EaInformation
.EaSize
, 0);
80 ok_eq_ulong(FileAllInfo
.AccessInformation
.AccessFlags
, (FILE_GENERIC_READ
| FILE_GENERIC_WRITE
));
81 ok_eq_longlong(FileAllInfo
.PositionInformation
.CurrentByteOffset
.QuadPart
, 0);
82 ok_eq_ulong(FileAllInfo
.ModeInformation
.Mode
, FILE_SYNCHRONOUS_IO_NONALERT
);
83 ok_eq_ulong(FileAllInfo
.AlignmentInformation
.AlignmentRequirement
, 0);
84 ok_eq_ulong(FileAllInfo
.NameInformation
.FileNameLength
, sizeof(PIPE_NAME
) - sizeof(WCHAR
));
85 ok_eq_size(RtlCompareMemory(FileAllInfo
.NameInformation
.FileName
, PIPE_NAME
, 6 * sizeof(WCHAR
)), (6 * sizeof(WCHAR
)));
86 ok_eq_wchar(FileAllInfo
.NameInformation
.FileName
[6], 0xFFFF);
87 ok_eq_ulong(IoStatusBlock
.Information
, (FIELD_OFFSET(FILE_ALL_INFORMATION
, NameInformation
.FileName
) + 6 * sizeof(WCHAR
)));
89 RtlFillMemory(&FileAllInfo
, sizeof(FileAllInfo
), 0xFF);
90 Status
= ZwQueryInformationFile(ServerHandle
,
93 sizeof(FILE_ALL_INFORMATION
) - 4,
95 ok_eq_hex(Status
, STATUS_BUFFER_OVERFLOW
);
96 ok_eq_hex(IoStatusBlock
.Status
, STATUS_BUFFER_OVERFLOW
);
97 ok_eq_longlong(FileAllInfo
.BasicInformation
.CreationTime
.QuadPart
, 0);
98 ok_eq_longlong(FileAllInfo
.BasicInformation
.LastAccessTime
.QuadPart
, 0);
99 ok_eq_longlong(FileAllInfo
.BasicInformation
.LastWriteTime
.QuadPart
, 0);
100 ok_eq_longlong(FileAllInfo
.BasicInformation
.ChangeTime
.QuadPart
, 0);
101 ok_eq_ulong(FileAllInfo
.BasicInformation
.FileAttributes
, FILE_ATTRIBUTE_NORMAL
);
102 ok_eq_longlong(FileAllInfo
.StandardInformation
.AllocationSize
.QuadPart
, 8192);
103 ok_eq_longlong(FileAllInfo
.StandardInformation
.EndOfFile
.QuadPart
, 0);
104 ok_eq_ulong(FileAllInfo
.StandardInformation
.NumberOfLinks
, 1);
105 ok_bool_true(FileAllInfo
.StandardInformation
.DeletePending
, "DeletePending");
106 ok_bool_false(FileAllInfo
.StandardInformation
.Directory
, "Directory");
107 ok(FileAllInfo
.InternalInformation
.IndexNumber
.QuadPart
!= 0xFFFFFFFFFFFFFFFF, "FileAllInfo.InternalInformation.IndexNumber = 0xFFFFFFFFFFFFFFFF, whereas it shouldn't\n");
108 ok(FileAllInfo
.InternalInformation
.IndexNumber
.QuadPart
!= 0, "FileAllInfo.InternalInformation.IndexNumber = 0, whereas it shouldn't\n");
109 ok_eq_ulong(FileAllInfo
.EaInformation
.EaSize
, 0);
110 ok_eq_ulong(FileAllInfo
.AccessInformation
.AccessFlags
, (FILE_GENERIC_READ
| FILE_GENERIC_WRITE
));
111 ok_eq_longlong(FileAllInfo
.PositionInformation
.CurrentByteOffset
.QuadPart
, 0);
112 ok_eq_ulong(FileAllInfo
.ModeInformation
.Mode
, FILE_SYNCHRONOUS_IO_NONALERT
);
113 ok_eq_ulong(FileAllInfo
.AlignmentInformation
.AlignmentRequirement
, 0);
114 ok_eq_ulong(FileAllInfo
.NameInformation
.FileNameLength
, sizeof(PIPE_NAME
) - sizeof(WCHAR
));
115 ok_eq_wchar(FileAllInfo
.NameInformation
.FileName
[0], 0xFFFF);
116 ok_eq_ulong(IoStatusBlock
.Information
, (sizeof(FILE_ALL_INFORMATION
) - 4));
119 static KSTART_ROUTINE RunTest
;
129 UNREFERENCED_PARAMETER(Context
);
131 ServerHandle
= INVALID_HANDLE_VALUE
;
132 Status
= NpCreatePipe(&ServerHandle
,
133 DEVICE_NAMED_PIPE PIPE_NAME
,
134 BYTE_STREAM
, QUEUE
, BYTE_STREAM
, DUPLEX
,
138 ok_eq_hex(Status
, STATUS_SUCCESS
);
139 ok(ServerHandle
!= NULL
&& ServerHandle
!= INVALID_HANDLE_VALUE
, "ServerHandle = %p\n", ServerHandle
);
140 if (!skip(NT_SUCCESS(Status
) && ServerHandle
!= NULL
&& ServerHandle
!= INVALID_HANDLE_VALUE
, "No pipe\n"))
142 TestFileInfo(ServerHandle
);
143 ObCloseHandle(ServerHandle
, KernelMode
);
147 START_TEST(NpfsFileInfo
)
151 Thread
= KmtStartThread(RunTest
, NULL
);
152 KmtFinishThread(Thread
, NULL
);