[KMTESTS:FSRTL] Fix all FsRtlLargeMcbTestsFastFat() checks
[reactos.git] / modules / rostests / kmtests / ntos_fsrtl / FsRtlMcb.c
1 /*
2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite FsRtl Test
5 * PROGRAMMER: Pierre Schweitzer <pierre.schweitzer@reactos.org>
6 */
7
8 #include <kmt_test.h>
9
10 #define NDEBUG
11 #include <debug.h>
12
13 static VOID FsRtlMcbTest()
14 {
15 }
16
17 static VOID DumpAllRuns(PLARGE_MCB Mcb)
18 {
19 ULONG i;
20 LONGLONG Vbn, Lbn, Count;
21
22 trace("MCB %p:\n", Mcb);
23
24 for (i = 0; FsRtlGetNextLargeMcbEntry(Mcb, i, &Vbn, &Lbn, &Count); i++)
25 {
26 // print out vbn, lbn, and count
27 trace("\t[%I64d,%I64d,%I64d]\n", Vbn, Lbn, Count);
28 }
29 trace("\n");
30 }
31
32 static VOID FsRtlLargeMcbTest()
33 {
34 LARGE_MCB LargeMcb;
35 ULONG NbRuns, Index;
36 LONGLONG Vbn, Lbn, SectorCount, StartingLbn, CountFromStartingLbn;
37
38 FsRtlInitializeLargeMcb(&LargeMcb, PagedPool);
39
40 ok(FsRtlLookupLastLargeMcbEntry(&LargeMcb, &Vbn, &Lbn) == FALSE, "expected FALSE, got TRUE\n");
41 ok(FsRtlLookupLastLargeMcbEntryAndIndex(&LargeMcb, &Vbn, &Lbn, &Index) == FALSE, "expected FALSE, got TRUE\n");
42
43 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 1, 1, 1024) == TRUE, "expected TRUE, got FALSE\n");
44 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
45 ok(NbRuns == 2, "Expected 2 runs, got: %lu\n", NbRuns);
46 DumpAllRuns(&LargeMcb); // [0,-1,1][1,1,1024] [vbn,lbn,sc]
47 ok(FsRtlLookupLastLargeMcbEntry(&LargeMcb, &Vbn, &Lbn) == TRUE, "expected TRUE, got FALSE\n");
48 ok(Vbn == 1024, "Expected Vbn 1024, got: %I64d\n", Vbn);
49 ok(Lbn == 1024, "Expected Lbn 1024, got: %I64d\n", Lbn);
50 ok(FsRtlLookupLastLargeMcbEntryAndIndex(&LargeMcb, &Vbn, &Lbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
51 ok(Vbn == 1024, "Expected Vbn 1024, got: %I64d\n", Vbn);
52 ok(Lbn == 1024, "Expected Lbn 1024, got: %I64d\n", Lbn);
53 ok(Index == 1, "Expected Index 1, got: %lu\n", Index);
54
55 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 2048, 2, 1024) == TRUE, "expected TRUE, got FALSE\n");
56 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
57 ok(NbRuns == 4, "Expected 4 runs, got: %lu\n", NbRuns);
58 DumpAllRuns(&LargeMcb); // [0,-1,1][1,1,1024][1025,-1,1023][2048,2,1024] ======= [(0,1) hole] [(1,1025)=>(1,1025)] [(1025, 2048) hole] [(2048,3072)=>(2,1026)]
59 ok(FsRtlLookupLastLargeMcbEntry(&LargeMcb, &Vbn, &Lbn) == TRUE, "expected TRUE, got FALSE\n");
60 ok(Vbn == 3071, "Expected Vbn 3071, got: %I64d\n", Vbn);
61 ok(Lbn == 1025, "Expected Lbn 1025, got: %I64d\n", Lbn);
62 ok(FsRtlLookupLastLargeMcbEntryAndIndex(&LargeMcb, &Vbn, &Lbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
63 ok(Vbn == 3071, "Expected Vbn 3071, got: %I64d\n", Vbn);
64 ok(Lbn == 1025, "Expected Lbn 1025, got: %I64d\n", Lbn);
65 ok(Index == 3, "Expected Index 3, got: %lu\n", Index);
66
67 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
68 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
69 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
70 ok(SectorCount == 1, "Expected SectorCount 1, got: %I64d\n", SectorCount);
71
72 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 1, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
73 ok(Vbn == 1, "Expected Vbn 1, got: %I64d\n", Vbn);
74 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
75 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
76
77 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 2, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
78 ok(Vbn == 1025, "Expected Vbn 1025, got: %I64d\n", Vbn);
79 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
80 ok(SectorCount == 1023, "Expected SectorCount 1023, got: %I64d\n", SectorCount);
81
82 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 3, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
83 ok(Vbn == 2048, "Expected Vbn 2048, got: %I64d\n", Vbn);
84 ok(Lbn == 2, "Expected Lbn 2, got: %I64d\n", Lbn);
85 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
86
87 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 4, &Vbn, &Lbn, &SectorCount) == FALSE, "expected FALSE, got TRUE\n");
88
89 ok(FsRtlLookupLargeMcbEntry(&LargeMcb, 1, &Lbn, &SectorCount, &StartingLbn, &CountFromStartingLbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
90 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
91 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
92 ok(StartingLbn == 1, "Expected StartingLbn 1, got: %I64d\n", StartingLbn);
93 ok(CountFromStartingLbn == 1024, "Expected CountFromStartingLbn 1024, got: %I64d\n", CountFromStartingLbn);
94 ok(Index == 1, "Expected Index 1, got: %lu\n", Index);
95
96 ok(FsRtlLookupLargeMcbEntry(&LargeMcb, 2048, &Lbn, &SectorCount, &StartingLbn, &CountFromStartingLbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
97 ok(Lbn == 2, "Expected Lbn 2, got: %I64d\n", Lbn);
98 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
99 ok(StartingLbn == 2, "Expected StartingLbn 2, got: %I64d\n", StartingLbn);
100 ok(CountFromStartingLbn == 1024, "Expected CountFromStartingLbn 1024, got: %I64d\n", CountFromStartingLbn);
101 ok(Index == 3, "Expected Index 3, got: %lu\n", Index);
102
103 ok(FsRtlLookupLargeMcbEntry(&LargeMcb, 3073, &Lbn, &SectorCount, &StartingLbn, &CountFromStartingLbn, &Index) == FALSE, "expected FALSE, got TRUE\n");
104
105 FsRtlRemoveLargeMcbEntry(&LargeMcb, 1, 1024);
106 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
107 ok(NbRuns == 2, "Expected 2 runs, got: %lu\n", NbRuns);
108 DumpAllRuns(&LargeMcb); // [0,-1,2048][2048,2,1024]
109 ok(FsRtlLookupLargeMcbEntry(&LargeMcb, 512, &Lbn, &SectorCount, &StartingLbn, &CountFromStartingLbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
110 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
111 ok(SectorCount == 1536, "Expected SectorCount 1536, got: %I64d\n", SectorCount);
112 ok(StartingLbn == -1, "Expected StartingLbn -1, got: %I64d\n", StartingLbn);
113 ok(CountFromStartingLbn == 2048, "Expected CountFromStartingLbn 2048, got: %I64d\n", CountFromStartingLbn);
114 ok(Index == 0, "Expected Index 0, got: %lu\n", Index);
115 ok(FsRtlLookupLastLargeMcbEntryAndIndex(&LargeMcb, &Vbn, &Lbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
116 ok(Vbn == 3071, "Expected Vbn 3071, got: %I64d\n", Vbn);
117 ok(Lbn == 1025, "Expected Lbn 1025, got: %I64d\n", Lbn);
118 ok(Index == 1, "Expected Index 1, got: %lu\n", Index);
119
120 ok(FsRtlSplitLargeMcb(&LargeMcb, 2048, 1024) == TRUE, "expected TRUE, got FALSE\n");
121 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
122 ok(NbRuns == 2, "Expected 2 runs, got: %lu\n", NbRuns);
123 DumpAllRuns(&LargeMcb); // [0,-1,3072][3072,2,1024]
124 ok(FsRtlLookupLastLargeMcbEntryAndIndex(&LargeMcb, &Vbn, &Lbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
125 ok(Vbn == 4095, "Expected Vbn 4095, got: %I64d\n", Vbn);
126 ok(Lbn == 1025, "Expected Lbn 1025, got: %I64d\n", Lbn);
127 ok(Index == 1, "Expected Index 1, got: %lu\n", Index);
128 ok(FsRtlLookupLargeMcbEntry(&LargeMcb, 2048, &Lbn, &SectorCount, &StartingLbn, &CountFromStartingLbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
129 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
130 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
131 ok(StartingLbn == -1, "Expected StartingLbn -1, got: %I64d\n", StartingLbn);
132 ok(CountFromStartingLbn == 3072, "Expected CountFromStartingLbn 3072, got: %I64d\n", CountFromStartingLbn);
133 ok(Index == 0, "Expected Index 0, got: %lu\n", Index);
134 ok(FsRtlLookupLargeMcbEntry(&LargeMcb, 3072, &Lbn, &SectorCount, &StartingLbn, &CountFromStartingLbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
135 ok(Lbn == 2, "Expected Lbn 2, got: %I64d\n", Lbn);
136 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
137 ok(StartingLbn == 2, "Expected StartingLbn 2, got: %I64d\n", StartingLbn);
138 ok(CountFromStartingLbn == 1024, "Expected CountFromStartingLbn 1024, got: %I64d\n", CountFromStartingLbn);
139 ok(Index == 1, "Expected Index 1, got: %lu\n", Index);
140
141 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 3584, 3, 1024) == FALSE, "expected FALSE, got TRUE\n");
142
143 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 4095, 1025, 1024) == TRUE, "expected TRUE, got FALSE\n");
144 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
145 ok(NbRuns == 2, "Expected 2 runs, got: %lu\n", NbRuns);
146 DumpAllRuns(&LargeMcb); // [0,-1,3072][3072,2,2047]
147 ok(FsRtlLookupLastLargeMcbEntry(&LargeMcb, &Vbn, &Lbn) == TRUE, "expected TRUE, got FALSE\n");
148 ok(Vbn == 5118, "Expected Vbn 5118, got: %I64d\n", Vbn);
149 ok(Lbn == 2048, "Expected Lbn 2048, got: %I64d\n", Lbn);
150 ok(FsRtlLookupLastLargeMcbEntryAndIndex(&LargeMcb, &Vbn, &Lbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
151 ok(Vbn == 5118, "Expected Vbn 5118, got: %I64d\n", Vbn);
152 ok(Lbn == 2048, "Expected Lbn 2048, got: %I64d\n", Lbn);
153 ok(Index == 1, "Expected Index 1, got: %lu\n", Index);
154
155 FsRtlTruncateLargeMcb(&LargeMcb, 4607);
156 DumpAllRuns(&LargeMcb); // [0,-1,3072][3072,2,1535]
157 ok(FsRtlLookupLargeMcbEntry(&LargeMcb, 4095, &Lbn, &SectorCount, &StartingLbn, &CountFromStartingLbn, &Index) == TRUE, "expected TRUE, got FALSE\n");
158 ok(Lbn == 1025, "Expected Lbn 1025, got: %I64d\n", Lbn);
159 ok(SectorCount == 512, "Expected SectorCount 512, got: %I64d\n", SectorCount);
160 ok(StartingLbn == 2, "Expected StartingLbn 2, got: %I64d\n", StartingLbn);
161 ok(CountFromStartingLbn == 1535, "Expected CountFromStartingLbn 1535, got: %I64d\n", CountFromStartingLbn);
162 ok(Index == 1, "Expected Index 1, got: %lu\n", Index);
163
164 FsRtlUninitializeLargeMcb(&LargeMcb);
165
166 FsRtlInitializeLargeMcb(&LargeMcb, PagedPool);
167 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
168 ok(NbRuns == 0, "Expected 0 runs, got: %lu\n", NbRuns);
169
170 /* Create a mapping with three holes between each mapping
171 * It looks like that:
172 * ----//////-----/////-----///////
173 */
174 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 1024, 1025, 1024) == TRUE, "expected TRUE, got FALSE\n");
175 DumpAllRuns(&LargeMcb); // [0,-1,1024][1024,1024,1024]
176 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 3072, 3072, 1024) == TRUE, "expected TRUE, got FALSE\n");
177 DumpAllRuns(&LargeMcb); // [0,-1,1024][1024,1024,1024][2048,-1,1024][3072,3072,1024]
178 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 5120, 5120, 1024) == TRUE, "expected TRUE, got FALSE\n");
179 DumpAllRuns(&LargeMcb); // [0,-1,1024][1024,1024,1024][2048,-1,1024][3072,3072,1024][4096,-1,1024][5120,5120,1024]
180
181 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
182 ok(NbRuns == 6, "Expected 6 runs, got: %lu\n", NbRuns);
183
184 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
185 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
186 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
187 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
188
189 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 1, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
190 ok(Vbn == 1024, "Expected Vbn 1024, got: %I64d\n", Vbn);
191 ok(Lbn == 1025, "Expected Lbn 1024, got: %I64d\n", Lbn);
192 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
193
194 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 2, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
195 ok(Vbn == 2048, "Expected Vbn 2048, got: %I64d\n", Vbn);
196 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
197 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
198
199 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 3, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
200 ok(Vbn == 3072, "Expected Vbn 3072, got: %I64d\n", Vbn);
201 ok(Lbn == 3072, "Expected Lbn 3072, got: %I64d\n", Lbn);
202 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
203
204 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 4, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
205 ok(Vbn == 4096, "Expected Vbn 4096, got: %I64d\n", Vbn);
206 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
207 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
208
209 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 5, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
210 ok(Vbn == 5120, "Expected Vbn 5120, got: %I64d\n", Vbn);
211 ok(Lbn == 5120, "Expected Lbn 5120, got: %I64d\n", Lbn);
212 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
213
214 /* Fill first hole */
215 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 0, 1, 1024) == TRUE, "expected TRUE, got FALSE\n");
216 DumpAllRuns(&LargeMcb); // [0,1,2048][2048,-1,1024][3072,3072,1024][4096,-1,1024][5120,5120,1024]
217
218 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
219 ok(NbRuns == 5, "Expected 5 runs, got: %lu\n", NbRuns);
220
221 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
222 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
223 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
224 ok(SectorCount == 2048, "Expected SectorCount 2048, got: %I64d\n", SectorCount);
225
226 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 1, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
227 ok(Vbn == 2048, "Expected Vbn 2048, got: %I64d\n", Vbn);
228 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
229 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
230
231 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 2, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
232 ok(Vbn == 3072, "Expected Vbn 3072, got: %I64d\n", Vbn);
233 ok(Lbn == 3072, "Expected Lbn 3072, got: %I64d\n", Lbn);
234 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
235
236 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 3, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
237 ok(Vbn == 4096, "Expected Vbn 4096, got: %I64d\n", Vbn);
238 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
239 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
240
241 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 4, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
242 ok(Vbn == 5120, "Expected Vbn 5120, got: %I64d\n", Vbn);
243 ok(Lbn == 5120, "Expected Lbn 5120, got: %I64d\n", Lbn);
244 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
245
246 /* Fill half of the last hole and overlap */
247 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 4608, 4608, 1024) == TRUE, "expected TRUE, got FALSE\n");
248 DumpAllRuns(&LargeMcb); // [0,1,2048][2048,-1,1024][3072,3072,1024][4096,-1,512][4608,4608,1536]
249
250 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
251 ok(NbRuns == 5, "Expected 5 runs, got: %lu\n", NbRuns);
252
253 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
254 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
255 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
256 ok(SectorCount == 2048, "Expected SectorCount 2048, got: %I64d\n", SectorCount);
257
258 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 1, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
259 ok(Vbn == 2048, "Expected Vbn 2048, got: %I64d\n", Vbn);
260 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
261 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
262
263 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 2, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
264 ok(Vbn == 3072, "Expected Vbn 3072, got: %I64d\n", Vbn);
265 ok(Lbn == 3072, "Expected Lbn 3072, got: %I64d\n", Lbn);
266 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
267
268 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 3, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
269 ok(Vbn == 4096, "Expected Vbn 4096, got: %I64d\n", Vbn);
270 ok(Lbn == -1, "Expected Lbn -1, got: %I64d\n", Lbn);
271 ok(SectorCount == 512, "Expected SectorCount 512, got: %I64d\n", SectorCount);
272
273 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 4, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
274 ok(Vbn == 4608, "Expected Vbn 4608, got: %I64d\n", Vbn);
275 ok(Lbn == 4608, "Expected Lbn 4608, got: %I64d\n", Lbn);
276 ok(SectorCount == 1536, "Expected SectorCount 1536, got: %I64d\n", SectorCount);
277
278 FsRtlUninitializeLargeMcb(&LargeMcb);
279
280 FsRtlInitializeLargeMcb(&LargeMcb, PagedPool);
281 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
282 ok(NbRuns == 0, "Expected 0 runs, got: %lu\n", NbRuns);
283
284 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 0, 1, 1024) == TRUE, "expected TRUE, got FALSE\n");
285 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
286 ok(NbRuns == 1, "Expected 1 runs, got: %lu\n", NbRuns);
287 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
288 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
289 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
290 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
291 DumpAllRuns(&LargeMcb);
292
293 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 0, 2, 1024) == FALSE, "expected FALSE, got TRUE\n");
294 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
295 ok(NbRuns == 1, "Expected 1 runs, got: %lu\n", NbRuns);
296 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
297 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
298 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
299 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
300 DumpAllRuns(&LargeMcb);
301
302 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 0, 0, 1024) == FALSE, "expected FALSE, got TRUE\n");
303 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
304 ok(NbRuns == 1, "Expected 1 runs, got: %lu\n", NbRuns);
305 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
306 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
307 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
308 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
309 DumpAllRuns(&LargeMcb);
310
311 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 1, 2, 1023) == TRUE, "expected TRUE, got FALSE\n");
312 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
313 ok(NbRuns == 1, "Expected 1 runs, got: %lu\n", NbRuns);
314 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
315 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
316 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
317 ok(SectorCount == 1024, "Expected SectorCount 1024, got: %I64d\n", SectorCount);
318 DumpAllRuns(&LargeMcb);
319
320 FsRtlUninitializeLargeMcb(&LargeMcb);
321
322 FsRtlInitializeLargeMcb(&LargeMcb, PagedPool);
323 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
324 ok(NbRuns == 0, "Expected 0 runs, got: %lu\n", NbRuns);
325
326 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 0, 1, 1) == TRUE, "expected TRUE, got FALSE\n");
327 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
328 ok(NbRuns == 1, "Expected 1 runs, got: %lu\n", NbRuns);
329 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
330 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
331 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
332 ok(SectorCount == 1, "Expected SectorCount 1, got: %I64d\n", SectorCount);
333 DumpAllRuns(&LargeMcb);
334
335
336 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 1, 10, 1) == TRUE, "expected TRUE, got FALSE\n");
337 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
338 ok(NbRuns == 2, "Expected 2 runs, got: %lu\n", NbRuns);
339 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
340 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
341 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
342 ok(SectorCount == 1, "Expected SectorCount 1, got: %I64d\n", SectorCount);
343 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 1, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
344 ok(Vbn == 1, "Expected Vbn 1, got: %I64d\n", Vbn);
345 ok(Lbn == 10, "Expected Lbn 10, got: %I64d\n", Lbn);
346 ok(SectorCount == 1, "Expected SectorCount 1, got: %I64d\n", SectorCount);
347 DumpAllRuns(&LargeMcb);
348
349 ok(FsRtlAddLargeMcbEntry(&LargeMcb, 2, 20, 1) == TRUE, "expected TRUE, got FALSE\n");
350 NbRuns = FsRtlNumberOfRunsInLargeMcb(&LargeMcb);
351 ok(NbRuns == 3, "Expected 3 runs, got: %lu\n", NbRuns);
352 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 0, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
353 ok(Vbn == 0, "Expected Vbn 0, got: %I64d\n", Vbn);
354 ok(Lbn == 1, "Expected Lbn 1, got: %I64d\n", Lbn);
355 ok(SectorCount == 1, "Expected SectorCount 1, got: %I64d\n", SectorCount);
356 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 1, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
357 ok(Vbn == 1, "Expected Vbn 1, got: %I64d\n", Vbn);
358 ok(Lbn == 10, "Expected Lbn 10, got: %I64d\n", Lbn);
359 ok(SectorCount == 1, "Expected SectorCount 1, got: %I64d\n", SectorCount);
360 ok(FsRtlGetNextLargeMcbEntry(&LargeMcb, 2, &Vbn, &Lbn, &SectorCount) == TRUE, "expected TRUE, got FALSE\n");
361 ok(Vbn == 2, "Expected Vbn 2, got: %I64d\n", Vbn);
362 ok(Lbn == 20, "Expected Lbn 20, got: %I64d\n", Lbn);
363 ok(SectorCount == 1, "Expected SectorCount 1, got: %I64d\n", SectorCount);
364 DumpAllRuns(&LargeMcb);
365
366 FsRtlUninitializeLargeMcb(&LargeMcb);
367 }
368
369 static VOID FsRtlLargeMcbTestsExt2()
370 {
371 LARGE_MCB FirstMcb, SecondMcb;
372 LONGLONG Lbn, SectorCountFromLbn, StartingLbn, SectorCountFromStartingLbn, Vbn, SectorCount;
373 ULONG Index, NbRuns;
374 BOOLEAN Result;
375
376 FsRtlInitializeLargeMcb(&FirstMcb, PagedPool);
377 FsRtlInitializeLargeMcb(&SecondMcb, PagedPool);
378
379 FsRtlTruncateLargeMcb(&FirstMcb, 0);
380 FsRtlTruncateLargeMcb(&SecondMcb, 0);
381
382 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 1, &Lbn, &SectorCountFromLbn, NULL, NULL, NULL);
383 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
384
385 Result = FsRtlAddLargeMcbEntry(&FirstMcb, 1, 198657, 1);
386 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
387
388 DumpAllRuns(&FirstMcb);
389
390 NbRuns = FsRtlNumberOfRunsInLargeMcb(&FirstMcb);
391 ok(NbRuns == 2, "Expected 2 runs, got: %lu\n", NbRuns);
392
393 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 1, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
394 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
395 ok(Lbn == 198657LL, "Expected Lbn 198657, got: %I64d\n", Lbn);
396 ok(SectorCountFromLbn == 1LL, "Expected SectorCountFromLbn 1, got: %I64d\n", SectorCountFromLbn);
397 ok(StartingLbn == 198657LL, "Expected StartingLbn 198657, got: %I64d\n", StartingLbn);
398 ok(SectorCountFromStartingLbn == 1LL, "Expected SectorCountFromStartingLbn 1, got: %I64d\n", SectorCountFromStartingLbn);
399 ok(Index == 1, "Expected Index 1, got: %d\n", Index);
400
401 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 2, &Lbn, &SectorCountFromLbn, NULL, NULL, NULL);
402 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
403
404 Result = FsRtlAddLargeMcbEntry(&FirstMcb, 2, 199169, 11);
405 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
406
407 DumpAllRuns(&FirstMcb);
408
409 NbRuns = FsRtlNumberOfRunsInLargeMcb(&FirstMcb);
410 ok(NbRuns == 3, "Expected 3 runs, got: %lu\n", NbRuns);
411
412 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 2, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
413 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
414 ok(Lbn == 199169LL, "Expected Lbn 199169, got: %I64d\n", Lbn);
415 ok(SectorCountFromLbn == 11LL, "Expected SectorCountFromLbn 11, got: %I64d\n", SectorCountFromLbn);
416 ok(StartingLbn == 199169LL, "Expected StartingLbn 199169, got: %I64d\n", StartingLbn);
417 ok(SectorCountFromStartingLbn == 11LL, "Expected SectorCountFromStartingLbn 11, got: %I64d\n", SectorCountFromStartingLbn);
418 ok(Index == 2, "Expected Index 2, got: %d\n", Index);
419
420 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 0, &Vbn, &Lbn, &SectorCount);
421 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
422 ok(Vbn == 0LL, "Expected Vbn 0, got: %I64d\n", Vbn);
423 ok(Lbn == -1LL, "Expected Lbn -1, got: %I64d\n", Lbn);
424 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
425
426 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 1, &Vbn, &Lbn, &SectorCount);
427 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
428 ok(Vbn == 1LL, "Expected Vbn 1, got: %I64d\n", Vbn);
429 ok(Lbn == 198657LL, "Expected Lbn 198657, got: %I64d\n", Lbn);
430 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
431
432 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 2, &Vbn, &Lbn, &SectorCount);
433 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
434 ok(Vbn == 2LL, "Expected Vbn 2, got: %I64d\n", Vbn);
435 ok(Lbn == 199169LL, "Expected Lbn 199169, got: %I64d\n", Lbn);
436 ok(SectorCount == 11LL, "Expected SectorCount 11, got: %I64d\n", SectorCount);
437
438 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 3, &Vbn, &Lbn, &SectorCount);
439 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
440
441 Result = FsRtlAddLargeMcbEntry(&SecondMcb, 197128, 197128, 1);
442 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
443
444 Result = FsRtlLookupLargeMcbEntry(&SecondMcb, 197128, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
445 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
446 ok(Lbn == 197128LL, "Expected Lbn 197128, got: %I64d\n", Lbn);
447 ok(SectorCountFromLbn == 1LL, "Expected SectorCountFromLbn 1, got: %I64d\n", SectorCountFromLbn);
448 ok(StartingLbn == 197128LL, "Expected StartingLbn 197128, got: %I64d\n", StartingLbn);
449 ok(SectorCountFromStartingLbn == 1LL, "Expected SectorCountFromStartingLbn 1, got: %I64d\n", SectorCountFromStartingLbn);
450 ok(Index == 1, "Expected Index 1, got: %d\n", Index);
451
452 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 13, &Lbn, &SectorCountFromLbn, NULL, NULL, NULL);
453 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
454
455 Result = FsRtlAddLargeMcbEntry(&FirstMcb, 13, 199180, 4);
456 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
457
458 DumpAllRuns(&FirstMcb);
459
460 NbRuns = FsRtlNumberOfRunsInLargeMcb(&FirstMcb);
461 ok(NbRuns == 3, "Expected 3 runs, got: %lu\n", NbRuns);
462
463 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 13, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
464 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
465 ok(Lbn == 199180LL, "Expected Lbn 199180, got: %I64d\n", Lbn);
466 ok(SectorCountFromLbn == 4LL, "Expected SectorCountFromLbn 4, got: %I64d\n", SectorCountFromLbn);
467 ok(StartingLbn == 199169LL, "Expected StartingLbn 199169, got: %I64d\n", StartingLbn);
468 ok(SectorCountFromStartingLbn == 15LL, "Expected SectorCountFromStartingLbn 15, got: %I64d\n", SectorCountFromStartingLbn);
469 ok(Index == 2, "Expected Index 2, got: %d\n", Index);
470
471 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 0, &Vbn, &Lbn, &SectorCount);
472 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
473 ok(Vbn == 0LL, "Expected Vbn 0, got: %I64d\n", Vbn);
474 ok(Lbn == -1LL, "Expected Lbn -1, got: %I64d\n", Lbn);
475 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
476
477 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 1, &Vbn, &Lbn, &SectorCount);
478 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
479 ok(Vbn == 1LL, "Expected Vbn 1, got: %I64d\n", Vbn);
480 ok(Lbn == 198657LL, "Expected Lbn 198657, got: %I64d\n", Lbn);
481 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
482
483 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 2, &Vbn, &Lbn, &SectorCount);
484 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
485 ok(Vbn == 2LL, "Expected Vbn 2, got: %I64d\n", Vbn);
486 ok(Lbn == 199169LL, "Expected Lbn 199169, got: %I64d\n", Lbn);
487 ok(SectorCount == 15LL, "Expected SectorCount 15, got: %I64d\n", SectorCount);
488
489 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 3, &Vbn, &Lbn, &SectorCount);
490 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
491
492 Result = FsRtlAddLargeMcbEntry(&SecondMcb, 197128, 197128, 1);
493 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
494
495 Result = FsRtlLookupLargeMcbEntry(&SecondMcb, 197128, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
496 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
497 ok(Lbn == 197128LL, "Expected Lbn 197128, got: %I64d\n", Lbn);
498 ok(SectorCountFromLbn == 1LL, "Expected SectorCountFromLbn 1, got: %I64d\n", SectorCountFromLbn);
499 ok(StartingLbn == 197128LL, "Expected StartingLbn 197128, got: %I64d\n", StartingLbn);
500 ok(SectorCountFromStartingLbn == 1LL, "Expected SectorCountFromStartingLbn 1, got: %I64d\n", SectorCountFromStartingLbn);
501 ok(Index == 1, "Expected Index 1, got: %d\n", Index);
502
503 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 17, &Lbn, &SectorCountFromLbn, NULL, NULL, NULL);
504 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
505
506 Result = FsRtlAddLargeMcbEntry(&FirstMcb, 17, 1105, 16);
507 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
508
509 DumpAllRuns(&FirstMcb);
510
511 NbRuns = FsRtlNumberOfRunsInLargeMcb(&FirstMcb);
512 ok(NbRuns == 4, "Expected 4 runs, got: %lu\n", NbRuns);
513
514 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 17, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
515 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
516 ok(Lbn == 1105LL, "Expected Lbn 1105, got: %I64d\n", Lbn);
517 ok(SectorCountFromLbn == 16LL, "Expected SectorCountFromLbn 16, got: %I64d\n", SectorCountFromLbn);
518 ok(StartingLbn == 1105LL, "Expected StartingLbn 1105, got: %I64d\n", StartingLbn);
519 ok(SectorCountFromStartingLbn == 16LL, "Expected SectorCountFromStartingLbn 16, got: %I64d\n", SectorCountFromStartingLbn);
520 ok(Index == 3, "Expected Index 3, got: %d\n", Index);
521
522 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 0, &Vbn, &Lbn, &SectorCount);
523 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
524 ok(Vbn == 0LL, "Expected Vbn 0, got: %I64d\n", Vbn);
525 ok(Lbn == -1LL, "Expected Lbn -1, got: %I64d\n", Lbn);
526 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
527
528 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 1, &Vbn, &Lbn, &SectorCount);
529 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
530 ok(Vbn == 1LL, "Expected Vbn 1, got: %I64d\n", Vbn);
531 ok(Lbn == 198657LL, "Expected Lbn 198657, got: %I64d\n", Lbn);
532 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
533
534 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 2, &Vbn, &Lbn, &SectorCount);
535 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
536 ok(Vbn == 2LL, "Expected Vbn 2, got: %I64d\n", Vbn);
537 ok(Lbn == 199169LL, "Expected Lbn 199169, got: %I64d\n", Lbn);
538 ok(SectorCount == 15LL, "Expected SectorCount 15, got: %I64d\n", SectorCount);
539
540 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 3, &Vbn, &Lbn, &SectorCount);
541 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
542 ok(Vbn == 17LL, "Expected Vbn 17, got: %I64d\n", Vbn);
543 ok(Lbn == 1105LL, "Expected Lbn 1105, got: %I64d\n", Lbn);
544 ok(SectorCount == 16LL, "Expected SectorCount 16, got: %I64d\n", SectorCount);
545
546 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 4, &Vbn, &Lbn, &SectorCount);
547 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
548
549 Result = FsRtlAddLargeMcbEntry(&SecondMcb, 197128, 197128, 1);
550 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
551
552 Result = FsRtlLookupLargeMcbEntry(&SecondMcb, 197128, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
553 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
554 ok(Lbn == 197128LL, "Expected Lbn 197128, got: %I64d\n", Lbn);
555 ok(SectorCountFromLbn == 1LL, "Expected SectorCountFromLbn 1, got: %I64d\n", SectorCountFromLbn);
556 ok(StartingLbn == 197128LL, "Expected StartingLbn 197128, got: %I64d\n", StartingLbn);
557 ok(SectorCountFromStartingLbn == 1LL, "Expected SectorCountFromStartingLbn 1, got: %I64d\n", SectorCountFromStartingLbn);
558 ok(Index == 1, "Expected Index 1, got: %d\n", Index);
559
560 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 33, &Lbn, &SectorCountFromLbn, NULL, NULL, NULL);
561 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
562
563 Result = FsRtlAddLargeMcbEntry(&FirstMcb, 33, 1185, 32);
564 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
565
566 DumpAllRuns(&FirstMcb);
567
568 NbRuns = FsRtlNumberOfRunsInLargeMcb(&FirstMcb);
569 ok(NbRuns == 5, "Expected 5 runs, got: %lu\n", NbRuns);
570
571 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 33, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
572 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
573 ok(Lbn == 1185LL, "Expected Lbn 1185, got: %I64d\n", Lbn);
574 ok(SectorCountFromLbn == 32LL, "Expected SectorCountFromLbn 32, got: %I64d\n", SectorCountFromLbn);
575 ok(StartingLbn == 1185LL, "Expected StartingLbn 1185, got: %I64d\n", StartingLbn);
576 ok(SectorCountFromStartingLbn == 32LL, "Expected SectorCountFromStartingLbn 32, got: %I64d\n", SectorCountFromStartingLbn);
577 ok(Index == 4, "Expected Index 4, got: %d\n", Index);
578
579 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 0, &Vbn, &Lbn, &SectorCount);
580 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
581 ok(Vbn == 0LL, "Expected Vbn 0, got: %I64d\n", Vbn);
582 ok(Lbn == -1LL, "Expected Lbn -1, got: %I64d\n", Lbn);
583 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
584
585 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 1, &Vbn, &Lbn, &SectorCount);
586 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
587 ok(Vbn == 1LL, "Expected Vbn 1, got: %I64d\n", Vbn);
588 ok(Lbn == 198657LL, "Expected Lbn 198657, got: %I64d\n", Lbn);
589 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
590
591 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 2, &Vbn, &Lbn, &SectorCount);
592 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
593 ok(Vbn == 2LL, "Expected Vbn 2, got: %I64d\n", Vbn);
594 ok(Lbn == 199169LL, "Expected Lbn 199169, got: %I64d\n", Lbn);
595 ok(SectorCount == 15LL, "Expected SectorCount 15, got: %I64d\n", SectorCount);
596
597 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 3, &Vbn, &Lbn, &SectorCount);
598 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
599 ok(Vbn == 17LL, "Expected Vbn 17, got: %I64d\n", Vbn);
600 ok(Lbn == 1105LL, "Expected Lbn 1105, got: %I64d\n", Lbn);
601 ok(SectorCount == 16LL, "Expected SectorCount 16, got: %I64d\n", SectorCount);
602
603 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 4, &Vbn, &Lbn, &SectorCount);
604 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
605 ok(Vbn == 33LL, "Expected Vbn 33, got: %I64d\n", Vbn);
606 ok(Lbn == 1185LL, "Expected Lbn 1185, got: %I64d\n", Lbn);
607 ok(SectorCount == 32LL, "Expected SectorCount 32, got: %I64d\n", SectorCount);
608
609 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 5, &Vbn, &Lbn, &SectorCount);
610 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
611
612 Result = FsRtlAddLargeMcbEntry(&SecondMcb, 197128, 197128, 1);
613 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
614
615 Result = FsRtlLookupLargeMcbEntry(&SecondMcb, 197128, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
616 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
617 ok(Lbn == 197128LL, "Expected Lbn 197128, got: %I64d\n", Lbn);
618 ok(SectorCountFromLbn == 1LL, "Expected SectorCountFromLbn 1, got: %I64d\n", SectorCountFromLbn);
619 ok(StartingLbn == 197128LL, "Expected StartingLbn 197128, got: %I64d\n", StartingLbn);
620 ok(SectorCountFromStartingLbn == 1LL, "Expected SectorCountFromStartingLbn 1, got: %I64d\n", SectorCountFromStartingLbn);
621 ok(Index == 1, "Expected Index 1, got: %d\n", Index);
622
623 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 65, &Lbn, &SectorCountFromLbn, NULL, NULL, NULL);
624 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
625
626 Result = FsRtlAddLargeMcbEntry(&FirstMcb, 65, 1249, 44);
627 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
628
629 DumpAllRuns(&FirstMcb);
630
631 NbRuns = FsRtlNumberOfRunsInLargeMcb(&FirstMcb);
632 ok(NbRuns == 6, "Expected 6 runs, got: %lu\n", NbRuns);
633
634 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 65, &Lbn, &SectorCountFromLbn, &StartingLbn, &SectorCountFromStartingLbn, &Index);
635 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
636 ok(Lbn == 1249LL, "Expected Lbn 1249, got: %I64d\n", Lbn);
637 ok(SectorCountFromLbn == 44LL, "Expected SectorCountFromLbn 44, got: %I64d\n", SectorCountFromLbn);
638 ok(StartingLbn == 1249LL, "Expected StartingLbn 1249, got: %I64d\n", StartingLbn);
639 ok(SectorCountFromStartingLbn == 44LL, "Expected SectorCountFromStartingLbn 44, got: %I64d\n", SectorCountFromStartingLbn);
640 ok(Index == 5, "Expected Index 1, got: %d\n", Index);
641
642 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 0, &Vbn, &Lbn, &SectorCount);
643 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
644 ok(Vbn == 0LL, "Expected Vbn 0, got: %I64d\n", Vbn);
645 ok(Lbn == -1LL, "Expected Lbn -1, got: %I64d\n", Lbn);
646 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
647
648 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 1, &Vbn, &Lbn, &SectorCount);
649 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
650 ok(Vbn == 1LL, "Expected Vbn 1, got: %I64d\n", Vbn);
651 ok(Lbn == 198657LL, "Expected Lbn 198657, got: %I64d\n", Lbn);
652 ok(SectorCount == 1LL, "Expected SectorCount 1, got: %I64d\n", SectorCount);
653
654 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 2, &Vbn, &Lbn, &SectorCount);
655 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
656 ok(Vbn == 2LL, "Expected Vbn 2, got: %I64d\n", Vbn);
657 ok(Lbn == 199169LL, "Expected Lbn 199169, got: %I64d\n", Lbn);
658 ok(SectorCount == 15LL, "Expected SectorCount 15, got: %I64d\n", SectorCount);
659
660 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 3, &Vbn, &Lbn, &SectorCount);
661 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
662 ok(Vbn == 17LL, "Expected Vbn 17, got: %I64d\n", Vbn);
663 ok(Lbn == 1105LL, "Expected Lbn 1105, got: %I64d\n", Lbn);
664 ok(SectorCount == 16LL, "Expected SectorCount 16, got: %I64d\n", SectorCount);
665
666 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 4, &Vbn, &Lbn, &SectorCount);
667 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
668 ok(Vbn == 33LL, "Expected Vbn 33, got: %I64d\n", Vbn);
669 ok(Lbn == 1185LL, "Expected Lbn 1185, got: %I64d\n", Lbn);
670 ok(SectorCount == 32LL, "Expected SectorCount 32, got: %I64d\n", SectorCount);
671
672 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 5, &Vbn, &Lbn, &SectorCount);
673 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
674 ok(Vbn == 65LL, "Expected Vbn 65, got: %I64d\n", Vbn);
675 ok(Lbn == 1249LL, "Expected Lbn 1249, got: %I64d\n", Lbn);
676 ok(SectorCount == 44LL, "Expected SectorCount 44, got: %I64d\n", SectorCount);
677
678 Result = FsRtlGetNextLargeMcbEntry(&FirstMcb, 6, &Vbn, &Lbn, &SectorCount);
679 ok(Result == FALSE, "Expected FALSE, got TRUE\n");
680
681 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 1, &Lbn, &SectorCountFromLbn, NULL, NULL, NULL);
682 ok(Result == TRUE, "Expected TRUE, got FALSE\n");
683 ok(Lbn == 198657LL, "Expected Lbn 198657, got: %I64d\n", Lbn);
684 ok(SectorCountFromLbn == 1LL, "Expected SectorCountFromLbn 108, got: %I64d\n", SectorCountFromLbn);
685
686 FsRtlUninitializeLargeMcb(&SecondMcb);
687 FsRtlUninitializeLargeMcb(&FirstMcb);
688 }
689
690 static VOID FsRtlLargeMcbTestsFastFat()
691 {
692 LARGE_MCB FirstMcb;
693 LONGLONG Lbn, Vbn, SectorCount;
694 ULONG Index;
695 BOOLEAN Result;
696
697 FsRtlInitializeLargeMcb(&FirstMcb, PagedPool);
698
699 Lbn = -1;
700 SectorCount = -1;
701 Result = FsRtlLookupLargeMcbEntry(&FirstMcb, 8388607LL, &Lbn, &SectorCount, NULL, NULL, NULL);
702 ok_bool_false(Result, "FsRtlLookupLargeMcbEntry returned");
703 ok_eq_longlong(Lbn, -1);
704 ok_eq_longlong(SectorCount, -1);
705
706 Vbn = -1;
707 Lbn = -1;
708 Index = (ULONG) -1;
709 Result = FsRtlLookupLastLargeMcbEntryAndIndex(&FirstMcb, &Vbn, &Lbn, &Index);
710 ok_bool_false(Result, "FsRtlLookupLastLargeMcbEntryAndIndex returned");
711 ok_eq_longlong(Vbn, -1);
712 ok_eq_longlong(Lbn, -1);
713 ok_eq_ulong(Index, (ULONG) -1);
714
715 FsRtlUninitializeLargeMcb(&FirstMcb);
716 }
717
718 START_TEST(FsRtlMcb)
719 {
720 FsRtlMcbTest();
721 FsRtlLargeMcbTest();
722 FsRtlLargeMcbTestsExt2();
723 FsRtlLargeMcbTestsFastFat();
724 }