145 Vpb->ReferenceCount++;
192 Vpb->ReferenceCount--;
195 if (!
Vpb->ReferenceCount &&
Vpb->RealDevice->
Vpb ==
Vpb &&
227 *FileSystemObject =
NULL;
267 Vpb->DeviceObject->StackSize++;
273 Vpb->ReferenceCount++;
304 ListEntry = ListEntry->
Flink;
320 OldValue = (*Ulong)++;
338 OldValue = (*Ulong)--;
361 ListEntry = ListHead->
Flink;
362 while (ListEntry != ListHead)
370 ListEntry = ListEntry->
Flink;
477 ULONG FsStackOverhead, RegistrationOps;
537 ListEntry = FsList->
Flink;
544 if (!(AllowRawMount) &&
545 (ListEntry->
Flink == FsList) &&
546 (ListEntry != FsList->
Flink))
557 (ListEntry->
Flink != FsList))
560 ListEntry = ListEntry->
Flink;
568 ParentFsDeviceObject = FileSystemDeviceObject;
576 while (FileSystemDeviceObject->AttachedDevice)
579 FileSystemDeviceObject = FileSystemDeviceObject->
589 (
UCHAR)FsStackOverhead,
609 StackPtr->
Flags = AllowRawMount;
611 StackPtr->
Parameters.MountVolume.DeviceObject =
661 ListEntry = &LocalList;
721 ListEntry = &LocalList;
729 if (!(AllowRawMount) &&
739 ListEntry = ListEntry->
Flink;
793 ListEntry = ListHead->
Flink;
794 while (ListEntry != ListHead)
797 if (ListEntry->
Flink == ListHead && SkipRawFs)
810 ListEntry = ListEntry->
Flink;
859 ListEntry = ListEntry->
Flink;
905 FileSystemDeviceObject =
DeviceObject->Vpb->DeviceObject;
906 while (FileSystemDeviceObject->AttachedDevice)
909 FileSystemDeviceObject = FileSystemDeviceObject->AttachedDevice;
933 StackPtr->
Parameters.VerifyVolume.DeviceObject =
1106 FsChangeNotifyList);
1175 FsChangeNotifyList);
1188 NextEntry = NextEntry->
Flink;
1267 VolumeNameString->Buffer,
1309 VolumeDeviceObject,
NULL, 0,
1344 &VolumePath,
sizeof(VolumePath),
VOID NTAPI IopLoadFileSystemDriver(IN PDEVICE_OBJECT DeviceObject)
#define DO_DEVICE_INITIALIZING
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH
#define STATUS_DEVICE_ALREADY_ATTACHED
#define STATUS_DEVICE_DOES_NOT_EXIST
_In_ PVOID _In_ BOOLEAN Alertable
#define STATUS_INSUFFICIENT_RESOURCES
VOID NTAPI IopDecrementDeviceObjectHandleCount(IN PDEVICE_OBJECT DeviceObject)
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID NTAPI IopDereferenceVpbAndFree(IN PVPB Vpb)
#define FILE_DEVICE_TAPE_FILE_SYSTEM
#define PsGetCurrentThread()
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
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
NTSTATUS NTAPI IopCreateVpb(IN PDEVICE_OBJECT DeviceObject)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
BOOLEAN NTAPI IopReferenceVerifyVpb(IN PDEVICE_OBJECT DeviceObject, OUT PDEVICE_OBJECT *FileSystemObject, OUT PVPB *Vpb)
struct _LIST_ENTRY * Blink
BOOLEAN NTAPI FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus)
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
VOID NTAPI IoUnregisterFileSystem(IN PDEVICE_OBJECT DeviceObject)
#define KeGetPreviousMode()
#define IoIsErrorUserInduced(Status)
#define TAG_FS_CHANGE_NOTIFY
VOID NTAPI IopDereferenceDeviceObject(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN ForceUnload)
ActualNumberDriverObjects _In_ ULONG DriverObjectListSize
NTSTATUS NTAPI IopMountVolume(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount, IN BOOLEAN DeviceIsLocked, IN BOOLEAN Alertable, OUT PVPB *Vpb)
#define IRP_MN_LOAD_FILE_SYSTEM
VOID NTAPI IoAcquireVpbSpinLock(OUT PKIRQL Irql)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
#define FILE_DEVICE_VIRTUAL_DISK
LIST_ENTRY IopDiskFileSystemQueueHead
#define STATUS_WRONG_VOLUME
#define InsertTailList(ListHead, Entry)
#define STATUS_FS_DRIVER_REQUIRED
LIST_ENTRY IopCdRomFileSystemQueueHead
LONG NTAPI KeSetEvent(IN PKEVENT Event, IN KPRIORITY Increment, IN BOOLEAN Wait)
FORCEINLINE VOID IopNotifyFileSystemChange(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN DriverActive)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define MOUNTMGR_DEVICE_NAME
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_BUFFER_TOO_SMALL
NTSTATUS NTAPI IoEnumerateRegisteredFiltersList(OUT PDRIVER_OBJECT *DriverObjectList, IN ULONG DriverObjectListSize, OUT PULONG ActualNumberDriverObjects)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define FILE_DEVICE_CD_ROM
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
NTSTATUS NTAPI IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, OUT PUNICODE_STRING DosName)
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
_In_ PDEVICE_OBJECT DeviceObject
#define IRP_MN_VERIFY_VOLUME
NTSTATUS NTAPI IopCreateRegistryKeyEx(OUT PHANDLE Handle, IN HANDLE BaseHandle OPTIONAL, IN PUNICODE_STRING KeyName, IN ACCESS_MASK DesiredAccess, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
#define FILE_SYNCHRONOUS_IO_ALERT
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
LIST_ENTRY IopTapeFileSystemQueueHead
#define STATUS_UNRECOGNIZED_VOLUME
ULONG FASTCALL IopInterlockedDecrementUlong(IN KSPIN_LOCK_QUEUE_NUMBER Queue, IN PULONG Ulong)
_In_ PVOID _In_ ULONG Event
#define DO_SYSTEM_BOOT_PARTITION
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
struct _DEVICE_OBJECT * DeviceObject
#define VPB_REMOVE_PENDING
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
#define FILE_DEVICE_DISK_FILE_SYSTEM
NTSTATUS NTAPI IoSetSystemPartition(IN PUNICODE_STRING VolumeNameString)
#define STATUS_INVALID_BUFFER_SIZE
#define REG_OPTION_NON_VOLATILE
#define IRP_MN_MOUNT_VOLUME
struct _LIST_ENTRY * Flink
ULONG FASTCALL IopInterlockedIncrementUlong(IN KSPIN_LOCK_QUEUE_NUMBER Queue, IN PULONG Ulong)
PDRIVER_OBJECT DriverObject
#define DOE_UNLOAD_PENDING
#define NT_SUCCESS(StatCode)
VOID NTAPI IopShutdownBaseFileSystems(IN PLIST_ENTRY ListHead)
#define IRP_MJ_FILE_SYSTEM_CONTROL
VOID NTAPI IopDecrementDeviceObjectRef(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN UnloadIfUnused)
#define ObDereferenceObject
VOID FASTCALL KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, IN KIRQL OldIrql)
VOID NTAPI PoVolumeDevice(IN PDEVICE_OBJECT DeviceObject)
#define STATUS_ACCESS_DENIED
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#define SL_ALLOW_RAW_MOUNT
VOID NTAPI IoUnregisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_FS_NOTIFICATION FSDNotificationProc)
ERESOURCE IopDatabaseResource
#define FILE_READ_ATTRIBUTES
#define STATUS_UNSUCCESSFUL
ULONG IopFsRegistrationOps
#define DOE_DELETE_PENDING
#define ExAllocatePoolWithTag(hernya, size, tag)
_In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define DOE_REMOVE_PENDING
#define KeEnterCriticalRegion()
ULONG ExpInitializationPhase
PDRIVER_FS_NOTIFICATION FSDNotificationProc
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
KIRQL FASTCALL KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber)
#define DO_LOW_PRIORITY_FILESYSTEM
#define IRP_MOUNT_COMPLETION
VOID NTAPI IopUnloadDevice(IN PDEVICE_OBJECT DeviceObject)
enum _KSPIN_LOCK_QUEUE_NUMBER KSPIN_LOCK_QUEUE_NUMBER
PVPB NTAPI IopMountInitializeVpb(IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT AttachedDeviceObject, IN BOOLEAN Raw)
#define KeLeaveCriticalRegion()
#define KeInitializeEvent(pEvt, foo, foo2)
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_ WDFDRIVER _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT AttachedDeviceObject
NTSTATUS NTAPI IopOpenRegistryKeyEx(PHANDLE KeyHandle, HANDLE ParentKey, PUNICODE_STRING Name, ACCESS_MASK DesiredAccess)
#define STATUS_BUFFER_OVERFLOW
PDEVICE_OBJECT NTAPI IoGetAttachedDevice(PDEVICE_OBJECT DeviceObject)
VOID NTAPI IopNotifyAlreadyRegisteredFileSystems(IN PLIST_ENTRY ListHead, IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine, BOOLEAN SkipRawFs)
ActualNumberDriverObjects _In_ ULONG _Out_ PULONG ActualNumberDriverObjects
_Out_ PUNICODE_STRING DosName
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define FILE_DEVICE_NETWORK_FILE_SYSTEM
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER MaximumSize
BOOLEAN NTAPI ExAcquireResourceSharedLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
LIST_ENTRY IopFsNotifyChangeQueueHead
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 IoRegisterFileSystem(IN PDEVICE_OBJECT DeviceObject)
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM
#define ObReferenceObject
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define RtlCopyMemory(Destination, Source, Length)
LIST_ENTRY FsChangeNotifyList
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
PVPB NTAPI IopCheckVpbMounted(IN POPEN_PACKET OpenPacket, IN PDEVICE_OBJECT DeviceObject, IN PUNICODE_STRING RemainingName, OUT PNTSTATUS Status)
#define ExFreePoolWithTag(_P, _T)
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
VOID NTAPI KeClearEvent(IN PKEVENT Event)
#define IoGetDevObjExtension(DeviceObject)
NTSTATUS NTAPI IoVerifyVolume(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount)
LIST_ENTRY IopNetworkFileSystemQueueHead
VOID NTAPI IoReleaseVpbSpinLock(IN KIRQL Irql)
NTSTATUS NTAPI IoRegisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine)
NTSTATUS NTAPI ReleaseMemory(IN PDEVICE_OBJECT DeviceObject)
base of all file and directory entries
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
struct _DRIVER_OBJECT * PDRIVER_OBJECT
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
DRIVER_FS_NOTIFICATION * PDRIVER_FS_NOTIFICATION
#define IRP_SYNCHRONOUS_PAGING_IO
#define IRP_MJ_DEVICE_CONTROL
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName