167 ULONG MediaChangeCount = 0;
185 UDFPrint((
"UDFVerifyVolume: Modified=%d\n",
Vcb->Modified));
192 UDFPrint((
"UDFVerifyVolume: STATUS_SUCCESS (1)\n"));
198 Vcb->TargetDeviceObject,
200 &MediaChangeCount,
sizeof(
ULONG),
207 UDFPrint((
"UDFVerifyVolume: STATUS_WRONG_VOLUME (1)\n"));
212 UDFPrint((
"UDFVerifyVolume: STATUS_WRONG_VOLUME (2)\n"));
220 MediaChangeCount = 0;
223 UDFPrint((
"UDFVerifyVolume: Modified=%d\n",
Vcb->Modified));
224 UDFPrint((
"UDFVerifyVolume: MediaChangeCount=%x, Vcb->MediaChangeCount=%x, UnsafeIoctl=%x\n",
225 MediaChangeCount,
Vcb->MediaChangeCount, UnsafeIoctl));
228 if(MediaChangeCount == 0 ||
229 (
Vcb->MediaChangeCount != MediaChangeCount) ||
232 UDFPrint((
"UDFVerifyVolume: compare\n"));
239 NewVcb->TargetDeviceObject =
Vcb->TargetDeviceObject;
254 UDFPrint((
"UDFVerifyVolume: Modified=%d\n",
Vcb->Modified));
260 UDFPrint((
"UDFVerifyVolume: it was very BAD volume. Do not perform Logical check\n"));
261 goto skip_logical_check;
270 NewVcb->WriteBlockSize,
271 5, NewVcb->BlockSizeBits,
273 0, NewVcb->LastPossibleLBA,
Mode,
280 UDFTWriteAsync, UDFTReadAsync,
288 UDFPrint((
"UDFVerifyVolume: Modified=%d\n",
Vcb->Modified));
290 UDFPrint((
" NewVcb->NSRDesc=%x\n", NewVcb->NSRDesc));
295 UDFPrint((
"UDFVerifyVolume: both are RAW -> remount\n",
Vcb->Modified));
297 goto skip_logical_check;
311 UDFPrint((
"UDFVerifyVolume: Modified=%d\n",
Vcb->Modified));
323 UDFPrint((
"UDFVerifyVolume: compared\n"));
324 UDFPrint((
"UDFVerifyVolume: Modified=%d\n",
Vcb->Modified));
326 UDFPrint((
"UDFVerifyVolume: set UDF_VCB_FLAGS_VOLUME_MOUNTED\n"));
338 Vcb->MediaChangeCount = MediaChangeCount;
342 UDFPrint((
"UDFVerifyVolume: clear UDF_VCB_FLAGS_VOLUME_MOUNTED\n"));
346 if(
Vcb->EjectWaiter) {
355 UDFPrint((
" !!! VerifyVolume - QUICK REMOUNT !!!\n"));
358 if(!CacheInitialized) {
361 Vcb->WCacheMaxFrames,
362 Vcb->WCacheMaxBlocks,
364 5,
Vcb->BlockSizeBits,
365 Vcb->WCacheBlocksPerFrameSh,
370 Vcb->WCacheFramesToKeepFree,
374 UDFTWriteAsync, UDFTReadAsync,
382 if(!
Vcb->VerifyCtx.VInited) {
388 if(!CacheInitialized) {
393 UDFPrint((
"UDFMountVolume: RAM mode\n"));
396 UDFPrint((
"UDFMountVolume: RW mode\n"));
418 UDFPrint((
"UDFVerifyVolume: try start EjectWaiter\n"));
421 UDFPrint((
"UDFVerifyVolume: start EjectWaiter failed\n"));
430 UDFPrint((
"UDFVerifyVolume: delete NewVcb\n"));
434 ASSERT(!(NewVcb->EjectWaiter));
447 Irp->IoStatus.Information = 0;
449 Irp->IoStatus.Status = RC;
452 UDFPrint((
"UDFVerifyVolume: RC = %x\n", RC));
#define UDFAcquireResourceExclusive(Resource, CanWait)
#define UDF_VCB_FLAGS_MEDIA_READ_ONLY
#define WCACHE_CHAINED_IO
NTSTATUS NTAPI UDFPhSendIOCTL(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, OUT PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN OverrideVerify, OUT PIO_STATUS_BLOCK Iosb OPTIONAL)
#define STATUS_INSUFFICIENT_RESOURCES
VOID WCacheRelease__(IN PW_CACHE Cache)
NTSTATUS UDFStartEjectWaiter(IN PVCB Vcb)
#define UDFSetFlag(Flag, Value)
#define UDFReleaseResource(Resource)
ULONG WCacheBlocksPerFrameSh
#define UDFNtAclSupported(Vcb)
#define WCACHE_RO_BAD_BLOCKS
ULONG WCacheFramesToKeepFree
#define WCACHE_MARK_BAD_BLOCKS
OSSTATUS WCacheInit__(IN PW_CACHE Cache, IN ULONG MaxFrames, IN ULONG MaxBlocks, IN SIZE_T MaxBytesToRead, IN ULONG PacketSizeSh, IN ULONG BlockSizeSh, IN ULONG BlocksPerFrameSh, IN lba_t FirstLba, IN lba_t LastLba, IN ULONG Mode, IN ULONG Flags, IN ULONG FramesToKeepFree, IN PWRITE_BLOCK WriteProc, IN PREAD_BLOCK ReadProc, IN PWRITE_BLOCK_ASYNC WriteProcAsync, IN PREAD_BLOCK_ASYNC ReadProcAsync, IN PCHECK_BLOCK CheckUsedProc, IN PUPDATE_RELOC UpdateRelocProc, IN PWC_ERROR_HANDLER ErrorHandlerProc)
#define STATUS_WRONG_VOLUME
OSSTATUS UDFGetDiskInfoAndVerify(IN PDEVICE_OBJECT DeviceObject, IN PVCB Vcb)
#define UDF_VCB_FLAGS_REMOVABLE_MEDIA
#define WCACHE_CACHE_WHOLE_PACKET
#define UDFClearFlag(Flag, Value)
#define UDF_VCB_FLAGS_RAW_DISK
VOID WCacheFlushAll__(IN PW_CACHE Cache, IN PVOID Context)
#define UDF_VCB_FLAGS_VOLUME_READ_ONLY
#define IO_DISK_INCREMENT
#define UDF_VCB_FLAGS_UNSAFE_IOCTL
ULONG WCacheChFlags__(IN PW_CACHE Cache, IN ULONG SetFlags, IN ULONG ClrFlags)
uint32 UDFIsBlockAllocated(IN void *_Vcb, IN uint32 Lba)
#define STATUS_UNRECOGNIZED_VOLUME
#define FILE_REMOVABLE_MEDIA
OSSTATUS UDFUpdateVAT(IN void *_Vcb, IN uint32 Lba, IN uint32 *RelocTab, IN uint32 BCount)
VOID UDFStopEjectWaiter(PVCB Vcb)
NTSTATUS UDFWCacheErrorHandler(IN PVOID Context, IN PWCACHE_ERROR_CONTEXT ErrorInfo)
#define IoCompleteRequest
OSSTATUS UDFTWrite(IN void *_Vcb, IN void *Buffer, IN SIZE_T Length, IN uint32 LBA, OUT PSIZE_T WrittenBytes, IN uint32 Flags)
#define IOCTL_STORAGE_CHECK_VERIFY
VOID UDFCleanupVCB(IN PVCB Vcb)
#define UDF_VCB_FLAGS_MEDIA_LOCKED
#define NT_SUCCESS(StatCode)
#define SL_ALLOW_RAW_MOUNT
#define VRS_ISO9660_FOUND
#define UDF_VCB_FLAGS_VOLUME_MOUNTED
#define UDFAcquireResourceShared(Resource, CanWait)
OSSTATUS UDFTRead(IN void *_Vcb, IN void *Buffer, IN SIZE_T Length, IN uint32 LBA, OUT PSIZE_T ReadBytes, IN uint32 Flags)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
OSSTATUS UDFTWriteVerify(IN void *_Vcb, IN void *Buffer, IN SIZE_T Length, IN uint32 LBA, OUT PSIZE_T WrittenBytes, IN uint32 Flags)
BOOLEAN WCacheIsInitialized__(IN PW_CACHE Cache)
#define UDFIsRawDevice(RC)
#define WCACHE_DO_NOT_COMPARE
#define MOUNT_ERR_THRESHOLD
#define RtlZeroMemory(Destination, Length)
OSSTATUS UDFTReadVerify(IN void *_Vcb, IN void *Buffer, IN SIZE_T Length, IN uint32 LBA, OUT PSIZE_T ReadBytes, IN uint32 Flags)
OSSTATUS UDFGetDiskInfo(IN PDEVICE_OBJECT DeviceObject, IN PVCB Vcb)
#define CdrwMediaClassEx_IsRAM(MediaClassEx)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
OSSTATUS UDFVInit(IN PVCB Vcb)
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
OSSTATUS WCacheSetMode__(IN PW_CACHE Cache, IN ULONG Mode)
_In_ PIO_STACK_LOCATION IrpSp
#define UDF_VCB_FLAGS_VOLUME_LOCKED
NTSTATUS UDFCompareVcb(IN PVCB OldVcb, IN PVCB NewVcb, IN BOOLEAN PhysicalOnly)