1 /*************************************************************************
5 * Module: Ext2 File System Driver (Kernel mode execution only)
8 * Contains the prototypes for functions in this sample FSD.
10 * Author: Manoj Paul Joseph
13 *************************************************************************/
15 #ifndef _EXT2_PROTOS_H_
16 #define _EXT2_PROTOS_H_
19 typedef PIO_STACK_LOCATION PEXTENDED_IO_STACK_LOCATION
;
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
29 extern void NTAPI
Ext2FsdInitializeFunctionPointers(
30 PDRIVER_OBJECT DriverObject
); // created by the I/O sub-system
33 extern VOID NTAPI
Ext2QueueHandlerThread(
34 IN PVOID StartContext
);
36 /*************************************************************************
37 * Prototypes for the file fsctrl.c
38 *************************************************************************/
40 extern NTSTATUS NTAPI
Ext2FileSystemControl(
41 IN PDEVICE_OBJECT DeviceObject
,
45 extern NTSTATUS NTAPI
Ext2VerifyVolume (
47 IN PIO_STACK_LOCATION IrpSp
);
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
57 extern NTSTATUS NTAPI
Ext2CommonCreate(
58 PtrExt2IrpContext PtrIrpContext
,
60 BOOLEAN FirstAttempt
);
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
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
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
85 extern PtrExt2FCB NTAPI
Ext2LocateChildFCBInCore(
87 PUNICODE_STRING PtrName
,
88 ULONG ParentInodeNo
);
90 extern PtrExt2FCB NTAPI
Ext2LocateFCBInCore(
95 extern ULONG NTAPI
Ext2LocateFileInDisk(
97 PUNICODE_STRING PtrCurrentName
,
98 PtrExt2FCB PtrParentFCB
,
101 extern ULONG NTAPI
Ext2CreateFile(
102 PtrExt2IrpContext PtrIrpContext
,
104 PUNICODE_STRING PtrName
,
105 PtrExt2FCB PtrParentFCB
,
108 extern BOOLEAN NTAPI
Ext2OverwriteFile(
110 PtrExt2IrpContext PtrIrpContext
);
112 extern BOOLEAN NTAPI
Ext2SupersedeFile(
114 PtrExt2IrpContext PtrIrpContext
);
116 /*************************************************************************
117 * Prototypes for the file misc.c
118 *************************************************************************/
119 extern NTSTATUS NTAPI
Ext2InitializeZones(
122 extern void NTAPI
Ext2DestroyZones(
125 extern BOOLEAN NTAPI
Ext2IsIrpTopLevel(
126 PIRP Irp
); // the IRP sent to our dispatch routine
128 extern long NTAPI
Ext2ExceptionFilter(
129 PtrExt2IrpContext PtrIrpContext
,
130 PEXCEPTION_POINTERS PtrExceptionPointers
);
132 extern NTSTATUS NTAPI
Ext2ExceptionHandler(
133 PtrExt2IrpContext PtrIrpContext
,
136 extern void NTAPI
Ext2LogEvent(
137 NTSTATUS Ext2EventLogId
, // the Ext2 private message id
138 NTSTATUS RC
); // any NT error code we wish to log ...
140 extern PtrExt2ObjectName NTAPI
Ext2AllocateObjectName(
143 extern void NTAPI
Ext2ReleaseObjectName(
144 PtrExt2ObjectName PtrObjectName
);
146 extern PtrExt2CCB NTAPI
Ext2AllocateCCB(
149 extern PtrExt2FCB NTAPI
Ext2GetUsedFCB(
152 extern BOOLEAN NTAPI
Ext2CloseClosableFCB(
155 extern void NTAPI
Ext2ReleaseCCB(
158 extern PtrExt2FCB NTAPI
Ext2AllocateFCB(
161 extern NTSTATUS NTAPI
Ext2CreateNewFCB(
162 PtrExt2FCB
*ReturnedFCB
,
163 LARGE_INTEGER AllocationSize
,
164 LARGE_INTEGER EndOfFile
,
165 PFILE_OBJECT PtrFileObject
,
167 PtrExt2ObjectName PtrObjectName
);
169 extern NTSTATUS NTAPI
Ext2CreateNewCCB(
170 PtrExt2CCB
*ReturnedCCB
,
172 PFILE_OBJECT PtrFileObject
);
174 extern void NTAPI
Ext2ReleaseFCB(
177 extern PtrExt2FileLockInfo NTAPI
Ext2AllocateByteLocks(
180 extern void NTAPI
Ext2ReleaseByteLocks(
181 PtrExt2FileLockInfo PtrByteLocks
);
183 extern PtrExt2IrpContext NTAPI
Ext2AllocateIrpContext(
185 PDEVICE_OBJECT PtrTargetDeviceObject
);
187 extern void NTAPI
Ext2ReleaseIrpContext(
188 PtrExt2IrpContext PtrIrpContext
);
190 extern NTSTATUS NTAPI
Ext2PostRequest(
191 PtrExt2IrpContext PtrIrpContext
,
194 extern void NTAPI
Ext2CommonDispatch(
195 void *Context
); // actually an IRPContext structure
197 extern void NTAPI
Ext2InitializeVCB(
198 PDEVICE_OBJECT PtrVolumeDeviceObject
,
199 PDEVICE_OBJECT PtrTargetDeviceObject
,
201 PLARGE_INTEGER AllocationSize
);
203 extern void NTAPI
Ext2CompleteRequest(
204 IN PIRP Irp OPTIONAL
,
208 extern NTSTATUS NTAPI
Ext2DenyAccess(
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
);
217 extern void NTAPI
Ext2CopyUnicodeString(
218 IN OUT PUNICODE_STRING PtrDestinationString
,
219 IN PUNICODE_STRING PtrSourceString
);
221 extern void NTAPI
Ext2CopyWideCharToUnicodeString(
222 IN OUT PUNICODE_STRING PtrDestinationString
,
223 IN PCWSTR PtrSourceString
);
225 extern void NTAPI
Ext2CopyCharToUnicodeString(
226 IN OUT PUNICODE_STRING PtrDestinationString
,
227 IN PCSTR PtrSourceString
,
228 IN USHORT SourceStringLength
);
230 extern void NTAPI
Ext2CopyZCharToUnicodeString(
231 IN OUT PUNICODE_STRING PtrDestinationString
,
232 IN PCSTR PtrSourceString
);
234 extern void NTAPI
Ext2DeallocateUnicodeString(
235 PUNICODE_STRING PtrUnicodeString
);
237 extern void NTAPI
Ext2ZerooutUnicodeString(
238 PUNICODE_STRING PtrUnicodeString
);
240 extern BOOLEAN NTAPI
Ext2SaveBCB(
241 PtrExt2IrpContext PtrIrpContext
,
243 PFILE_OBJECT PtrFileObject
);
245 extern BOOLEAN NTAPI
Ext2FlushSavedBCBs(
246 PtrExt2IrpContext PtrIrpContext
);
248 extern BOOLEAN NTAPI
AssertBCB(
251 extern ULONG NTAPI
Ext2Align(
252 ULONG NumberToBeAligned
,
255 extern LONGLONG NTAPI
Ext2Align64(
256 LONGLONG NumberToBeAligned
,
259 extern ULONG NTAPI
Ext2GetCurrentTime(VOID
);
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
268 extern NTSTATUS NTAPI
Ext2CommonCleanup(
269 PtrExt2IrpContext PtrIrpContext
,
271 BOOLEAN FirstAttempt
);
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
280 extern NTSTATUS NTAPI
Ext2CommonClose(
281 PtrExt2IrpContext PtrIrpContext
,
283 BOOLEAN FirstAttempt
);
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
292 extern NTSTATUS NTAPI
Ext2CommonRead(
293 PtrExt2IrpContext PtrIrpContext
,
295 BOOLEAN FirstAttempt
);
297 extern void * NTAPI
Ext2GetCallersBuffer(
300 extern NTSTATUS NTAPI
Ext2LockCallersBuffer(
302 BOOLEAN IsReadOperation
,
305 extern void NTAPI
Ext2MdlComplete(
306 PtrExt2IrpContext PtrIrpContext
,
308 PIO_STACK_LOCATION PtrIoStackLocation
,
309 BOOLEAN ReadCompletion
);
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
318 extern NTSTATUS NTAPI
Ext2CommonWrite(
319 PtrExt2IrpContext PtrIrpContext
,
322 extern void NTAPI
Ext2DeferredWriteCallBack (
323 void *Context1
, // Should be PtrIrpContext
324 void *Context2
); // Should be PtrIrp
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
333 extern NTSTATUS NTAPI
Ext2CommonFileInfo(
334 PtrExt2IrpContext PtrIrpContext
,
337 extern NTSTATUS NTAPI
Ext2GetBasicInformation(
339 PFILE_BASIC_INFORMATION PtrBuffer
,
340 long *PtrReturnedLength
);
342 extern NTSTATUS NTAPI
Ext2GetStandardInformation(
344 PFILE_STANDARD_INFORMATION PtrStdInformation
,
345 long *PtrReturnedLength
);
347 extern NTSTATUS NTAPI
Ext2GetNetworkOpenInformation(
349 PFILE_NETWORK_OPEN_INFORMATION PtrNetworkOpenInformation
,
350 long *PtrReturnedLength
);
352 extern NTSTATUS NTAPI
Ext2GetFullNameInformation(
355 PFILE_NAME_INFORMATION PtrNameInformation
,
356 long *PtrReturnedLength
);
358 extern NTSTATUS NTAPI
Ext2SetBasicInformation(
359 PtrExt2IrpContext PtrIrpContext
,
361 PFILE_OBJECT PtrFileObject
,
362 PFILE_BASIC_INFORMATION PtrFileInformation
);
364 extern NTSTATUS NTAPI
Ext2SetDispositionInformation(
368 PFILE_OBJECT PtrFileObject
,
369 PtrExt2IrpContext PtrIrpContext
,
371 PFILE_DISPOSITION_INFORMATION PtrBuffer
);
373 extern NTSTATUS NTAPI
Ext2SetAllocationInformation(
377 PFILE_OBJECT PtrFileObject
,
378 PtrExt2IrpContext PtrIrpContext
,
380 PFILE_ALLOCATION_INFORMATION PtrBuffer
);
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
389 extern NTSTATUS NTAPI
Ext2CommonFlush(
390 PtrExt2IrpContext PtrIrpContext
,
393 extern void NTAPI
Ext2FlushAFile(
394 PtrExt2NTRequiredFCB PtrReqdFCB
,
395 PIO_STATUS_BLOCK PtrIoStatus
);
397 extern void NTAPI
Ext2FlushLogicalVolume(
398 PtrExt2IrpContext PtrIrpContext
,
402 extern NTSTATUS NTAPI
Ext2FlushCompletion(
403 PDEVICE_OBJECT PtrDeviceObject
,
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
414 extern NTSTATUS NTAPI
Ext2CommonDirControl(
415 PtrExt2IrpContext PtrIrpContext
,
418 extern NTSTATUS NTAPI
Ext2QueryDirectory(
419 PtrExt2IrpContext PtrIrpContext
,
421 PEXTENDED_IO_STACK_LOCATION PtrIoStackLocation
,
422 PFILE_OBJECT PtrFileObject
,
426 extern NTSTATUS NTAPI
Ext2NotifyChangeDirectory(
427 PtrExt2IrpContext PtrIrpContext
,
429 PEXTENDED_IO_STACK_LOCATION PtrIoStackLocation
,
430 PFILE_OBJECT PtrFileObject
,
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
441 extern NTSTATUS NTAPI
Ext2CommonDeviceControl(
442 PtrExt2IrpContext PtrIrpContext
,
445 extern NTSTATUS NTAPI
Ext2DevIoctlCompletion(
446 PDEVICE_OBJECT PtrDeviceObject
,
450 extern NTSTATUS NTAPI
Ext2HandleQueryPath(
451 void *BufferPointer
);
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
460 extern NTSTATUS NTAPI
Ext2CommonShutdown(
461 PtrExt2IrpContext PtrIrpContext
,
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
471 NTSTATUS NTAPI
Ext2SetVolInfo(
472 IN PDEVICE_OBJECT DeviceObject
, // the logical volume device object
473 IN PIRP Irp
); // I/O Request Packet
476 /*************************************************************************
477 * Prototypes for the file fastio.c
478 *************************************************************************/
479 extern BOOLEAN NTAPI
Ext2FastIoCheckIfPossible(
480 IN PFILE_OBJECT FileObject
,
481 IN PLARGE_INTEGER FileOffset
,
485 IN BOOLEAN CheckForReadOperation
,
486 OUT PIO_STATUS_BLOCK IoStatus
,
487 IN PDEVICE_OBJECT DeviceObject
);
489 extern BOOLEAN NTAPI
Ext2FastIoRead(
490 IN PFILE_OBJECT FileObject
,
491 IN PLARGE_INTEGER FileOffset
,
496 OUT PIO_STATUS_BLOCK IoStatus
,
497 IN PDEVICE_OBJECT DeviceObject
);
499 extern BOOLEAN NTAPI
Ext2FastIoWrite(
500 IN PFILE_OBJECT FileObject
,
501 IN PLARGE_INTEGER FileOffset
,
506 OUT PIO_STATUS_BLOCK IoStatus
,
507 IN PDEVICE_OBJECT DeviceObject
);
509 extern BOOLEAN NTAPI
Ext2FastIoQueryBasicInfo(
510 IN PFILE_OBJECT FileObject
,
512 OUT PFILE_BASIC_INFORMATION Buffer
,
513 OUT PIO_STATUS_BLOCK IoStatus
,
514 IN PDEVICE_OBJECT DeviceObject
);
516 extern BOOLEAN NTAPI
Ext2FastIoQueryStdInfo(
517 IN PFILE_OBJECT FileObject
,
519 OUT PFILE_STANDARD_INFORMATION Buffer
,
520 OUT PIO_STATUS_BLOCK IoStatus
,
521 IN PDEVICE_OBJECT DeviceObject
);
523 extern BOOLEAN NTAPI
Ext2FastIoLock(
524 IN PFILE_OBJECT FileObject
,
525 IN PLARGE_INTEGER FileOffset
,
526 IN PLARGE_INTEGER Length
,
529 BOOLEAN FailImmediately
,
530 BOOLEAN ExclusiveLock
,
531 OUT PIO_STATUS_BLOCK IoStatus
,
532 IN PDEVICE_OBJECT DeviceObject
);
534 extern BOOLEAN NTAPI
Ext2FastIoUnlockSingle(
535 IN PFILE_OBJECT FileObject
,
536 IN PLARGE_INTEGER FileOffset
,
537 IN PLARGE_INTEGER Length
,
540 OUT PIO_STATUS_BLOCK IoStatus
,
541 IN PDEVICE_OBJECT DeviceObject
);
543 extern BOOLEAN NTAPI
Ext2FastIoUnlockAll(
544 IN PFILE_OBJECT FileObject
,
546 OUT PIO_STATUS_BLOCK IoStatus
,
547 IN PDEVICE_OBJECT DeviceObject
);
549 extern BOOLEAN NTAPI
Ext2FastIoUnlockAllByKey(
550 IN PFILE_OBJECT FileObject
,
553 OUT PIO_STATUS_BLOCK IoStatus
,
554 IN PDEVICE_OBJECT DeviceObject
);
556 extern void NTAPI
Ext2FastIoAcqCreateSec(
557 IN PFILE_OBJECT FileObject
);
559 extern void NTAPI
Ext2FastIoRelCreateSec(
560 IN PFILE_OBJECT FileObject
);
562 extern BOOLEAN NTAPI
Ext2AcqLazyWrite(
566 extern void NTAPI
Ext2RelLazyWrite(
569 extern BOOLEAN NTAPI
Ext2AcqReadAhead(
573 extern void NTAPI
Ext2RelReadAhead(
576 // the remaining are only valid under NT Version 4.0 and later
577 #if(_WIN32_WINNT >= 0x0400)
579 extern BOOLEAN NTAPI
Ext2FastIoQueryNetInfo(
580 IN PFILE_OBJECT FileObject
,
582 OUT PFILE_NETWORK_OPEN_INFORMATION Buffer
,
583 OUT PIO_STATUS_BLOCK IoStatus
,
584 IN PDEVICE_OBJECT DeviceObject
);
586 extern BOOLEAN NTAPI
Ext2FastIoMdlRead(
587 IN PFILE_OBJECT FileObject
,
588 IN PLARGE_INTEGER FileOffset
,
592 OUT PIO_STATUS_BLOCK IoStatus
,
593 IN PDEVICE_OBJECT DeviceObject
);
595 extern BOOLEAN NTAPI
Ext2FastIoMdlReadComplete(
596 IN PFILE_OBJECT FileObject
,
598 IN PDEVICE_OBJECT DeviceObject
);
600 extern BOOLEAN NTAPI
Ext2FastIoPrepareMdlWrite(
601 IN PFILE_OBJECT FileObject
,
602 IN PLARGE_INTEGER FileOffset
,
606 OUT PIO_STATUS_BLOCK IoStatus
,
607 IN PDEVICE_OBJECT DeviceObject
);
609 extern BOOLEAN NTAPI
Ext2FastIoMdlWriteComplete(
610 IN PFILE_OBJECT FileObject
,
611 IN PLARGE_INTEGER FileOffset
,
613 IN PDEVICE_OBJECT DeviceObject
);
615 extern NTSTATUS NTAPI
Ext2FastIoAcqModWrite(
616 IN PFILE_OBJECT FileObject
,
617 IN PLARGE_INTEGER EndingOffset
,
618 OUT PERESOURCE
*ResourceToRelease
,
619 IN PDEVICE_OBJECT DeviceObject
);
621 extern NTSTATUS NTAPI
Ext2FastIoRelModWrite(
622 IN PFILE_OBJECT FileObject
,
623 IN PERESOURCE ResourceToRelease
,
624 IN PDEVICE_OBJECT DeviceObject
);
626 extern NTSTATUS NTAPI
Ext2FastIoAcqCcFlush(
627 IN PFILE_OBJECT FileObject
,
628 IN PDEVICE_OBJECT DeviceObject
);
630 extern NTSTATUS NTAPI
Ext2FastIoRelCcFlush(
631 IN PFILE_OBJECT FileObject
,
632 IN PDEVICE_OBJECT DeviceObject
);
634 #endif // (_WIN32_WINNT >= 0x0400)
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
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
651 /*************************************************************************
652 * Prototypes for the file metadata.c
653 *************************************************************************/
655 extern void NTAPI
Ext2InitializeFCBInodeInfo (
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
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
670 extern ULONG NTAPI
Ext2AllocInode(
671 PtrExt2IrpContext PtrIrpContext
,
673 ULONG ParentINodeNo
);
675 extern BOOLEAN NTAPI
Ext2DeallocInode(
676 PtrExt2IrpContext PtrIrpContext
,
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...
688 extern BOOLEAN NTAPI
Ext2FreeDirectoryEntry(
689 PtrExt2IrpContext PtrIrpContext
,
690 PtrExt2FCB PtrParentFCB
,
691 PUNICODE_STRING PtrName
);
693 extern BOOLEAN NTAPI
Ext2AddBlockToFile(
694 PtrExt2IrpContext PtrIrpContext
,
697 PFILE_OBJECT PtrFileObject
,
698 BOOLEAN UpdateFileSize
);
700 extern BOOLEAN NTAPI
Ext2ReleaseDataBlocks(
702 PtrExt2IrpContext PtrIrpContext
);
704 extern BOOLEAN NTAPI
Ext2TruncateFileAllocationSize(
705 PtrExt2IrpContext PtrIrpContext
,
707 PFILE_OBJECT PtrFileObject
,
708 PLARGE_INTEGER PtrAllocationSize
);
710 extern ULONG NTAPI
Ext2AllocBlock(
711 PtrExt2IrpContext PtrIrpContext
,
715 extern BOOLEAN NTAPI
Ext2DeallocBlock(
716 PtrExt2IrpContext PtrIrpContext
,
720 extern BOOLEAN NTAPI
Ext2UpdateFileSize(
721 PtrExt2IrpContext PtrIrpContext
,
722 PFILE_OBJECT PtrFileObject
,
726 extern BOOLEAN NTAPI
Ext2DeleteFile(
728 PtrExt2IrpContext PtrIrpContext
);
730 extern BOOLEAN NTAPI
Ext2IsDirectoryEmpty(
733 PtrExt2IrpContext PtrIrpContext
);
735 extern NTSTATUS NTAPI
Ext2RenameOrLinkFile(
736 PtrExt2FCB PtrSourceFCB
,
737 PFILE_OBJECT PtrSourceFileObject
,
738 PtrExt2IrpContext PtrIrpContext
,
740 PFILE_RENAME_INFORMATION PtrRenameInfo
);
741 /*************************************************************************
742 * Prototypes for the file io.c
743 *************************************************************************/
744 extern NTSTATUS NTAPI
Ext2PassDownSingleReadWriteIRP(
745 PtrExt2IrpContext PtrIrpContext
,
748 LARGE_INTEGER ByteOffset
,
749 uint32 ReadWriteLength
,
750 BOOLEAN SynchronousIo
);
752 extern NTSTATUS NTAPI
Ext2PassDownMultiReadWriteIRP(
753 PEXT2_IO_RUN PtrIoRuns
,
755 ULONG TotalReadWriteLength
,
756 PtrExt2IrpContext PtrIrpContext
,
758 BOOLEAN SynchronousIo
);
760 extern NTSTATUS NTAPI
Ext2SingleSyncCompletionRoutine(
761 IN PDEVICE_OBJECT DeviceObject
,
766 extern NTSTATUS NTAPI
Ext2SingleAsyncCompletionRoutine (
767 IN PDEVICE_OBJECT DeviceObject
,
772 extern NTSTATUS NTAPI
Ext2MultiSyncCompletionRoutine(
773 IN PDEVICE_OBJECT DeviceObject
,
777 extern NTSTATUS NTAPI
Ext2MultiAsyncCompletionRoutine(
778 IN PDEVICE_OBJECT DeviceObject
,
782 #endif // _EXT2_PROTOS_H_