20 #define UDF_BUG_CHECK_ID UDF_FILE_READ 24 #define OVERFLOW_READ_THRESHHOLD (0xE00) 26 #define OVERFLOW_READ_THRESHHOLD (0xA00) 28 #else // defined(_M_IX86) 29 #define OVERFLOW_READ_THRESHHOLD (0x1000) 30 #endif // defined(_M_IX86) 79 Irp->IoStatus.Status = RC;
80 Irp->IoStatus.Information = 0;
127 UDFPrint((
"Getting too close to stack limit pass request to Fsp\n"));
139 Resource =
Fcb->NTRequiredFCB->CommonFCBHeader.Resource;
193 UDFPrint((
"UDFStackOverflowRead: \n"));
238 SIZE_T NumberBytesRead = 0;
267 UDFPrint((
" FSRTL_FSP_TOP_LEVEL_IRP\n"));
270 UDFPrint((
" FSRTL_CACHE_TOP_LEVEL_IRP\n"));
273 UDFPrint((
" FSRTL_MOD_WRITE_TOP_LEVEL_IRP\n"));
277 UDFPrint((
" FSRTL_FAST_IO_TOP_LEVEL_IRP\n"));
281 UDFPrint((
" NULL TOP_LEVEL_IRP\n"));
287 UDFPrint((
" RECURSIVE_IRP, TOP = %x\n", TopIrp));
294 MmPrint((
" Enter Irp, MDL=%x\n",
Irp->MdlAddress));
295 if(
Irp->MdlAddress) {
349 CanWait ?
"W" :
"w", PagingIo ?
"Pg" :
"pg",
350 NonBufferedIo ?
"NBuf" :
"buff", SynchronousIo ?
"Snc" :
"Asc"));
385 UDFPrint((
" UDF_IRP_CONTEXT_FLUSH2_REQUIRED\n"));
391 #ifdef UDF_DELAYED_CLOSE 393 #endif //UDF_DELAYED_CLOSE 399 UDFPrint((
" UDF_IRP_CONTEXT_FLUSH_REQUIRED\n"));
404 PtrResourceAcquired = &(
Vcb->VCBResource);
409 PtrResourceAcquired =
NULL;
414 PtrResourceAcquired = &(
Vcb->VCBResource);
452 NonBufferedIo =
TRUE;
518 UDFPrint((
" TruncatedLength = %x\n", TruncatedLength));
536 #define UDF_REQ_NOT_VIA_CACHE_MGR(ptr) (!MmIsRecursiveIoFault() && ((ptr)->ImageSectionObject != NULL)) 555 MmPrint((
" CcFlushCache()\n"));
584 PtrResourceAcquired2 = &(
NtReqFcb->PagingIoResource);
593 PtrResourceAcquired2 = &(
NtReqFcb->PagingIoResource);
602 PtrResourceAcquired = &(
NtReqFcb->MainResource);
619 #ifdef UDF_DISABLE_SYSTEM_CACHE_MANAGER 620 NonBufferedIo =
TRUE;
623 if(
Fcb &&
Fcb->FileInfo &&
Fcb->FileInfo->Dloc) {
624 AdPrint((
"UDFCommonRead: DataLoc %x, Mapping %x\n", &
Fcb->FileInfo->Dloc->DataLoc,
Fcb->FileInfo->Dloc->DataLoc.Mapping));
628 if (!NonBufferedIo) {
638 MmPrint((
" CcInitializeCacheMap()\n"));
643 MmPrint((
" CcSetReadAheadGranularity()\n"));
677 RC =
Irp->IoStatus.Status;
678 NumberBytesRead =
Irp->IoStatus.Information;
684 MmPrint((
" Read NonBufferedIo\n"));
688 UDFPrint((
"FSRTL_MOD_WRITE_TOP_LEVEL_IRP => CanWait\n"));
692 UDFPrint((
"FSRTL_CACHE_TOP_LEVEL_IRP => CanWait\n"));
707 MmPrint((
" !PASSIVE_LEVEL\n"));
712 MmPrint((
" Locked => CanWait\n"));
725 PtrResourceAcquired2 = &(
NtReqFcb->PagingIoResource);
739 CacheLocked, (
PCHAR)SystemBuffer, &NumberBytesRead);
784 if(PtrResourceAcquired2) {
787 if(PtrResourceAcquired) {
789 (PtrResourceAcquired ==
820 if (SynchronousIo && !PagingIo &&
NT_SUCCESS(RC)) {
832 Irp->IoStatus.Status = RC;
833 Irp->IoStatus.Information = NumberBytesRead;
834 UDFPrint((
" NumberBytesRead = %x\n", NumberBytesRead));
838 MmPrint((
" Complete Irp, MDL=%x\n",
Irp->MdlAddress));
839 if(
Irp->MdlAddress) {
852 ULONG LockBufferCounter = 0;
853 ULONG BuildMdlCounter = 0;
878 UDFPrint((
"UDFGetCallersBuffer: \n"));
881 if(
Irp->MdlAddress) {
882 MmPrint((
" UDFGetCallersBuffer: MmGetSystemAddressForMdl(Irp->MdlAddress) MDL=%x\n",
Irp->MdlAddress));
888 #ifndef POST_LOCK_PAGES 889 MmPrint((
" UDFGetCallersBuffer: MmGetSystemAddressForMdl(PtrIrpContext->PtrMdl) MDL=%x\n", PtrIrpContext->
PtrMdl));
891 #else //POST_LOCK_PAGES 893 MmPrint((
" UDFGetCallersBuffer: TransitionBuffer\n"));
898 MmPrint((
" MmProbeAndLockPages()\n"));
910 MmPrint((
" MmGetSystemAddressForMdlSafer()\n"));
912 #endif //POST_LOCK_PAGES 914 MmPrint((
" UDFGetCallersBuffer: Irp->UserBuffer\n"));
915 ReturnedBuffer =
Irp->UserBuffer;
918 return(ReturnedBuffer);
946 UDFPrint((
"UDFLockCallersBuffer: \n"));
952 if (!(
Irp->MdlAddress)) {
969 MmPrint((
" IoAllocateMdl()\n"));
977 MmPrint((
" Alloc MDL=%x\n", PtrMdl));
987 #ifndef POST_LOCK_PAGES 989 MmPrint((
" MmProbeAndLockPages()\n"));
992 MmPrint((
" MmProbeAndLockPages() failed\n"));
996 #endif //POST_LOCK_PAGES 1000 PtrIrpContext->
PtrMdl = PtrMdl;
1003 MmPrint((
" UDFLockCallersBuffer: do nothing, MDL=%x\n",
Irp->MdlAddress));
1011 MmPrint((
" Free MDL=%x\n", PtrMdl));
1042 UDFPrint((
"UDFUnlockCallersBuffer: \n"));
1050 UDFPrint((
" UDF_IRP_CONTEXT_BUFFER_LOCKED MDL=%x, Irp MDL=%x\n", PtrIrpContext->
PtrMdl,
Irp->MdlAddress));
1052 MmPrint((
" UDFUnlockCallersBuffer: free TransitionBuffer\n"));
1069 LockBufferCounter--;
1083 if(
Irp->MdlAddress) {
1086 UDFPrint((
" UDF_IRP_CONTEXT_BUFFER_LOCKED MDL=%x, Irp MDL=%x\n", PtrIrpContext->
PtrMdl,
Irp->MdlAddress));
1133 if (ReadCompletion) {
1134 MmPrint((
" CcMdlReadComplete() MDL=%x\n",
Irp->MdlAddress));
1138 MmPrint((
" CcMdlWriteComplete() MDL=%x\n",
Irp->MdlAddress));
1150 Irp->IoStatus.Status = RC;
1151 Irp->IoStatus.Information = 0;
#define KeGetCurrentIrql()
#define UDFAcquireResourceExclusive(Resource, CanWait)
VOID UDFReleaseIrpContext(PtrUDFIrpContext PtrIrpContext)
PtrUDFIrpContext UDFAllocateIrpContext(PIRP Irp, PDEVICE_OBJECT PtrTargetDeviceObject)
struct _UDFContextControlBlock * PtrUDFCCB
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define UDFCloseAllSystemDelayedInDir(Vcb, FI)
#define FsRtlEnterFileSystem
#define FSRTL_MOD_WRITE_TOP_LEVEL_IRP
VOID NTAPI CcFlushCache(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, IN OPTIONAL PLARGE_INTEGER FileOffset, IN ULONG Length, OUT OPTIONAL PIO_STATUS_BLOCK IoStatus)
#define FsRtlExitFileSystem
VOID UDFLogEvent(NTSTATUS UDFEventLogId, NTSTATUS RC)
VOID NTAPI UDFStackOverflowRead(IN PVOID Context, IN PKEVENT Event)
#define STATUS_INVALID_PARAMETER
#define UDF_NODE_TYPE_VCB
#define CollectStatistics2(VCB, Field)
#define UDFReleaseResource(Resource)
#define STATUS_INVALID_DEVICE_REQUEST
NTSTATUS NTAPI UDFRead(PDEVICE_OBJECT DeviceObject, PIRP Irp)
#define FILE_USE_FILE_POINTER_POSITION
OSSTATUS UDFReadData(IN PVCB Vcb, IN BOOLEAN Translate, IN LONGLONG Offset, IN ULONG Length, IN BOOLEAN Direct, OUT PCHAR Buffer, OUT PSIZE_T ReadBytes)
#define UDF_IRP_CONTEXT_BUFFER_LOCKED
VOID NTAPI CcMdlWriteComplete(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN PMDL MdlChain)
#define MmGetSystemAddressForMdlSafe(_Mdl, _Priority)
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
#define UDF_IRP_CONTEXT_CAN_BLOCK
VOID UDFMdlComplete(PtrUDFIrpContext PtrIrpContext, PIRP Irp, PIO_STACK_LOCATION IrpSp, BOOLEAN ReadCompletion)
#define STATUS_END_OF_FILE
#define UDF_VCB_FLAGS_RAW_DISK
#define FO_SYNCHRONOUS_IO
struct _FCB::@702::@705 Fcb
#define UDF_IRP_CONTEXT_FLUSH2_REQUIRED
_In_ PDEVICE_OBJECT DeviceObject
#define IO_DISK_INCREMENT
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_Acquires_exclusive_lock_ Resource _Acquires_shared_lock_ Resource _Inout_ PERESOURCE Resource
#define FO_FILE_FAST_IO_READ
#define FILE_ACTION_MODIFIED
#define STATUS_INVALID_USER_BUFFER
_In_ PVOID _In_ ULONG Event
#define _SEH2_GetExceptionInformation()
#define EXCEPTION_EXECUTE_HANDLER
#define FILE_ACTION_MODIFIED_STREAM
#define UDFAcquireSharedWaitForExclusive(Resource, CanWait)
VOID NTAPI CcMdlReadComplete(IN PFILE_OBJECT FileObject, IN PMDL MdlChain)
#define _SEH2_AbnormalTermination()
#define IoCompleteRequest
BOOLEAN UDFAcquireResourceSharedWithCheck(IN PERESOURCE Resource)
__inline PVOID MmGetSystemAddressForMdlSafer(IN PMDL Mdl)
__inline VOID UDFNotifyFullReportChange(PVCB V, PUDF_FILE_INFO FI, ULONG E, ULONG A)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
#define DbgWaitForSingleObject(o, to)
NTSTATUS UDFExceptionHandler(PtrUDFIrpContext PtrIrpContext, PIRP Irp)
#define UDF_VCB_SKIP_EJECT_CHECK
#define NT_SUCCESS(StatCode)
VOID NTAPI CcInitializeCacheMap(IN PFILE_OBJECT FileObject, IN PCC_FILE_SIZES FileSizes, IN BOOLEAN PinAccess, IN PCACHE_MANAGER_CALLBACKS Callbacks, IN PVOID LazyWriteContext)
BOOLEAN NTAPI FsRtlCheckLockForReadAccess(IN PFILE_LOCK FileLock, IN PIRP Irp)
#define UDF_FCB_DIRECTORY
PIRP NTAPI IoGetTopLevelIrp(VOID)
VOID NTAPI FsRtlPostStackOverflow(IN PVOID Context, IN PKEVENT Event, IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine)
#define STATUS_ACCESS_DENIED
#define FSRTL_FSP_TOP_LEVEL_IRP
VOID NTAPI IoFreeMdl(PMDL Mdl)
BOOLEAN __fastcall UDFIsIrpTopLevel(PIRP Irp)
#define UDF_IRP_CONTEXT_FORCED_POST
#define CollectStatisticsEx(VCB, Field, a)
#define OVERFLOW_READ_THRESHHOLD
PVOID UDFGetCallersBuffer(PtrUDFIrpContext PtrIrpContext, PIRP Irp)
#define UDF_VCB_FLAGS_VOLUME_MOUNTED
VOID NTAPI IoSetTopLevelIrp(IN PIRP Irp)
struct _UDFIrpContext * PtrUDFIrpContext
BOOLEAN NTAPI CcCopyRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus)
long UDFExceptionFilter(PtrUDFIrpContext PtrIrpContext, PEXCEPTION_POINTERS PtrExceptionPointers)
#define UDFIsFileCached__(Vcb, FileInfo, Offset, Length, ForWrite)
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
OSSTATUS WCacheEODirect__(IN PW_CACHE Cache, IN PVOID Context)
NTSTATUS UDFUnlockCallersBuffer(PtrUDFIrpContext PtrIrpContext, PIRP Irp, PVOID SystemBuffer)
#define UDFAcquireResourceShared(Resource, CanWait)
#define UDF_FCB_PAGE_FILE
OSSTATUS UDFTRead(IN void *_Vcb, IN void *Buffer, IN SIZE_T Length, IN uint32 LBA, OUT PSIZE_T ReadBytes, IN uint32 Flags)
#define FSRTL_FAST_IO_TOP_LEVEL_IRP
PMDL NTAPI IoAllocateMdl(IN PVOID VirtualAddress, IN ULONG Length, IN BOOLEAN SecondaryBuffer, IN BOOLEAN ChargeQuota, IN PIRP Irp)
FAST_IO_POSSIBLE NTAPI UDFIsFastIoPossible(IN PtrUDFFCB Fcb)
__inline OSSTATUS UDFReadFile__(IN PVCB Vcb, IN PUDF_FILE_INFO FileInfo, IN int64 Offset, IN SIZE_T Length, IN BOOLEAN Direct, OUT int8 *Buffer, OUT PSIZE_T ReadBytes)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
#define UDF_ERROR_INTERNAL_ERROR
NTSTATUS UDFPostRequest(IN PtrUDFIrpContext PtrIrpContext, IN PIRP Irp)
#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
#define KeInitializeEvent(pEvt, foo, foo2)
VOID NTAPI MmProbeAndLockPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation)
NTSTATUS UDFPostStackOverflowRead(IN PtrUDFIrpContext PtrIrpContext, IN PIRP Irp, IN PtrUDFFCB Fcb)
_In_ PIO_STACK_LOCATION IrpSp
#define UDF_CHECK_PAGING_IO_RESOURCE(NTReqFCB)
#define CollectStatistics(VCB, Field)
ULONG UDFFlushLogicalVolume(IN PtrUDFIrpContext PtrIrpContext, IN PIRP Irp, IN PVCB Vcb, IN ULONG FlushFlags)
#define STATUS_FILE_LOCK_CONFLICT
VOID UDFCloseAllDelayed(IN PVCB Vcb)
#define UDF_IRP_CONTEXT_RES1_ACQ
ERESOURCE PagingIoResource
#define _SEH2_EXCEPT(...)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define FSRTL_CACHE_TOP_LEVEL_IRP
#define FILE_NOTIFY_CHANGE_LAST_ACCESS
NTSTATUS UDFLockCallersBuffer(PtrUDFIrpContext PtrIrpContext, PIRP Irp, BOOLEAN IsReadOperation, uint32 Length)
#define UDF_IRP_CONTEXT_RES2_ACQ
#define UDF_IRP_CONTEXT_FLUSH_REQUIRED
IN PDCB IN PCCB IN VBO IN OUT PULONG OUT PDIRENT OUT PBCB OUT PVBO ByteOffset
NTSTATUS UDFCommonRead(PtrUDFIrpContext PtrIrpContext, PIRP Irp)
ULONG UDFIsResourceAcquired(IN PERESOURCE Resource)
VOID NTAPI CcSetReadAheadGranularity(IN PFILE_OBJECT FileObject, IN ULONG Granularity)