34 DPRINT(
"VfatReadWritePartialCompletion() called\n");
38 while ((
Mdl =
Irp->MdlAddress))
40 Irp->MdlAddress =
Mdl->Next;
44 if (
Irp->PendingReturned)
66 DPRINT(
"VfatReadWritePartialCompletion() done\n");
88 DPRINT(
"VfatReadDisk(pDeviceObject %p, Offset %I64x, Length %u, Buffer %p)\n",
91 DPRINT (
"Building synchronous FSD Request...\n");
101 DPRINT(
"IoBuildSynchronousFsdRequest failed\n");
111 DPRINT(
"Calling IO Driver... with irp %p\n",
Irp);
114 DPRINT(
"Waiting for IO Operation for %p\n",
Irp);
117 DPRINT(
"Operation pending\n");
119 DPRINT(
"Getting IO Status... for %p\n",
Irp);
127 DPRINT1 (
"Media change detected!\n");
136 DPRINT1(
"Volume verification successful; Reissuing read request\n");
143 DPRINT(
"IO failed!!! VfatReadDisk : Error code: %x\n",
Status);
144 DPRINT(
"(pDeviceObject %p, Offset %I64x, Size %u, Buffer %p\n",
148 DPRINT(
"Block request succeeded for %p\n",
Irp);
165 DPRINT(
"VfatReadDiskPartial(IrpContext %p, ReadOffset %I64x, ReadLength %u, BufferOffset %u, Wait %u)\n",
168 DPRINT(
"Building asynchronous FSD Request...\n");
176 DPRINT(
"IoAllocateIrp failed\n");
188 StackPtr->
DeviceObject = IrpContext->DeviceExt->StorageDevice;
196 DPRINT(
"IoAllocateMdl failed\n");
213 IrpContext->RefCount = 1;
220 DPRINT(
"Calling IO Driver... with irp %p\n",
Irp);
226 Status = IrpContext->Irp->IoStatus.Status;
233 DPRINT1(
"Media change detected!\n");
242 DPRINT1(
"Volume verification successful; Reissuing read request\n");
271 DPRINT(
"VfatWriteDisk(pDeviceObject %p, Offset %I64x, Length %u, Buffer %p)\n",
274 DPRINT (
"Building synchronous FSD Request...\n");
284 DPRINT(
"IoBuildSynchronousFsdRequest failed\n");
294 DPRINT(
"Calling IO Driver... with irp %p\n",
Irp);
297 DPRINT(
"Waiting for IO Operation for %p\n",
Irp);
300 DPRINT(
"Operation pending\n");
302 DPRINT(
"Getting IO Status... for %p\n",
Irp);
310 DPRINT1 (
"Media change detected!\n");
319 DPRINT1(
"Volume verification successful; Reissuing write request\n");
326 DPRINT(
"IO failed!!! VfatWriteDisk : Error code: %x\n",
Status);
327 DPRINT(
"(pDeviceObject %p, Offset %I64x, Size %u, Buffer %p\n",
331 DPRINT(
"Block request succeeded for %p\n",
Irp);
348 DPRINT(
"VfatWriteDiskPartial(IrpContext %p, WriteOffset %I64x, WriteLength %u, BufferOffset %x, Wait %u)\n",
354 DPRINT(
"Building asynchronous FSD Request...\n");
358 DPRINT(
"IoAllocateIrp failed\n");
370 StackPtr->
DeviceObject = IrpContext->DeviceExt->StorageDevice;
378 DPRINT(
"IoAllocateMdl failed\n");
395 IrpContext->RefCount = 1;
402 DPRINT(
"Calling IO Driver...\n");
407 Status = IrpContext->Irp->IoStatus.Status;
414 DPRINT1(
"Media change detected!\n");
423 DPRINT1(
"Volume verification successful; Reissuing write request\n");
447 DPRINT(
"VfatBlockDeviceIoControl(DeviceObject %p, CtlCode %x, " 448 "InputBuffer %p, InputBufferSize %x, OutputBuffer %p, " 451 OutputBufferSize ? *OutputBufferSize : 0);
456 DPRINT(
"Building device I/O control request ...\n");
462 (OutputBufferSize) ? *OutputBufferSize : 0,
468 DPRINT(
"IoBuildDeviceIoControlRequest failed\n");
478 DPRINT(
"Calling IO Driver... with irp %p\n",
Irp);
481 DPRINT(
"Waiting for IO Operation for %p\n",
Irp);
484 DPRINT(
"Operation pending\n");
486 DPRINT(
"Getting IO Status... for %p\n",
Irp);
495 DPRINT1(
"Media change detected!\n");
505 DPRINT1(
"Volume verification successful; Reissuing IOCTL request\n");
510 if (OutputBufferSize)
512 *OutputBufferSize =
IoStatus.Information;
_In_ PNDIS_STRING _In_ PNDIS_STRING _Out_ PDEVICE_OBJECT * pDeviceObject
struct VFAT_IRP_CONTEXT * PVFAT_IRP_CONTEXT
#define STATUS_INSUFFICIENT_RESOURCES
#define PsGetCurrentThread()
#define STATUS_MORE_PROCESSING_REQUIRED
#define MmGetMdlVirtualAddress(_Mdl)
PIRP NTAPI IoBuildSynchronousFsdRequest(IN ULONG MajorFunction, IN PDEVICE_OBJECT DeviceObject, IN PVOID Buffer, IN ULONG Length, IN PLARGE_INTEGER StartingOffset, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
IN BOOLEAN OUT PSTR Buffer
#define UNREFERENCED_PARAMETER(P)
#define BooleanFlagOn(F, SF)
_In_ WDFDPC _In_ BOOLEAN Wait
_Must_inspect_result_ _In_ WDFUSBPIPE _In_ WDFREQUEST _In_opt_ WDFMEMORY _In_opt_ PWDFMEMORY_OFFSET WriteOffset
PDEVICE_OBJECT NTAPI IoGetDeviceToVerify(IN PETHREAD Thread)
#define STATUS_VERIFY_REQUIRED
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
#define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
VOID NTAPI IoBuildPartialMdl(IN PMDL SourceMdl, IN PMDL TargetMdl, IN PVOID VirtualAddress, IN ULONG Length)
_In_ PDEVICE_OBJECT DeviceObject
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_Must_inspect_result_ _In_ WDFUSBPIPE _In_ WDFREQUEST _In_opt_ WDFMEMORY _In_opt_ PWDFMEMORY_OFFSET ReadOffset
_In_ PVOID _In_ ULONG Event
NTSTATUS VfatWriteDiskPartial(IN PVFAT_IRP_CONTEXT IrpContext, IN PLARGE_INTEGER WriteOffset, IN ULONG WriteLength, IN ULONG BufferOffset, IN BOOLEAN Wait)
#define SL_OVERRIDE_VERIFY_VOLUME
PIO_COMPLETION_ROUTINE CompletionRoutine
NTSTATUS VfatReadDisk(IN PDEVICE_OBJECT pDeviceObject, IN PLARGE_INTEGER ReadOffset, IN ULONG ReadLength, IN OUT PUCHAR Buffer, IN BOOLEAN Override)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
#define NT_SUCCESS(StatCode)
static IO_COMPLETION_ROUTINE VfatReadWritePartialCompletion
PDEVICE_OBJECT DeviceObject
NTSTATUS VfatWriteDisk(IN PDEVICE_OBJECT pDeviceObject, IN PLARGE_INTEGER WriteOffset, IN ULONG WriteLength, IN OUT PUCHAR Buffer, IN BOOLEAN Override)
VOID NTAPI IoFreeMdl(PMDL Mdl)
#define STATUS_UNSUCCESSFUL
#define InterlockedDecrement
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
PMDL NTAPI IoAllocateMdl(IN PVOID VirtualAddress, IN ULONG Length, IN BOOLEAN SecondaryBuffer, IN BOOLEAN ChargeQuota, IN PIRP Irp)
#define KeInitializeEvent(pEvt, foo, foo2)
#define InterlockedIncrement
NTSTATUS VfatBlockDeviceIoControl(IN PDEVICE_OBJECT DeviceObject, IN ULONG CtlCode, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferSize, IN OUT PVOID OutputBuffer OPTIONAL, IN OUT PULONG OutputBufferSize, IN BOOLEAN Override)
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
_In_ WDFDEVICE _In_ PVOID _In_opt_ PMDL Mdl
PIRP NTAPI IoBuildDeviceIoControlRequest(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, IN PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN InternalDeviceIoControl, IN PKEVENT Event, IN PIO_STATUS_BLOCK IoStatusBlock)
VOID NTAPI IoFreeIrp(IN PIRP Irp)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define IRPCONTEXT_PENDINGRETURNED
NTSTATUS VfatReadDiskPartial(IN PVFAT_IRP_CONTEXT IrpContext, IN PLARGE_INTEGER ReadOffset, IN ULONG ReadLength, ULONG BufferOffset, IN BOOLEAN Wait)
NTSTATUS NTAPI IoVerifyVolume(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount)
VOID NTAPI IoSetDeviceToVerify(IN PETHREAD Thread, IN PDEVICE_OBJECT DeviceObject)
_Inout_ PIRP _In_ PDEVICE_OBJECT DeviceToVerify
PULONG MinorVersion OPTIONAL