[DRIVERS]
[reactos.git] / reactos / drivers / filesystems / ext2 / inc / protos.h
1 /*************************************************************************
2 *
3 * File: protos.h
4 *
5 * Module: Ext2 File System Driver (Kernel mode execution only)
6 *
7 * Description:
8 * Contains the prototypes for functions in this sample FSD.
9 *
10 * Author: Manoj Paul Joseph
11 *
12 *
13 *************************************************************************/
14
15 #ifndef _EXT2_PROTOS_H_
16 #define _EXT2_PROTOS_H_
17
18 #ifdef __REACTOS__
19 typedef PIO_STACK_LOCATION PEXTENDED_IO_STACK_LOCATION;
20 #endif
21
22 /*************************************************************************
23 * Prototypes for the file sfsdinit.c
24 *************************************************************************/
25 extern NTSTATUS NTAPI DriverEntry(
26 PDRIVER_OBJECT DriverObject, // created by the I/O sub-system
27 PUNICODE_STRING RegistryPath); // path to the registry key
28
29 extern void NTAPI Ext2FsdInitializeFunctionPointers(
30 PDRIVER_OBJECT DriverObject); // created by the I/O sub-system
31
32
33 extern VOID NTAPI Ext2QueueHandlerThread(
34 IN PVOID StartContext);
35
36 /*************************************************************************
37 * Prototypes for the file fsctrl.c
38 *************************************************************************/
39
40 extern NTSTATUS NTAPI Ext2FileSystemControl(
41 IN PDEVICE_OBJECT DeviceObject,
42 IN PIRP Irp
43 );
44
45 extern NTSTATUS NTAPI Ext2VerifyVolume (
46 IN PIRP Irp,
47 IN PIO_STACK_LOCATION IrpSp );
48
49
50 /*************************************************************************
51 * Prototypes for the file create.c
52 *************************************************************************/
53 extern NTSTATUS NTAPI Ext2Create(
54 PDEVICE_OBJECT DeviceObject, // the logical volume device object
55 PIRP Irp); // I/O Request Packet
56
57 extern NTSTATUS NTAPI Ext2CommonCreate(
58 PtrExt2IrpContext PtrIrpContext,
59 PIRP PtrIrp,
60 BOOLEAN FirstAttempt );
61
62 extern NTSTATUS NTAPI Ext2OpenVolume(
63 PtrExt2VCB PtrVCB, // volume to be opened
64 PtrExt2IrpContext PtrIrpContext, // IRP context
65 PIRP PtrIrp, // original/user IRP
66 unsigned short ShareAccess, // share access
67 PIO_SECURITY_CONTEXT PtrSecurityContext, // caller's context (incl access)
68 PFILE_OBJECT PtrNewFileObject); // I/O Mgr. created file object
69
70 extern NTSTATUS NTAPI Ext2OpenRootDirectory(
71 PtrExt2VCB PtrVCB, // volume to be opened
72 PtrExt2IrpContext PtrIrpContext, // IRP context
73 PIRP PtrIrp, // original/user IRP
74 unsigned short ShareAccess, // share access
75 PIO_SECURITY_CONTEXT PtrSecurityContext, // caller's context (incl access)
76 PFILE_OBJECT PtrNewFileObject); // I/O Mgr. created file object
77
78 extern void NTAPI Ext2InitializeFCB(
79 PtrExt2FCB PtrNewFCB, // FCB structure to be initialized
80 PtrExt2VCB PtrVCB, // logical volume (VCB) pointer
81 PtrExt2ObjectName PtrObjectName, // name of the object
82 uint32 Flags, // is this a file/directory, etc.
83 PFILE_OBJECT PtrFileObject);// optional file object to be initialized
84
85 extern PtrExt2FCB NTAPI Ext2LocateChildFCBInCore(
86 PtrExt2VCB PtrVCB,
87 PUNICODE_STRING PtrName,
88 ULONG ParentInodeNo );
89
90 extern PtrExt2FCB NTAPI Ext2LocateFCBInCore(
91 PtrExt2VCB PtrVCB,
92 ULONG InodeNo );
93
94
95 extern ULONG NTAPI Ext2LocateFileInDisk(
96 PtrExt2VCB PtrVCB,
97 PUNICODE_STRING PtrCurrentName,
98 PtrExt2FCB PtrParentFCB,
99 ULONG *Type );
100
101 extern ULONG NTAPI Ext2CreateFile(
102 PtrExt2IrpContext PtrIrpContext,
103 PtrExt2VCB PtrVCB,
104 PUNICODE_STRING PtrName,
105 PtrExt2FCB PtrParentFCB,
106 ULONG Type);
107
108 extern BOOLEAN NTAPI Ext2OverwriteFile(
109 PtrExt2FCB PtrFCB,
110 PtrExt2IrpContext PtrIrpContext);
111
112 extern BOOLEAN NTAPI Ext2SupersedeFile(
113 PtrExt2FCB PtrFCB,
114 PtrExt2IrpContext PtrIrpContext);
115
116 /*************************************************************************
117 * Prototypes for the file misc.c
118 *************************************************************************/
119 extern NTSTATUS NTAPI Ext2InitializeZones(
120 void);
121
122 extern void NTAPI Ext2DestroyZones(
123 void);
124
125 extern BOOLEAN NTAPI Ext2IsIrpTopLevel(
126 PIRP Irp); // the IRP sent to our dispatch routine
127
128 extern long NTAPI Ext2ExceptionFilter(
129 PtrExt2IrpContext PtrIrpContext,
130 PEXCEPTION_POINTERS PtrExceptionPointers);
131
132 extern NTSTATUS NTAPI Ext2ExceptionHandler(
133 PtrExt2IrpContext PtrIrpContext,
134 PIRP Irp);
135
136 extern void NTAPI Ext2LogEvent(
137 NTSTATUS Ext2EventLogId, // the Ext2 private message id
138 NTSTATUS RC); // any NT error code we wish to log ...
139
140 extern PtrExt2ObjectName NTAPI Ext2AllocateObjectName(
141 void);
142
143 extern void NTAPI Ext2ReleaseObjectName(
144 PtrExt2ObjectName PtrObjectName);
145
146 extern PtrExt2CCB NTAPI Ext2AllocateCCB(
147 void );
148
149 extern PtrExt2FCB NTAPI Ext2GetUsedFCB(
150 PtrExt2VCB PtrVCB );
151
152 extern BOOLEAN NTAPI Ext2CloseClosableFCB(
153 PtrExt2FCB PtrFCB );
154
155 extern void NTAPI Ext2ReleaseCCB(
156 PtrExt2CCB PtrCCB);
157
158 extern PtrExt2FCB NTAPI Ext2AllocateFCB(
159 void);
160
161 extern NTSTATUS NTAPI Ext2CreateNewFCB(
162 PtrExt2FCB *ReturnedFCB,
163 LARGE_INTEGER AllocationSize,
164 LARGE_INTEGER EndOfFile,
165 PFILE_OBJECT PtrFileObject,
166 PtrExt2VCB PtrVCB,
167 PtrExt2ObjectName PtrObjectName);
168
169 extern NTSTATUS NTAPI Ext2CreateNewCCB(
170 PtrExt2CCB *ReturnedCCB,
171 PtrExt2FCB PtrFCB,
172 PFILE_OBJECT PtrFileObject);
173
174 extern void NTAPI Ext2ReleaseFCB(
175 PtrExt2FCB PtrFCB);
176
177 extern PtrExt2FileLockInfo NTAPI Ext2AllocateByteLocks(
178 void);
179
180 extern void NTAPI Ext2ReleaseByteLocks(
181 PtrExt2FileLockInfo PtrByteLocks);
182
183 extern PtrExt2IrpContext NTAPI Ext2AllocateIrpContext(
184 PIRP Irp,
185 PDEVICE_OBJECT PtrTargetDeviceObject);
186
187 extern void NTAPI Ext2ReleaseIrpContext(
188 PtrExt2IrpContext PtrIrpContext);
189
190 extern NTSTATUS NTAPI Ext2PostRequest(
191 PtrExt2IrpContext PtrIrpContext,
192 PIRP PtrIrp);
193
194 extern void NTAPI Ext2CommonDispatch(
195 void *Context); // actually an IRPContext structure
196
197 extern void NTAPI Ext2InitializeVCB(
198 PDEVICE_OBJECT PtrVolumeDeviceObject,
199 PDEVICE_OBJECT PtrTargetDeviceObject,
200 PVPB PtrVPB,
201 PLARGE_INTEGER AllocationSize);
202
203 extern void NTAPI Ext2CompleteRequest(
204 IN PIRP Irp OPTIONAL,
205 IN NTSTATUS Status
206 );
207
208 extern NTSTATUS NTAPI Ext2DenyAccess(
209 IN PIRP Irp
210 );
211 extern NTSTATUS NTAPI Ext2GetFCB_CCB_VCB_FromFileObject(
212 IN PFILE_OBJECT PtrFileObject,
213 OUT PtrExt2FCB *PPtrFCB,
214 OUT PtrExt2CCB *PPtrCCB,
215 OUT PtrExt2VCB *PPtrVCB );
216
217 extern void NTAPI Ext2CopyUnicodeString(
218 IN OUT PUNICODE_STRING PtrDestinationString,
219 IN PUNICODE_STRING PtrSourceString );
220
221 extern void NTAPI Ext2CopyWideCharToUnicodeString(
222 IN OUT PUNICODE_STRING PtrDestinationString,
223 IN PCWSTR PtrSourceString );
224
225 extern void NTAPI Ext2CopyCharToUnicodeString(
226 IN OUT PUNICODE_STRING PtrDestinationString,
227 IN PCSTR PtrSourceString,
228 IN USHORT SourceStringLength );
229
230 extern void NTAPI Ext2CopyZCharToUnicodeString(
231 IN OUT PUNICODE_STRING PtrDestinationString,
232 IN PCSTR PtrSourceString );
233
234 extern void NTAPI Ext2DeallocateUnicodeString(
235 PUNICODE_STRING PtrUnicodeString );
236
237 extern void NTAPI Ext2ZerooutUnicodeString(
238 PUNICODE_STRING PtrUnicodeString );
239
240 extern BOOLEAN NTAPI Ext2SaveBCB(
241 PtrExt2IrpContext PtrIrpContext,
242 PBCB PtrBCB,
243 PFILE_OBJECT PtrFileObject);
244
245 extern BOOLEAN NTAPI Ext2FlushSavedBCBs(
246 PtrExt2IrpContext PtrIrpContext);
247
248 extern BOOLEAN NTAPI AssertBCB(
249 PBCB PtrBCB);
250
251 extern ULONG NTAPI Ext2Align(
252 ULONG NumberToBeAligned,
253 ULONG Alignment);
254
255 extern LONGLONG NTAPI Ext2Align64(
256 LONGLONG NumberToBeAligned,
257 LONGLONG Alignment);
258
259 extern ULONG NTAPI Ext2GetCurrentTime(VOID);
260
261 /*************************************************************************
262 * Prototypes for the file cleanup.c
263 *************************************************************************/
264 extern NTSTATUS NTAPI Ext2Cleanup(
265 PDEVICE_OBJECT DeviceObject, // the logical volume device object
266 PIRP Irp); // I/O Request Packet
267
268 extern NTSTATUS NTAPI Ext2CommonCleanup(
269 PtrExt2IrpContext PtrIrpContext,
270 PIRP PtrIrp,
271 BOOLEAN FirstAttempt );
272
273 /*************************************************************************
274 * Prototypes for the file close.c
275 *************************************************************************/
276 extern NTSTATUS NTAPI Ext2Close(
277 PDEVICE_OBJECT DeviceObject, // the logical volume device object
278 PIRP Irp); // I/O Request Packet
279
280 extern NTSTATUS NTAPI Ext2CommonClose(
281 PtrExt2IrpContext PtrIrpContext,
282 PIRP PtrIrp,
283 BOOLEAN FirstAttempt );
284
285 /*************************************************************************
286 * Prototypes for the file read.c
287 *************************************************************************/
288 extern NTSTATUS NTAPI Ext2Read(
289 PDEVICE_OBJECT DeviceObject, // the logical volume device object
290 PIRP Irp); // I/O Request Packet
291
292 extern NTSTATUS NTAPI Ext2CommonRead(
293 PtrExt2IrpContext PtrIrpContext,
294 PIRP PtrIrp,
295 BOOLEAN FirstAttempt );
296
297 extern void * NTAPI Ext2GetCallersBuffer(
298 PIRP PtrIrp);
299
300 extern NTSTATUS NTAPI Ext2LockCallersBuffer(
301 PIRP PtrIrp,
302 BOOLEAN IsReadOperation,
303 uint32 Length);
304
305 extern void NTAPI Ext2MdlComplete(
306 PtrExt2IrpContext PtrIrpContext,
307 PIRP PtrIrp,
308 PIO_STACK_LOCATION PtrIoStackLocation,
309 BOOLEAN ReadCompletion);
310
311 /*************************************************************************
312 * Prototypes for the file write.c
313 *************************************************************************/
314 extern NTSTATUS NTAPI Ext2Write(
315 PDEVICE_OBJECT DeviceObject, // the logical volume device object
316 PIRP Irp); // I/O Request Packet
317
318 extern NTSTATUS NTAPI Ext2CommonWrite(
319 PtrExt2IrpContext PtrIrpContext,
320 PIRP PtrIrp);
321
322 extern void NTAPI Ext2DeferredWriteCallBack (
323 void *Context1, // Should be PtrIrpContext
324 void *Context2); // Should be PtrIrp
325
326 /*************************************************************************
327 * Prototypes for the file fileinfo.c
328 *************************************************************************/
329 extern NTSTATUS NTAPI Ext2FileInfo(
330 PDEVICE_OBJECT DeviceObject, // the logical volume device object
331 PIRP Irp); // I/O Request Packet
332
333 extern NTSTATUS NTAPI Ext2CommonFileInfo(
334 PtrExt2IrpContext PtrIrpContext,
335 PIRP PtrIrp);
336
337 extern NTSTATUS NTAPI Ext2GetBasicInformation(
338 PtrExt2FCB PtrFCB,
339 PFILE_BASIC_INFORMATION PtrBuffer,
340 long *PtrReturnedLength);
341
342 extern NTSTATUS NTAPI Ext2GetStandardInformation(
343 PtrExt2FCB PtrFCB,
344 PFILE_STANDARD_INFORMATION PtrStdInformation,
345 long *PtrReturnedLength);
346
347 extern NTSTATUS NTAPI Ext2GetNetworkOpenInformation(
348 PtrExt2FCB PtrFCB,
349 PFILE_NETWORK_OPEN_INFORMATION PtrNetworkOpenInformation,
350 long *PtrReturnedLength );
351
352 extern NTSTATUS NTAPI Ext2GetFullNameInformation(
353 PtrExt2FCB PtrFCB,
354 PtrExt2CCB PtrCCB,
355 PFILE_NAME_INFORMATION PtrNameInformation,
356 long *PtrReturnedLength);
357
358 extern NTSTATUS NTAPI Ext2SetBasicInformation(
359 PtrExt2IrpContext PtrIrpContext,
360 PtrExt2FCB PtrFCB,
361 PFILE_OBJECT PtrFileObject,
362 PFILE_BASIC_INFORMATION PtrFileInformation );
363
364 extern NTSTATUS NTAPI Ext2SetDispositionInformation(
365 PtrExt2FCB PtrFCB,
366 PtrExt2CCB PtrCCB,
367 PtrExt2VCB PtrVCB,
368 PFILE_OBJECT PtrFileObject,
369 PtrExt2IrpContext PtrIrpContext,
370 PIRP PtrIrp,
371 PFILE_DISPOSITION_INFORMATION PtrBuffer);
372
373 extern NTSTATUS NTAPI Ext2SetAllocationInformation(
374 PtrExt2FCB PtrFCB,
375 PtrExt2CCB PtrCCB,
376 PtrExt2VCB PtrVCB,
377 PFILE_OBJECT PtrFileObject,
378 PtrExt2IrpContext PtrIrpContext,
379 PIRP PtrIrp,
380 PFILE_ALLOCATION_INFORMATION PtrBuffer);
381
382 /*************************************************************************
383 * Prototypes for the file flush.c
384 *************************************************************************/
385 extern NTSTATUS NTAPI Ext2Flush(
386 PDEVICE_OBJECT DeviceObject, // the logical volume device object
387 PIRP Irp); // I/O Request Packet
388
389 extern NTSTATUS NTAPI Ext2CommonFlush(
390 PtrExt2IrpContext PtrIrpContext,
391 PIRP PtrIrp);
392
393 extern void NTAPI Ext2FlushAFile(
394 PtrExt2NTRequiredFCB PtrReqdFCB,
395 PIO_STATUS_BLOCK PtrIoStatus);
396
397 extern void NTAPI Ext2FlushLogicalVolume(
398 PtrExt2IrpContext PtrIrpContext,
399 PIRP PtrIrp,
400 PtrExt2VCB PtrVCB);
401
402 extern NTSTATUS NTAPI Ext2FlushCompletion(
403 PDEVICE_OBJECT PtrDeviceObject,
404 PIRP PtrIrp,
405 PVOID Context);
406
407 /*************************************************************************
408 * Prototypes for the file dircntrl.c
409 *************************************************************************/
410 extern NTSTATUS NTAPI Ext2DirControl(
411 PDEVICE_OBJECT DeviceObject, // the logical volume device object
412 PIRP Irp); // I/O Request Packet
413
414 extern NTSTATUS NTAPI Ext2CommonDirControl(
415 PtrExt2IrpContext PtrIrpContext,
416 PIRP PtrIrp);
417
418 extern NTSTATUS NTAPI Ext2QueryDirectory(
419 PtrExt2IrpContext PtrIrpContext,
420 PIRP PtrIrp,
421 PEXTENDED_IO_STACK_LOCATION PtrIoStackLocation,
422 PFILE_OBJECT PtrFileObject,
423 PtrExt2FCB PtrFCB,
424 PtrExt2CCB PtrCCB);
425
426 extern NTSTATUS NTAPI Ext2NotifyChangeDirectory(
427 PtrExt2IrpContext PtrIrpContext,
428 PIRP PtrIrp,
429 PEXTENDED_IO_STACK_LOCATION PtrIoStackLocation,
430 PFILE_OBJECT PtrFileObject,
431 PtrExt2FCB PtrFCB,
432 PtrExt2CCB PtrCCB);
433
434 /*************************************************************************
435 * Prototypes for the file devcntrl.c
436 *************************************************************************/
437 extern NTSTATUS NTAPI Ext2DeviceControl(
438 PDEVICE_OBJECT DeviceObject, // the logical volume device object
439 PIRP Irp); // I/O Request Packet
440
441 extern NTSTATUS NTAPI Ext2CommonDeviceControl(
442 PtrExt2IrpContext PtrIrpContext,
443 PIRP PtrIrp);
444
445 extern NTSTATUS NTAPI Ext2DevIoctlCompletion(
446 PDEVICE_OBJECT PtrDeviceObject,
447 PIRP PtrIrp,
448 void *Context);
449
450 extern NTSTATUS NTAPI Ext2HandleQueryPath(
451 void *BufferPointer);
452
453 /*************************************************************************
454 * Prototypes for the file shutdown.c
455 *************************************************************************/
456 extern NTSTATUS NTAPI Ext2Shutdown(
457 PDEVICE_OBJECT DeviceObject, // the logical volume device object
458 PIRP Irp); // I/O Request Packet
459
460 extern NTSTATUS NTAPI Ext2CommonShutdown(
461 PtrExt2IrpContext PtrIrpContext,
462 PIRP PtrIrp);
463
464 /*************************************************************************
465 * Prototypes for the file volinfo.c
466 *************************************************************************/
467 extern NTSTATUS NTAPI Ext2QueryVolInfo(
468 PDEVICE_OBJECT DeviceObject, // the logical volume device object
469 PIRP Irp); // I/O Request Packet
470
471 NTSTATUS NTAPI Ext2SetVolInfo(
472 IN PDEVICE_OBJECT DeviceObject, // the logical volume device object
473 IN PIRP Irp); // I/O Request Packet
474
475
476 /*************************************************************************
477 * Prototypes for the file fastio.c
478 *************************************************************************/
479 extern BOOLEAN NTAPI Ext2FastIoCheckIfPossible(
480 IN PFILE_OBJECT FileObject,
481 IN PLARGE_INTEGER FileOffset,
482 IN ULONG Length,
483 IN BOOLEAN Wait,
484 IN ULONG LockKey,
485 IN BOOLEAN CheckForReadOperation,
486 OUT PIO_STATUS_BLOCK IoStatus,
487 IN PDEVICE_OBJECT DeviceObject);
488
489 extern BOOLEAN NTAPI Ext2FastIoRead(
490 IN PFILE_OBJECT FileObject,
491 IN PLARGE_INTEGER FileOffset,
492 IN ULONG Length,
493 IN BOOLEAN Wait,
494 IN ULONG LockKey,
495 OUT PVOID Buffer,
496 OUT PIO_STATUS_BLOCK IoStatus,
497 IN PDEVICE_OBJECT DeviceObject);
498
499 extern BOOLEAN NTAPI Ext2FastIoWrite(
500 IN PFILE_OBJECT FileObject,
501 IN PLARGE_INTEGER FileOffset,
502 IN ULONG Length,
503 IN BOOLEAN Wait,
504 IN ULONG LockKey,
505 OUT PVOID Buffer,
506 OUT PIO_STATUS_BLOCK IoStatus,
507 IN PDEVICE_OBJECT DeviceObject);
508
509 extern BOOLEAN NTAPI Ext2FastIoQueryBasicInfo(
510 IN PFILE_OBJECT FileObject,
511 IN BOOLEAN Wait,
512 OUT PFILE_BASIC_INFORMATION Buffer,
513 OUT PIO_STATUS_BLOCK IoStatus,
514 IN PDEVICE_OBJECT DeviceObject);
515
516 extern BOOLEAN NTAPI Ext2FastIoQueryStdInfo(
517 IN PFILE_OBJECT FileObject,
518 IN BOOLEAN Wait,
519 OUT PFILE_STANDARD_INFORMATION Buffer,
520 OUT PIO_STATUS_BLOCK IoStatus,
521 IN PDEVICE_OBJECT DeviceObject);
522
523 extern BOOLEAN NTAPI Ext2FastIoLock(
524 IN PFILE_OBJECT FileObject,
525 IN PLARGE_INTEGER FileOffset,
526 IN PLARGE_INTEGER Length,
527 PEPROCESS ProcessId,
528 ULONG Key,
529 BOOLEAN FailImmediately,
530 BOOLEAN ExclusiveLock,
531 OUT PIO_STATUS_BLOCK IoStatus,
532 IN PDEVICE_OBJECT DeviceObject);
533
534 extern BOOLEAN NTAPI Ext2FastIoUnlockSingle(
535 IN PFILE_OBJECT FileObject,
536 IN PLARGE_INTEGER FileOffset,
537 IN PLARGE_INTEGER Length,
538 PEPROCESS ProcessId,
539 ULONG Key,
540 OUT PIO_STATUS_BLOCK IoStatus,
541 IN PDEVICE_OBJECT DeviceObject);
542
543 extern BOOLEAN NTAPI Ext2FastIoUnlockAll(
544 IN PFILE_OBJECT FileObject,
545 PEPROCESS ProcessId,
546 OUT PIO_STATUS_BLOCK IoStatus,
547 IN PDEVICE_OBJECT DeviceObject);
548
549 extern BOOLEAN NTAPI Ext2FastIoUnlockAllByKey(
550 IN PFILE_OBJECT FileObject,
551 PVOID ProcessId,
552 ULONG Key,
553 OUT PIO_STATUS_BLOCK IoStatus,
554 IN PDEVICE_OBJECT DeviceObject);
555
556 extern void NTAPI Ext2FastIoAcqCreateSec(
557 IN PFILE_OBJECT FileObject);
558
559 extern void NTAPI Ext2FastIoRelCreateSec(
560 IN PFILE_OBJECT FileObject);
561
562 extern BOOLEAN NTAPI Ext2AcqLazyWrite(
563 IN PVOID Context,
564 IN BOOLEAN Wait);
565
566 extern void NTAPI Ext2RelLazyWrite(
567 IN PVOID Context);
568
569 extern BOOLEAN NTAPI Ext2AcqReadAhead(
570 IN PVOID Context,
571 IN BOOLEAN Wait);
572
573 extern void NTAPI Ext2RelReadAhead(
574 IN PVOID Context);
575
576 // the remaining are only valid under NT Version 4.0 and later
577 #if(_WIN32_WINNT >= 0x0400)
578
579 extern BOOLEAN NTAPI Ext2FastIoQueryNetInfo(
580 IN PFILE_OBJECT FileObject,
581 IN BOOLEAN Wait,
582 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
583 OUT PIO_STATUS_BLOCK IoStatus,
584 IN PDEVICE_OBJECT DeviceObject);
585
586 extern BOOLEAN NTAPI Ext2FastIoMdlRead(
587 IN PFILE_OBJECT FileObject,
588 IN PLARGE_INTEGER FileOffset,
589 IN ULONG Length,
590 IN ULONG LockKey,
591 OUT PMDL *MdlChain,
592 OUT PIO_STATUS_BLOCK IoStatus,
593 IN PDEVICE_OBJECT DeviceObject);
594
595 extern BOOLEAN NTAPI Ext2FastIoMdlReadComplete(
596 IN PFILE_OBJECT FileObject,
597 OUT PMDL MdlChain,
598 IN PDEVICE_OBJECT DeviceObject);
599
600 extern BOOLEAN NTAPI Ext2FastIoPrepareMdlWrite(
601 IN PFILE_OBJECT FileObject,
602 IN PLARGE_INTEGER FileOffset,
603 IN ULONG Length,
604 IN ULONG LockKey,
605 OUT PMDL *MdlChain,
606 OUT PIO_STATUS_BLOCK IoStatus,
607 IN PDEVICE_OBJECT DeviceObject);
608
609 extern BOOLEAN NTAPI Ext2FastIoMdlWriteComplete(
610 IN PFILE_OBJECT FileObject,
611 IN PLARGE_INTEGER FileOffset,
612 OUT PMDL MdlChain,
613 IN PDEVICE_OBJECT DeviceObject);
614
615 extern NTSTATUS NTAPI Ext2FastIoAcqModWrite(
616 IN PFILE_OBJECT FileObject,
617 IN PLARGE_INTEGER EndingOffset,
618 OUT PERESOURCE *ResourceToRelease,
619 IN PDEVICE_OBJECT DeviceObject);
620
621 extern NTSTATUS NTAPI Ext2FastIoRelModWrite(
622 IN PFILE_OBJECT FileObject,
623 IN PERESOURCE ResourceToRelease,
624 IN PDEVICE_OBJECT DeviceObject);
625
626 extern NTSTATUS NTAPI Ext2FastIoAcqCcFlush(
627 IN PFILE_OBJECT FileObject,
628 IN PDEVICE_OBJECT DeviceObject);
629
630 extern NTSTATUS NTAPI Ext2FastIoRelCcFlush(
631 IN PFILE_OBJECT FileObject,
632 IN PDEVICE_OBJECT DeviceObject);
633
634 #endif // (_WIN32_WINNT >= 0x0400)
635
636 /*************************************************************************
637 * Prototypes for the file DiskIO.c
638 *************************************************************************/
639 extern NTSTATUS NTAPI Ext2ReadLogicalBlocks(
640 PDEVICE_OBJECT PtrTargetDeviceObject, // the Target Device Object
641 VOID *Buffer, // The Buffer that takes the data read in
642 LARGE_INTEGER StartLogicalBlock, // The logical block from which reading is to start
643 unsigned int NoOfLogicalBlocks); // The no. of logical blocks to be read
644
645 extern NTSTATUS NTAPI Ext2ReadPhysicalBlocks(
646 PDEVICE_OBJECT PtrTargetDeviceObject, // the Target Device Object
647 VOID *Buffer, // The Buffer that takes the data read in
648 LARGE_INTEGER StartBlock, // The Physical block from which reading is to start
649 unsigned int NoOfBlocks); // The no. of Physical blocks to be read
650
651 /*************************************************************************
652 * Prototypes for the file metadata.c
653 *************************************************************************/
654
655 extern void NTAPI Ext2InitializeFCBInodeInfo (
656 PtrExt2FCB PtrFCB );
657
658 extern NTSTATUS NTAPI Ext2ReadInode(
659 PtrExt2VCB PtrVcb, // the Volume Control Block
660 uint32 InodeNo, // The Inode no
661 PEXT2_INODE PtrInode ); // The Inode Buffer
662
663 extern NTSTATUS NTAPI Ext2WriteInode(
664 PtrExt2IrpContext PtrIrpContext,
665 PtrExt2VCB PtrVcb, // the Volume Control Block
666 uint32 InodeNo, // The Inode no
667 PEXT2_INODE PtrInode // The Inode Buffer
668 );
669
670 extern ULONG NTAPI Ext2AllocInode(
671 PtrExt2IrpContext PtrIrpContext,
672 PtrExt2VCB PtrVCB,
673 ULONG ParentINodeNo );
674
675 extern BOOLEAN NTAPI Ext2DeallocInode(
676 PtrExt2IrpContext PtrIrpContext,
677 PtrExt2VCB PtrVCB,
678 ULONG INodeNo );
679
680 extern BOOLEAN NTAPI Ext2MakeNewDirectoryEntry(
681 PtrExt2IrpContext PtrIrpContext, // The Irp context
682 PtrExt2FCB PtrParentFCB, // Parent Folder FCB
683 PFILE_OBJECT PtrFileObject, // Parent Folder Object
684 PUNICODE_STRING PtrName, // New entry's name
685 ULONG Type, // The type of the new entry
686 ULONG NewInodeNo); // The inode no of the new entry...
687
688 extern BOOLEAN NTAPI Ext2FreeDirectoryEntry(
689 PtrExt2IrpContext PtrIrpContext,
690 PtrExt2FCB PtrParentFCB,
691 PUNICODE_STRING PtrName);
692
693 extern BOOLEAN NTAPI Ext2AddBlockToFile(
694 PtrExt2IrpContext PtrIrpContext,
695 PtrExt2VCB PtrVCB,
696 PtrExt2FCB PtrFCB,
697 PFILE_OBJECT PtrFileObject,
698 BOOLEAN UpdateFileSize);
699
700 extern BOOLEAN NTAPI Ext2ReleaseDataBlocks(
701 PtrExt2FCB PtrFCB,
702 PtrExt2IrpContext PtrIrpContext);
703
704 extern BOOLEAN NTAPI Ext2TruncateFileAllocationSize(
705 PtrExt2IrpContext PtrIrpContext,
706 PtrExt2FCB PtrFCB,
707 PFILE_OBJECT PtrFileObject,
708 PLARGE_INTEGER PtrAllocationSize );
709
710 extern ULONG NTAPI Ext2AllocBlock(
711 PtrExt2IrpContext PtrIrpContext,
712 PtrExt2VCB PtrVCB,
713 ULONG Count);
714
715 extern BOOLEAN NTAPI Ext2DeallocBlock(
716 PtrExt2IrpContext PtrIrpContext,
717 PtrExt2VCB PtrVCB,
718 ULONG BlockNo);
719
720 extern BOOLEAN NTAPI Ext2UpdateFileSize(
721 PtrExt2IrpContext PtrIrpContext,
722 PFILE_OBJECT PtrFileObject,
723 PtrExt2FCB PtrFCB);
724
725
726 extern BOOLEAN NTAPI Ext2DeleteFile(
727 PtrExt2FCB PtrFCB,
728 PtrExt2IrpContext PtrIrpContext);
729
730 extern BOOLEAN NTAPI Ext2IsDirectoryEmpty(
731 PtrExt2FCB PtrFCB,
732 PtrExt2CCB PtrCCB,
733 PtrExt2IrpContext PtrIrpContext);
734
735 extern NTSTATUS NTAPI Ext2RenameOrLinkFile(
736 PtrExt2FCB PtrSourceFCB,
737 PFILE_OBJECT PtrSourceFileObject,
738 PtrExt2IrpContext PtrIrpContext,
739 PIRP PtrIrp,
740 PFILE_RENAME_INFORMATION PtrRenameInfo);
741 /*************************************************************************
742 * Prototypes for the file io.c
743 *************************************************************************/
744 extern NTSTATUS NTAPI Ext2PassDownSingleReadWriteIRP(
745 PtrExt2IrpContext PtrIrpContext,
746 PIRP PtrIrp,
747 PtrExt2VCB PtrVCB,
748 LARGE_INTEGER ByteOffset,
749 uint32 ReadWriteLength,
750 BOOLEAN SynchronousIo);
751
752 extern NTSTATUS NTAPI Ext2PassDownMultiReadWriteIRP(
753 PEXT2_IO_RUN PtrIoRuns,
754 UINT Count,
755 ULONG TotalReadWriteLength,
756 PtrExt2IrpContext PtrIrpContext,
757 PtrExt2FCB PtrFCB,
758 BOOLEAN SynchronousIo);
759
760 extern NTSTATUS NTAPI Ext2SingleSyncCompletionRoutine(
761 IN PDEVICE_OBJECT DeviceObject,
762 IN PIRP Irp,
763 IN PVOID Contxt
764 );
765
766 extern NTSTATUS NTAPI Ext2SingleAsyncCompletionRoutine (
767 IN PDEVICE_OBJECT DeviceObject,
768 IN PIRP Irp,
769 IN PVOID Contxt
770 );
771
772 extern NTSTATUS NTAPI Ext2MultiSyncCompletionRoutine(
773 IN PDEVICE_OBJECT DeviceObject,
774 IN PIRP Irp,
775 IN PVOID Contxt);
776
777 extern NTSTATUS NTAPI Ext2MultiAsyncCompletionRoutine(
778 IN PDEVICE_OBJECT DeviceObject,
779 IN PIRP Irp,
780 IN PVOID Contxt);
781
782 #endif // _EXT2_PROTOS_H_