1 ////////////////////////////////////////////////////////////////////
2 // Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
4 // This file was released under the GPLv2 on June 2015.
5 ////////////////////////////////////////////////////////////////////
6 /*************************************************************************
10 * Module: UDF File System Driver (Kernel mode execution only)
13 * Contains the prototypes for functions in UDF FSD.
15 *************************************************************************/
17 #ifndef _UDF_PROTOS_H_
18 #define _UDF_PROTOS_H_
22 /*************************************************************************
23 * Prototypes for the file create.cpp
24 *************************************************************************/
25 extern NTSTATUS NTAPI
UDFCreate(
26 IN PDEVICE_OBJECT DeviceObject
, // the logical volume device object
27 IN PIRP Irp
); // I/O Request Packet
29 extern NTSTATUS
UDFCommonCreate(
30 IN PtrUDFIrpContext PtrIrpContext
,
33 extern NTSTATUS
UDFFirstOpenFile(
34 IN PVCB Vcb
, // volume control block
35 IN PFILE_OBJECT PtrNewFileObject
, // I/O Mgr. created file object
36 OUT PtrUDFFCB
* PtrNewFcb
,
37 IN PUDF_FILE_INFO RelatedFileInfo
,
38 IN PUDF_FILE_INFO NewFileInfo
,
39 IN PUNICODE_STRING LocalPath
,
40 IN PUNICODE_STRING CurName
);
42 extern NTSTATUS
UDFOpenFile(
43 IN PVCB Vcb
, // volume control block
44 IN PFILE_OBJECT PtrNewFileObject
, // I/O Mgr. created file object
45 IN PtrUDFFCB PtrNewFcb
);
47 extern NTSTATUS
UDFInitializeFCB(
48 IN PtrUDFFCB PtrNewFcb
, // FCB structure to be initialized
49 IN PVCB Vcb
, // logical volume (VCB) pointer
50 IN PtrUDFObjectName PtrObjectName
, // name of the object
51 IN ULONG Flags
, // is this a file/directory, etc.
52 IN PFILE_OBJECT FileObject
); // optional file object to be initialized
54 /*************************************************************************
55 * Prototypes for the file cleanup.cpp
56 *************************************************************************/
57 extern NTSTATUS NTAPI
UDFCleanup(
58 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
59 PIRP Irp
); // I/O Request Packet
61 extern NTSTATUS
UDFCommonCleanup(
62 PtrUDFIrpContext PtrIrpContext
,
65 extern NTSTATUS
UDFCloseFileInfoChain(IN PVCB Vcb
,
68 IN BOOLEAN VcbAcquired
);
69 /*************************************************************************
70 * Prototypes for the file close.cpp
71 *************************************************************************/
72 extern NTSTATUS NTAPI
UDFClose(
73 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
74 PIRP Irp
); // I/O Request Packet
76 extern NTSTATUS
UDFCommonClose(
77 PtrUDFIrpContext PtrIrpContext
,
80 #define UDF_CLOSE_NTREQFCB_DELETED 0x01
81 #define UDF_CLOSE_FCB_DELETED 0x02
83 extern ULONG
UDFCleanUpFcbChain(IN PVCB Vcb
,
86 IN BOOLEAN VcbAcquired
);
88 extern VOID
UDFCloseAllDelayed(PVCB Vcb
);
90 extern VOID NTAPI
UDFDelayedClose(PVOID unused
= NULL
);
92 extern NTSTATUS
UDFCloseAllXXXDelayedInDir(IN PVCB Vcb
,
93 IN PUDF_FILE_INFO FileInfo
,
96 #define UDFCloseAllDelayedInDir(Vcb,FI) \
97 UDFCloseAllXXXDelayedInDir(Vcb,FI,FALSE);
99 #define UDFCloseAllSystemDelayedInDir(Vcb,FI) \
100 UDFCloseAllXXXDelayedInDir(Vcb,FI,TRUE);
102 extern NTSTATUS
UDFQueueDelayedClose(PtrUDFIrpContext IrpContext
,
105 //extern VOID UDFRemoveFromDelayedQueue(PtrUDFFCB Fcb);
106 #define UDFRemoveFromDelayedQueue(Fcb) \
107 UDFCloseAllDelayedInDir((Fcb)->Vcb, (Fcb)->FileInfo)
109 #define UDFRemoveFromSystemDelayedQueue(Fcb) \
110 UDFCloseAllSystemDelayedInDir((Fcb)->Vcb, (Fcb)->FileInfo)
112 /*************************************************************************
113 * Prototypes for the file dircntrl.cpp
114 *************************************************************************/
115 extern NTSTATUS NTAPI
UDFDirControl(
116 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
117 PIRP Irp
); // I/O Request Packet
119 extern NTSTATUS NTAPI
UDFCommonDirControl(
120 PtrUDFIrpContext PtrIrpContext
,
123 extern NTSTATUS NTAPI
UDFQueryDirectory(
124 PtrUDFIrpContext PtrIrpContext
,
126 PIO_STACK_LOCATION IrpSp
,
127 PFILE_OBJECT FileObject
,
131 extern NTSTATUS NTAPI
UDFNotifyChangeDirectory(
132 PtrUDFIrpContext PtrIrpContext
,
134 PIO_STACK_LOCATION IrpSp
,
135 PFILE_OBJECT FileObject
,
139 /*************************************************************************
140 * Prototypes for the file devcntrl.cpp
141 *************************************************************************/
142 extern NTSTATUS NTAPI
UDFDeviceControl(
143 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
144 PIRP Irp
); // I/O Request Packet
146 extern NTSTATUS NTAPI
UDFCommonDeviceControl(
147 PtrUDFIrpContext PtrIrpContext
,
150 extern NTSTATUS NTAPI
UDFDevIoctlCompletion(
151 PDEVICE_OBJECT PtrDeviceObject
,
155 extern NTSTATUS NTAPI
UDFHandleQueryPath(
156 PVOID BufferPointer
);
158 /*************************************************************************
159 * Prototypes for the file fastio.cpp
160 *************************************************************************/
161 extern BOOLEAN NTAPI
UDFFastIoCheckIfPossible(
162 IN PFILE_OBJECT FileObject
,
163 IN PLARGE_INTEGER FileOffset
,
167 IN BOOLEAN CheckForReadOperation
,
168 OUT PIO_STATUS_BLOCK IoStatus
,
169 IN PDEVICE_OBJECT DeviceObject
);
171 extern FAST_IO_POSSIBLE NTAPI
UDFIsFastIoPossible(
174 extern BOOLEAN NTAPI
UDFFastIoQueryBasicInfo(
175 IN PFILE_OBJECT FileObject
,
177 OUT PFILE_BASIC_INFORMATION Buffer
,
178 OUT PIO_STATUS_BLOCK IoStatus
,
179 IN PDEVICE_OBJECT DeviceObject
);
181 extern BOOLEAN NTAPI
UDFFastIoQueryStdInfo(
182 IN PFILE_OBJECT FileObject
,
184 OUT PFILE_STANDARD_INFORMATION Buffer
,
185 OUT PIO_STATUS_BLOCK IoStatus
,
186 IN PDEVICE_OBJECT DeviceObject
);
188 extern VOID NTAPI
UDFFastIoAcqCreateSec(
189 IN PFILE_OBJECT FileObject
);
191 extern VOID NTAPI
UDFFastIoRelCreateSec(
192 IN PFILE_OBJECT FileObject
);
194 extern BOOLEAN NTAPI
UDFAcqLazyWrite(
198 extern VOID NTAPI
UDFRelLazyWrite(
201 extern BOOLEAN NTAPI
UDFAcqReadAhead(
205 extern VOID NTAPI
UDFRelReadAhead(
208 VOID NTAPI
UDFDriverUnload(
209 IN PDRIVER_OBJECT DriverObject
);
211 // the remaining are only valid under NT Version 4.0 and later
212 #if(_WIN32_WINNT >= 0x0400)
214 extern BOOLEAN NTAPI
UDFFastIoQueryNetInfo(
215 IN PFILE_OBJECT FileObject
,
217 OUT
struct _FILE_NETWORK_OPEN_INFORMATION
* Buffer
,
218 OUT PIO_STATUS_BLOCK IoStatus
,
219 IN PDEVICE_OBJECT DeviceObject
);
221 extern BOOLEAN NTAPI
UDFFastIoMdlRead(
222 IN PFILE_OBJECT FileObject
,
223 IN PLARGE_INTEGER FileOffset
,
227 OUT PIO_STATUS_BLOCK IoStatus
,
228 IN PDEVICE_OBJECT DeviceObject
);
230 extern BOOLEAN
UDFFastIoMdlReadComplete(
231 IN PFILE_OBJECT FileObject
,
233 IN PDEVICE_OBJECT DeviceObject
);
235 extern BOOLEAN NTAPI
UDFFastIoPrepareMdlWrite(
236 IN PFILE_OBJECT FileObject
,
237 IN PLARGE_INTEGER FileOffset
,
241 OUT PIO_STATUS_BLOCK IoStatus
,
242 IN PDEVICE_OBJECT DeviceObject
);
244 extern BOOLEAN NTAPI
UDFFastIoMdlWriteComplete(
245 IN PFILE_OBJECT FileObject
,
246 IN PLARGE_INTEGER FileOffset
,
248 IN PDEVICE_OBJECT DeviceObject
);
250 extern NTSTATUS NTAPI
UDFFastIoAcqModWrite(
251 IN PFILE_OBJECT FileObject
,
252 IN PLARGE_INTEGER EndingOffset
,
253 OUT PERESOURCE
* ResourceToRelease
,
254 IN PDEVICE_OBJECT DeviceObject
);
256 extern NTSTATUS NTAPI
UDFFastIoRelModWrite(
257 IN PFILE_OBJECT FileObject
,
258 IN PERESOURCE ResourceToRelease
,
259 IN PDEVICE_OBJECT DeviceObject
);
261 extern NTSTATUS NTAPI
UDFFastIoAcqCcFlush(
262 IN PFILE_OBJECT FileObject
,
263 IN PDEVICE_OBJECT DeviceObject
);
265 extern NTSTATUS NTAPI
UDFFastIoRelCcFlush(
266 IN PFILE_OBJECT FileObject
,
267 IN PDEVICE_OBJECT DeviceObject
);
269 extern BOOLEAN NTAPI
UDFFastIoDeviceControl (
270 IN PFILE_OBJECT FileObject
,
272 IN PVOID InputBuffer OPTIONAL
,
273 IN ULONG InputBufferLength
,
274 OUT PVOID OutputBuffer OPTIONAL
,
275 IN ULONG OutputBufferLength
,
276 IN ULONG IoControlCode
,
277 OUT PIO_STATUS_BLOCK IoStatus
,
278 IN PDEVICE_OBJECT DeviceObject
);
283 IN PFILE_OBJECT FileObject
,
284 IN PLARGE_INTEGER FileOffset
,
289 OUT PIO_STATUS_BLOCK IoStatus
,
290 IN PDEVICE_OBJECT DeviceObject
293 #endif // (_WIN32_WINNT >= 0x0400)
295 /*************************************************************************
296 * Prototypes for the file fileinfo.cpp
297 *************************************************************************/
298 extern NTSTATUS NTAPI
UDFFileInfo(
299 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
300 PIRP Irp
); // I/O Request Packet
302 extern NTSTATUS
UDFCommonFileInfo(
303 PtrUDFIrpContext PtrIrpContext
,
306 extern NTSTATUS
UDFGetBasicInformation(
307 IN PFILE_OBJECT FileObject
,
309 IN PFILE_BASIC_INFORMATION PtrBuffer
,
310 IN OUT LONG
* PtrReturnedLength
);
312 extern NTSTATUS
UDFGetNetworkInformation(
314 IN PFILE_NETWORK_OPEN_INFORMATION PtrBuffer
,
315 IN OUT PLONG PtrReturnedLength
);
317 extern NTSTATUS
UDFGetStandardInformation(
319 IN PFILE_STANDARD_INFORMATION PtrBuffer
,
320 IN OUT PLONG PtrReturnedLength
);
322 extern NTSTATUS
UDFGetInternalInformation(
323 PtrUDFIrpContext PtrIrpContext
,
326 IN PFILE_INTERNAL_INFORMATION PtrBuffer
,
327 IN OUT PLONG PtrReturnedLength
);
329 extern NTSTATUS
UDFGetEaInformation(
330 PtrUDFIrpContext PtrIrpContext
,
332 IN PFILE_EA_INFORMATION PtrBuffer
,
333 IN OUT PLONG PtrReturnedLength
);
335 extern NTSTATUS
UDFGetFullNameInformation(
336 IN PFILE_OBJECT FileObject
,
337 IN PFILE_NAME_INFORMATION PtrBuffer
,
338 IN OUT PLONG PtrReturnedLength
);
340 extern NTSTATUS
UDFGetAltNameInformation(
342 IN PFILE_NAME_INFORMATION PtrBuffer
,
343 IN OUT PLONG PtrReturnedLength
);
345 extern NTSTATUS
UDFGetPositionInformation(
346 IN PFILE_OBJECT FileObject
,
347 IN PFILE_POSITION_INFORMATION PtrBuffer
,
348 IN OUT PLONG PtrReturnedLength
);
350 extern NTSTATUS
UDFGetFileStreamInformation(
352 IN PFILE_STREAM_INFORMATION PtrBuffer
,
353 IN OUT PLONG PtrReturnedLength
);
355 extern NTSTATUS
UDFSetBasicInformation(
358 IN PFILE_OBJECT FileObject
,
359 IN PFILE_BASIC_INFORMATION PtrBuffer
);
361 extern NTSTATUS
UDFMarkStreamsForDeletion(
366 extern NTSTATUS
UDFSetDispositionInformation(
370 IN PFILE_OBJECT FileObject
,
373 extern NTSTATUS
UDFSetAllocationInformation(
377 IN PFILE_OBJECT FileObject
,
378 IN PtrUDFIrpContext PtrIrpContext
,
380 IN PFILE_ALLOCATION_INFORMATION PtrBuffer
);
382 extern NTSTATUS
UDFSetEOF(
383 IN PIO_STACK_LOCATION PtrSp
,
387 IN PFILE_OBJECT FileObject
,
389 IN PFILE_END_OF_FILE_INFORMATION PtrBuffer
);
391 extern NTSTATUS
UDFRename(IN PIO_STACK_LOCATION IrpSp
,
394 IN PFILE_OBJECT FileObject
,
395 IN PFILE_RENAME_INFORMATION PtrBuffer
);
397 extern NTSTATUS
UDFStoreFileId(
400 IN PUDF_FILE_INFO fi
,
403 extern NTSTATUS
UDFRemoveFileId(
407 #define UDFRemoveFileId__(Vcb, fi) \
408 UDFRemoveFileId(Vcb, UDFGetNTFileId(Vcb, fi, &(fi->Fcb->FCBName->ObjectName)));
410 extern VOID
UDFReleaseFileIdCache(
413 extern NTSTATUS
UDFGetOpenParamsByFileId(
416 OUT PUNICODE_STRING
* FName
,
417 OUT BOOLEAN
* CaseSens
);
419 extern NTSTATUS
UDFHardLink(
420 IN PIO_STACK_LOCATION PtrSp
,
423 IN PFILE_OBJECT FileObject1
, // Source File
424 IN PFILE_LINK_INFORMATION PtrBuffer
);
425 /*************************************************************************
426 * Prototypes for the file flush.cpp
427 *************************************************************************/
428 extern NTSTATUS NTAPI
UDFFlush(
429 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
430 PIRP Irp
); // I/O Request Packet
432 extern NTSTATUS
UDFCommonFlush(
433 PtrUDFIrpContext PtrIrpContext
,
436 extern ULONG
UDFFlushAFile(
439 PIO_STATUS_BLOCK PtrIoStatus
,
440 IN ULONG FlushFlags
= 0);
442 extern ULONG
UDFFlushADirectory(
444 IN PUDF_FILE_INFO FI
,
445 OUT PIO_STATUS_BLOCK PtrIoStatus
,
446 ULONG FlushFlags
= 0);
448 extern ULONG
UDFFlushLogicalVolume(
449 PtrUDFIrpContext PtrIrpContext
,
452 ULONG FlushFlags
= 0);
454 extern NTSTATUS NTAPI
UDFFlushCompletion(
455 PDEVICE_OBJECT PtrDeviceObject
,
459 extern BOOLEAN
UDFFlushIsBreaking(
461 IN ULONG FlushFlags
= 0);
463 extern VOID
UDFFlushTryBreak(
466 /*************************************************************************
467 * Prototypes for the file fscntrl.cpp
468 *************************************************************************/
470 extern NTSTATUS NTAPI
UDFFSControl(
471 PDEVICE_OBJECT DeviceObject
,
474 extern NTSTATUS NTAPI
UDFCommonFSControl(
475 PtrUDFIrpContext PtrIrpContext
,
476 PIRP Irp
); // I/O Request Packet
478 extern NTSTATUS NTAPI
UDFUserFsCtrlRequest(
479 PtrUDFIrpContext PtrIrpContext
,
482 extern NTSTATUS NTAPI
UDFMountVolume(
483 PtrUDFIrpContext PtrIrpContext
,
486 extern NTSTATUS
UDFStartEjectWaiter(IN PVCB Vcb
);
488 extern VOID
UDFScanForDismountedVcb (IN PtrUDFIrpContext IrpContext
);
490 extern NTSTATUS
UDFCompleteMount(IN PVCB Vcb
);
492 extern VOID
UDFCloseResidual(IN PVCB Vcb
);
494 extern VOID
UDFCleanupVCB(IN PVCB Vcb
);
496 extern NTSTATUS
UDFIsVolumeMounted(IN PtrUDFIrpContext IrpContext
,
499 extern NTSTATUS
UDFIsVolumeDirty(IN PtrUDFIrpContext IrpContext
,
502 extern NTSTATUS
UDFGetStatistics(IN PtrUDFIrpContext IrpContext
,
505 extern NTSTATUS
UDFLockVolume (IN PtrUDFIrpContext IrpContext
,
509 extern NTSTATUS
UDFUnlockVolume (IN PtrUDFIrpContext IrpContext
,
513 extern NTSTATUS
UDFIsPathnameValid(IN PtrUDFIrpContext IrpContext
,
516 extern NTSTATUS
UDFDismountVolume(IN PtrUDFIrpContext IrpContext
,
519 extern NTSTATUS
UDFGetVolumeBitmap(IN PtrUDFIrpContext IrpContext
,
522 extern NTSTATUS
UDFGetRetrievalPointers(IN PtrUDFIrpContext IrpContext
,
526 extern NTSTATUS
UDFInvalidateVolumes(IN PtrUDFIrpContext IrpContext
,
529 /*************************************************************************
530 * Prototypes for the file LockCtrl.cpp
531 *************************************************************************/
533 extern NTSTATUS NTAPI
UDFLockControl(
534 IN PDEVICE_OBJECT DeviceObject
, // the logical volume device object
535 IN PIRP Irp
); // I/O Request Packet
537 extern NTSTATUS NTAPI
UDFCommonLockControl(
538 IN PtrUDFIrpContext PtrIrpContext
,
541 extern BOOLEAN NTAPI
UDFFastLock(
542 IN PFILE_OBJECT FileObject
,
543 IN PLARGE_INTEGER FileOffset
,
544 IN PLARGE_INTEGER Length
,
547 BOOLEAN FailImmediately
,
548 BOOLEAN ExclusiveLock
,
549 OUT PIO_STATUS_BLOCK IoStatus
,
550 IN PDEVICE_OBJECT DeviceObject
);
552 extern BOOLEAN NTAPI
UDFFastUnlockSingle(
553 IN PFILE_OBJECT FileObject
,
554 IN PLARGE_INTEGER FileOffset
,
555 IN PLARGE_INTEGER Length
,
558 OUT PIO_STATUS_BLOCK IoStatus
,
559 IN PDEVICE_OBJECT DeviceObject
);
561 extern BOOLEAN NTAPI
UDFFastUnlockAll(
562 IN PFILE_OBJECT FileObject
,
564 OUT PIO_STATUS_BLOCK IoStatus
,
565 IN PDEVICE_OBJECT DeviceObject
);
567 extern BOOLEAN NTAPI
UDFFastUnlockAllByKey(
568 IN PFILE_OBJECT FileObject
,
571 OUT PIO_STATUS_BLOCK IoStatus
,
572 IN PDEVICE_OBJECT DeviceObject
);
574 /*************************************************************************
575 * Prototypes for the file misc.cpp
576 *************************************************************************/
577 extern NTSTATUS
UDFInitializeZones(
580 extern VOID
UDFDestroyZones(
583 extern BOOLEAN __fastcall
UDFIsIrpTopLevel(
584 PIRP Irp
); // the IRP sent to our dispatch routine
586 extern long UDFExceptionFilter(
587 PtrUDFIrpContext PtrIrpContext
,
588 PEXCEPTION_POINTERS PtrExceptionPointers
);
590 extern NTSTATUS
UDFExceptionHandler(
591 PtrUDFIrpContext PtrIrpContext
,
594 extern VOID
UDFLogEvent(
595 NTSTATUS UDFEventLogId
, // the UDF private message id
596 NTSTATUS RC
); // any NT error code we wish to log ...
598 extern PtrUDFObjectName
UDFAllocateObjectName(
601 extern VOID __fastcall
UDFReleaseObjectName(
602 PtrUDFObjectName PtrObjectName
);
604 extern PtrUDFCCB
UDFAllocateCCB(
607 extern VOID __fastcall
UDFReleaseCCB(
610 extern VOID __fastcall
UDFCleanUpCCB(
613 extern PtrUDFFCB
UDFAllocateFCB(
616 /*extern VOID __fastcall UDFReleaseFCB(
631 extern VOID __fastcall
UDFCleanUpFCB(
634 extern PtrUDFIrpContext
UDFAllocateIrpContext(
636 PDEVICE_OBJECT PtrTargetDeviceObject
);
638 extern VOID
UDFReleaseIrpContext(
639 PtrUDFIrpContext PtrIrpContext
);
641 extern NTSTATUS
UDFPostRequest(
642 PtrUDFIrpContext PtrIrpContext
,
645 extern VOID NTAPI
UDFCommonDispatch(
646 VOID
*Context
); // actually an IRPContext structure
648 extern NTSTATUS
UDFInitializeVCB(
649 PDEVICE_OBJECT PtrVolumeDeviceObject
,
650 PDEVICE_OBJECT PtrTargetDeviceObject
,
659 extern ULONG
UDFGetRegParameter(
662 IN ULONG DefValue
= 0);
671 extern VOID
UDFReleaseVCB(
674 extern ULONG
UDFRegCheckParameterValue(
675 IN PUNICODE_STRING RegistryPath
,
677 IN PUNICODE_STRING PtrVolumePath
,
678 IN PCWSTR DefaultPath
,
679 IN ULONG DefValue
= 0);
681 extern VOID
UDFInitializeIrpContextFromLite (
682 OUT PtrUDFIrpContext
*IrpContext
,
683 IN PtrUDFIrpContextLite IrpContextLite
);
685 extern NTSTATUS
UDFInitializeIrpContextLite (
686 OUT PtrUDFIrpContextLite
*IrpContextLite
,
687 IN PtrUDFIrpContext IrpContext
,
691 extern NTSTATUS NTAPI
UDFQuerySetEA(
692 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
693 PIRP Irp
// I/O Request Packet
697 UDFIsResourceAcquired(
698 IN PERESOURCE Resource
701 extern BOOLEAN
UDFAcquireResourceExclusiveWithCheck(
702 IN PERESOURCE Resource
705 extern BOOLEAN
UDFAcquireResourceSharedWithCheck(
706 IN PERESOURCE Resource
709 extern NTSTATUS
UDFWCacheErrorHandler(
711 IN PWCACHE_ERROR_CONTEXT ErrorInfo
714 /*************************************************************************
715 * Prototypes for the file NameSup.cpp
716 *************************************************************************/
720 /*************************************************************************
721 * Prototypes for the file Udf_info\physical.cpp
722 *************************************************************************/
725 extern OSSTATUS
UDFTRead(PVOID _Vcb
,
726 PVOID Buffer
, // Target buffer
732 extern OSSTATUS
UDFTWrite(IN PVOID _Vcb
,
733 IN PVOID Buffer
, // Target buffer
736 OUT PULONG WrittenBytes
,
739 extern OSSTATUS
UDFPrepareForWriteOperation(
744 extern OSSTATUS
UDFReadDiscTrackInfo(PDEVICE_OBJECT DeviceObject
, // the target device object
745 PVCB Vcb
); // Volume Control Block for ^ DevObj
747 extern OSSTATUS
UDFReadAndProcessFullToc(PDEVICE_OBJECT DeviceObject
, // the target device object
750 extern OSSTATUS
UDFUseStandard(PDEVICE_OBJECT DeviceObject
, // the target device object
751 PVCB Vcb
); // Volume control block fro this DevObj
753 extern OSSTATUS
UDFGetBlockSize(PDEVICE_OBJECT DeviceObject
, // the target device object
754 PVCB Vcb
); // Volume control block fro this DevObj
756 extern OSSTATUS
UDFGetDiskInfo(IN PDEVICE_OBJECT DeviceObject
, // the target device object
757 IN PVCB Vcb
); // Volume control block from this DevObj
759 extern VOID NTAPI
UDFEjectReqWaiter(IN PVOID Context
);
761 extern VOID
UDFStopEjectWaiter(PVCB Vcb
);
763 //extern OSSTATUS UDFPrepareForReadOperation(IN PVCB Vcb,
765 //#define UDFPrepareForReadOperation(a,b) (STATUS_SUCCESS)
767 extern VOID
UDFUpdateNWA(PVCB Vcb
,
772 extern OSSTATUS
UDFDoDismountSequence(IN PVCB Vcb
,
773 IN PPREVENT_MEDIA_REMOVAL_USER_IN Buf
,
776 // read physical sectors
777 /*OSSTATUS UDFReadSectors(IN PVCB Vcb,
778 IN BOOLEAN Translate,// Translate Logical to Physical
783 OUT PULONG ReadBytes);*/
784 #define UDFReadSectors(Vcb, Translate, Lba, BCount, Direct, Buffer, ReadBytes) \
785 (( WCacheIsInitialized__(&((Vcb)->FastCache)) && (KeGetCurrentIrql() < DISPATCH_LEVEL)) ? \
786 (WCacheReadBlocks__(&((Vcb)->FastCache), Vcb, Buffer, Lba, BCount, ReadBytes, Direct)) : \
787 (UDFTRead(Vcb, Buffer, (BCount)<<((Vcb)->BlockSizeBits), Lba, ReadBytes, 0)))
790 // read data inside physical sector
791 extern OSSTATUS
UDFReadInSector(IN PVCB Vcb
,
792 IN BOOLEAN Translate
, // Translate Logical to Physical
794 IN ULONG i
, // offset in sector
795 IN ULONG l
, // transfer length
798 OUT PULONG ReadBytes
);
799 // read unaligned data
800 extern OSSTATUS
UDFReadData(IN PVCB Vcb
,
801 IN BOOLEAN Translate
, // Translate Logical to Physical
806 OUT PULONG ReadBytes
);
808 // write physical sectors
809 OSSTATUS
UDFWriteSectors(IN PVCB Vcb
,
810 IN BOOLEAN Translate
, // Translate Logical to Physical
813 IN BOOLEAN Direct
, // setting this flag delays flushing of given
814 // data to indefinite term
816 OUT PULONG WrittenBytes
);
817 // write directly to cached sector
818 OSSTATUS
UDFWriteInSector(IN PVCB Vcb
,
819 IN BOOLEAN Translate
, // Translate Logical to Physical
821 IN ULONG i
, // offset in sector
822 IN ULONG l
, // transfer length
825 OUT PULONG WrittenBytes
);
826 // write data at unaligned offset & length
827 OSSTATUS
UDFWriteData(IN PVCB Vcb
,
828 IN BOOLEAN Translate
, // Translate Logical to Physical
831 IN BOOLEAN Direct
, // setting this flag delays flushing of given
832 // data to indefinite term
834 OUT PULONG WrittenBytes
);
836 OSSTATUS
UDFResetDeviceDriver(IN PVCB Vcb
.
837 IN PDEVICE_OBJECT TargetDeviceObject
,
840 /*************************************************************************
841 * Prototypes for the file Pnp.cpp
842 *************************************************************************/
845 IN PDEVICE_OBJECT DeviceObject
,
849 /*************************************************************************
850 * Prototypes for the file read.cpp
851 *************************************************************************/
852 extern OSSTATUS NTAPI
UDFRead(
853 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
854 PIRP Irp
); // I/O Request Packet
856 extern NTSTATUS
UDFPostStackOverflowRead(
857 IN PtrUDFIrpContext PtrIrpContext
,
861 extern VOID NTAPI
UDFStackOverflowRead(
865 extern NTSTATUS
UDFCommonRead(
866 PtrUDFIrpContext PtrIrpContext
,
869 extern PVOID
UDFGetCallersBuffer(
870 PtrUDFIrpContext PtrIrpContext
,
873 extern NTSTATUS
UDFLockCallersBuffer(
874 PtrUDFIrpContext PtrIrpContext
,
876 BOOLEAN IsReadOperation
,
879 extern NTSTATUS
UDFUnlockCallersBuffer(
880 PtrUDFIrpContext PtrIrpContext
,
884 extern VOID
UDFMdlComplete(
885 PtrUDFIrpContext PtrIrpContext
,
887 PIO_STACK_LOCATION IrpSp
,
888 BOOLEAN ReadCompletion
);
890 /*************************************************************************
891 * Prototypes for the file SecurSup.cpp
892 *************************************************************************/
893 extern NTSTATUS
UDFGetSecurity(
894 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
895 PIRP Irp
); // I/O Request Packet
897 extern NTSTATUS
UDFSetSecurity(
898 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
899 PIRP Irp
); // I/O Request Packet
901 extern NTSTATUS
UDFCommonGetSecurity(
902 PtrUDFIrpContext PtrIrpContext
,
905 extern NTSTATUS
UDFCommonSetSecurity(
906 PtrUDFIrpContext PtrIrpContext
,
913 IN PSECURITY_DESCRIPTOR
* SecurityDesc
);
918 IN PFILE_OBJECT FileObject
, // OPTIONAL
920 IN PtrUDFNTRequiredFCB NtReqFcb
);
924 IN PtrUDFNTRequiredFCB NtReqFcb
,
925 IN BOOLEAN AutoInherited
);
931 IN PSECURITY_DESCRIPTOR
* SecurityDesc
);
934 UDFCheckAccessRights(
935 PFILE_OBJECT FileObject
,
936 PACCESS_STATE AccessState
,
939 ACCESS_MASK DesiredAccess
,
944 PFILE_OBJECT FileObject
,
945 PACCESS_STATE AccessState
,
948 ACCESS_MASK DesiredAccess
,
951 /*************************************************************************
952 * Prototypes for the file Shutdown.cpp
953 *************************************************************************/
954 extern NTSTATUS NTAPI
UDFShutdown(
955 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
956 PIRP Irp
); // I/O Request Packet
958 extern NTSTATUS
UDFCommonShutdown(
959 PtrUDFIrpContext PtrIrpContext
,
962 /*************************************************************************
963 * Prototypes for the file Udf_dbg.cpp
964 *************************************************************************/
966 UDFDebugAcquireResourceSharedLite(
967 IN PERESOURCE Resource
,
973 UDFDebugAcquireSharedStarveExclusive(
974 IN PERESOURCE Resource
,
980 UDFDebugAcquireResourceExclusiveLite(
981 IN PERESOURCE Resource
,
987 UDFDebugReleaseResourceForThreadLite(
988 IN PERESOURCE Resource
,
989 IN ERESOURCE_THREAD ResourceThreadId
,
994 UDFDebugDeleteResource(
995 IN PERESOURCE Resource
,
996 IN ERESOURCE_THREAD ResourceThreadId
,
1001 UDFDebugInitializeResourceLite(
1002 IN PERESOURCE Resource
,
1003 IN ERESOURCE_THREAD ResourceThreadId
,
1008 UDFDebugConvertExclusiveToSharedLite(
1009 IN PERESOURCE Resource
,
1010 IN ERESOURCE_THREAD ResourceThreadId
,
1015 UDFDebugAcquireSharedWaitForExclusive(
1016 IN PERESOURCE Resource
,
1022 UDFDebugInterlockedIncrement(
1028 UDFDebugInterlockedDecrement(
1034 UDFDebugInterlockedExchangeAdd(
1040 /*************************************************************************
1041 * Prototypes for the file UDFinit.cpp
1042 *************************************************************************/
1043 extern "C" NTSTATUS NTAPI
DriverEntry(
1044 PDRIVER_OBJECT DriverObject
, // created by the I/O sub-system
1045 PUNICODE_STRING RegistryPath
); // path to the registry key
1047 extern VOID NTAPI
UDFInitializeFunctionPointers(
1048 PDRIVER_OBJECT DriverObject
); // created by the I/O sub-system
1051 UDFFsNotification(IN PDEVICE_OBJECT DeviceObject
,
1052 IN BOOLEAN FsActive
);
1055 //extern ptrFsRtlNotifyVolumeEvent FsRtlNotifyVolumeEvent;
1059 UDFGetInstallVersion(PULONG iVer
);
1062 UDFGetInstallTime(PULONG iTime
);
1065 UDFGetTrialEnd(PULONG iTrial
);
1067 /*************************************************************************
1068 * Prototypes for the file verify.cpp
1069 *************************************************************************/
1071 extern NTSTATUS
UDFVerifyVcb (
1072 IN PtrUDFIrpContext IrpContext
,
1076 extern NTSTATUS
UDFVerifyVolume (
1079 extern NTSTATUS
UDFPerformVerify (
1080 IN PtrUDFIrpContext IrpContext
,
1082 IN PDEVICE_OBJECT DeviceToVerify
1085 extern BOOLEAN
UDFCheckForDismount (
1086 IN PtrUDFIrpContext IrpContext
,
1088 IN BOOLEAN VcbAcquired
1091 extern BOOLEAN
UDFDismountVcb (
1093 IN BOOLEAN VcbAcquired
);
1095 extern NTSTATUS
UDFCompareVcb(IN PVCB OldVcb
,
1097 IN BOOLEAN PhysicalOnly
);
1099 /*************************************************************************
1100 * Prototypes for the file VolInfo.cpp
1101 *************************************************************************/
1102 extern NTSTATUS NTAPI
UDFQueryVolInfo(PDEVICE_OBJECT DeviceObject
,
1105 extern NTSTATUS
UDFCommonQueryVolInfo (PtrUDFIrpContext PtrIrpContext
,
1108 extern NTSTATUS NTAPI
UDFSetVolInfo(PDEVICE_OBJECT DeviceObject
, // the logical volume device object
1109 PIRP Irp
); // I/O Request Packet
1111 extern NTSTATUS
UDFCommonSetVolInfo(PtrUDFIrpContext PtrIrpContext
,
1114 /*************************************************************************
1115 * Prototypes for the file write.cpp
1116 *************************************************************************/
1117 extern NTSTATUS NTAPI
UDFWrite(
1118 PDEVICE_OBJECT DeviceObject
, // the logical volume device object
1119 PIRP Irp
); // I/O Request Packet
1121 extern NTSTATUS
UDFCommonWrite(
1122 PtrUDFIrpContext PtrIrpContext
,
1125 extern VOID NTAPI
UDFDeferredWriteCallBack (
1126 VOID
*Context1
, // Should be PtrIrpContext
1127 VOID
*Context2
); // Should be Irp
1129 extern VOID
UDFPurgeCacheEx_(
1130 PtrUDFNTRequiredFCB NtReqFcb
,
1133 //#ifndef ALLOW_SPARSE
1135 //#endif ALLOW_SPARSE
1137 PFILE_OBJECT FileObject
1140 /*#ifdef ALLOW_SPARSE
1141 #define UDFZeroDataEx(NtReqFcb, Offset, Length, CanWait) \
1142 UDFPurgeCacheEx_(NtReqFcb, Offset, Length)
1143 #define UDFPurgeCacheEx(NtReqFcb, Offset, Length, CanWait) \
1144 UDFPurgeCacheEx_(NtReqFcb, Offset, Length)
1145 #else // ALLOW_SPARSE*/
1146 #define UDFZeroDataEx(NtReqFcb, Offset, Length, CanWait, Vcb, FileObject) \
1147 UDFPurgeCacheEx_(NtReqFcb, Offset, Length, CanWait, Vcb, FileObject)
1148 #define UDFPurgeCacheEx(NtReqFcb, Offset, Length, CanWait, Vcb, FileObject) \
1149 UDFPurgeCacheEx_(NtReqFcb, Offset, Length, CanWait, Vcb, FileObject)
1150 //#endif //ALLOW_SPARSE
1154 #endif // _UDF_PROTOS_H_