19 {
22
25
26
31
34
38
39
44
46
47
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
67 FSRTL_TEST(
"Opening Test File.",((Pfo !=
NULL) && (Fh !=
NULL)));
68
69
74
75
78
79
80
86
87
88 Offset.QuadPart = 0x7fffffffffff;
93
94
95 Offset.LowPart = 0xFFFFFFFF;
96 Offset.HighPart = 0xFFFFFFFF;
102
103
107
108
111
112
113
114
115
116
117
118
119
122
125
126 if (Pfo)
127 {
130 }
131
132 if (Fh)
133 {
136 }
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
157
158
163
164
167
168
169
175
176
177 Offset.QuadPart = 0x7fffffffffff;
182
183
184 Offset.LowPart = 0xFFFFFFFF;
185 Offset.HighPart = 0xFFFFFFFF;
191
192
196
197
200
201
202
203
204
205
206
207
208
211
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
235
236
240
241
245
246
251
256
257
258
267
268 if (Pfo)
269 {
272 }
273
274 if (Fh)
275 {
278 }
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
296
297
302
303
305 FSRTL_TEST("FsRtlPrepareMdlWriteDev() - No cache map test. Wait = FALSE",
307
308
309
315
316
317 Offset.QuadPart = 0x7fffffffffff;
322
323
325 FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Did we get related DO ?",pRelatedDo);
326
327
328
332 FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Testing extending past allocation size.",
334
335 FSRTL_TEST("FsRtlPrepareMdlWriteDev() - Testing extending not past allocation size.",
339
340
341
345 FSRTL_TEST("FsRtlPrepareMdlWriteDev() - 65KB IO Test.",
348
349
352 FSRTL_TEST("FsRtlPrepareMdlWriteDev() - 64KB IO Test.",
355
356
358 FSRTL_TEST("FsRtlPrepareMdlWriteDev() - FastIo is not possible flag.",
360
361 if (Pfo)
362 {
365 }
366
367 if (Fh)
368 {
371 }
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
389
390
395
396
398 FSRTL_TEST("FsRtlPrepareMdlWrite() - No cache map test. Wait = FALSE",
400
401
402
408
409
410 Offset.QuadPart = 0x7fffffffffff;
415
416
417
422 FSRTL_TEST("FsRtlPrepareMdlWrite() - Testing extending past allocation size.",
424
425 FSRTL_TEST("FsRtlPrepareMdlWrite() - Testing extending not past allocation size.",
429
430
431
435 FSRTL_TEST("FsRtlPrepareMdlWrite() - 65KB IO Test.",
437
438
439
442 FSRTL_TEST("FsRtlPrepareMdlWrite() - 64KB IO Test.",
445
446
448 FSRTL_TEST("FsRtlPrepareMdlWrite() - FastIo is not possible flag.",
450
451 if (Pfo)
452 {
455 }
456
457 if (Fh)
458 {
461 }
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
482
483
488
489
490
491
497
498
502
503
508
509
510
517
523
524
531
533
534 if (Pfo)
535 {
538 }
539
540 if (Fh)
541 {
544 }
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
563
564
569
570
571
572
578
579
583
584
589
590
591
598
604
605
612
614
615 if (Pfo)
616 {
619 }
620
621 if (Fh)
622 {
625 }
626
627
628
629
630
631
632
633
634
635
636
638 FSRTL_TEST(
"FsRtlGetFileSize() - Opening Test File.",((Pfo !=
NULL) && (Fh !=
NULL)));
639
641 FSRTL_TEST(
"FsRtlGetFileSize() - Opening Test Directory.",((DirPfo !=
NULL) && (DirFh !=
NULL)));
642
644 FSRTL_TEST(
"FsRtlGetFileSize() - Get the size of a real file",
NT_SUCCESS(
Status));
645
648
649
650
651
653
654 if (DirPfo)
655 {
658 }
659
660 if (DirFh)
661 {
664 }
665 if (Pfo)
666 {
669 }
670
671 if (Fh)
672 {
675 }
676
680 }
681
682 return Return;
683
684}
#define NT_SUCCESS(StatCode)
static const WCHAR Cleanup[]
struct _FSRTL_COMMON_FCB_HEADER * PFSRTL_COMMON_FCB_HEADER
IN PFCB IN PFILE_OBJECT FileObject IN ULONG AllocationSize
#define ExAllocatePool(type, size)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _Outptr_ PMDL * MdlChain
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
BOOLEAN NTAPI FsRtlMdlWriteComplete(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN PMDL MdlChain)
BOOLEAN NTAPI FsRtlPrepareMdlWrite(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN ULONG LockKey, OUT PMDL *MdlChain, OUT PIO_STATUS_BLOCK IoStatus)
BOOLEAN NTAPI FsRtlMdlWriteCompleteDev(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN PMDL MdlChain, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI FsRtlMdlReadCompleteDev(IN PFILE_OBJECT FileObject, IN PMDL MemoryDescriptorList, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI FsRtlCopyRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI FsRtlMdlReadComplete(IN PFILE_OBJECT FileObject, IN OUT PMDL MdlChain)
NTSTATUS NTAPI FsRtlGetFileSize(IN PFILE_OBJECT FileObject, IN OUT PLARGE_INTEGER FileSize)
BOOLEAN NTAPI FsRtlCopyWrite(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI FsRtlPrepareMdlWriteDev(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN ULONG LockKey, OUT PMDL *MdlChain, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI FsRtlMdlRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN ULONG LockKey, OUT PMDL *MdlChain, OUT PIO_STATUS_BLOCK IoStatus)
BOOLEAN NTAPI FsRtlMdlReadDev(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN ULONG LockKey, OUT PMDL *MdlChain, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
PDEVICE_OBJECT NTAPI IoGetRelatedDeviceObject(IN PFILE_OBJECT FileObject)
NTSTATUS FsRltTest_WritefileZw(HANDLE fh, PLARGE_INTEGER Offset, ULONG Length, PVOID Buffer, PIO_STATUS_BLOCK pIoStatus)
NTSTATUS FsRtlTest_OpenTestDirectory(PHANDLE Pfh, PFILE_OBJECT *Ppfo)
NTSTATUS FsRtlTest_OpenTestFile(PHANDLE Pfh, PFILE_OBJECT *Ppfo)
#define STATUS_END_OF_FILE
#define STATUS_FILE_IS_A_DIRECTORY
#define ObDereferenceObject