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;
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;
1106 FsChangeNotifyList);
1175 FsChangeNotifyList);
1188 NextEntry = NextEntry->
Flink;
1267 VolumeNameString->Buffer,
1309 VolumeDeviceObject,
NULL, 0,
1344 &VolumePath,
sizeof(VolumePath),
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName
#define NT_SUCCESS(StatCode)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define PsGetCurrentThread()
#define KeWaitForSingleObject(pEvt, foo, a, b, c)
#define KeInitializeEvent(pEvt, foo, foo2)
#define KeSetEvent(pEvt, foo, foo2)
#define ExAcquireResourceExclusiveLite(res, wait)
#define DO_SYSTEM_BOOT_PARTITION
#define ExAcquireResourceSharedLite(res, wait)
VOID NTAPI KeClearEvent(IN PKEVENT Event)
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
NTSTATUS NTAPI ReleaseMemory(IN PDEVICE_OBJECT DeviceObject)
#define FILE_SYNCHRONOUS_IO_ALERT
VOID FASTCALL KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, IN KIRQL OldIrql)
KIRQL FASTCALL KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber)
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
#define ExFreePoolWithTag(_P, _T)
#define IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
#define MOUNTMGR_DEVICE_NAME
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
#define KeGetPreviousMode()
_In_ PVOID _In_ BOOLEAN Alertable
#define DOE_DELETE_PENDING
#define DOE_UNLOAD_PENDING
#define DOE_REMOVE_PENDING
_In_ ACCESS_MASK _In_opt_ POBJECT_ATTRIBUTES _In_opt_ PLARGE_INTEGER MaximumSize
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define FILE_READ_ATTRIBUTES
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define REG_OPTION_NON_VOLATILE
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define VPB_REMOVE_PENDING
ULONG ExpInitializationPhase
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
BOOLEAN NTAPI FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus)
NTSTATUS NTAPI IopOpenRegistryKeyEx(PHANDLE KeyHandle, HANDLE ParentKey, PUNICODE_STRING Name, ACCESS_MASK DesiredAccess)
VOID NTAPI IopUnloadDevice(IN PDEVICE_OBJECT DeviceObject)
VOID NTAPI IopDereferenceDeviceObject(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN ForceUnload)
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 IoGetDevObjExtension(DeviceObject)
PDEVICE_OBJECT NTAPI IoGetAttachedDevice(PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
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)
PIRP NTAPI IoAllocateIrp(IN CCHAR StackSize, IN BOOLEAN ChargeQuota)
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 IoUnregisterFileSystem(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IoVolumeDeviceToDosName(IN PVOID VolumeDeviceObject, OUT PUNICODE_STRING DosName)
VOID NTAPI IopShutdownBaseFileSystems(IN PLIST_ENTRY ListHead)
ULONG FASTCALL IopInterlockedDecrementUlong(IN KSPIN_LOCK_QUEUE_NUMBER Queue, IN PULONG Ulong)
PVPB NTAPI IopCheckVpbMounted(IN POPEN_PACKET OpenPacket, IN PDEVICE_OBJECT DeviceObject, IN PUNICODE_STRING RemainingName, OUT PNTSTATUS Status)
VOID NTAPI IopNotifyAlreadyRegisteredFileSystems(IN PLIST_ENTRY ListHead, IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine, BOOLEAN SkipRawFs)
NTSTATUS NTAPI IoEnumerateRegisteredFiltersList(OUT PDRIVER_OBJECT *DriverObjectList, IN ULONG DriverObjectListSize, OUT PULONG ActualNumberDriverObjects)
NTSTATUS NTAPI IopCreateVpb(IN PDEVICE_OBJECT DeviceObject)
VOID NTAPI IoUnregisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_FS_NOTIFICATION FSDNotificationProc)
NTSTATUS NTAPI IoSetSystemPartition(IN PUNICODE_STRING VolumeNameString)
VOID NTAPI IoRegisterFileSystem(IN PDEVICE_OBJECT DeviceObject)
ULONG FASTCALL IopInterlockedIncrementUlong(IN KSPIN_LOCK_QUEUE_NUMBER Queue, IN PULONG Ulong)
LIST_ENTRY IopCdRomFileSystemQueueHead
VOID NTAPI IopLoadFileSystemDriver(IN PDEVICE_OBJECT DeviceObject)
ERESOURCE IopDatabaseResource
NTSTATUS NTAPI IoRegisterFsRegistrationChange(IN PDRIVER_OBJECT DriverObject, IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine)
ULONG IopFsRegistrationOps
FORCEINLINE VOID IopNotifyFileSystemChange(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN DriverActive)
VOID NTAPI IoReleaseVpbSpinLock(IN KIRQL Irql)
VOID NTAPI IopDecrementDeviceObjectHandleCount(IN PDEVICE_OBJECT DeviceObject)
LIST_ENTRY IopNetworkFileSystemQueueHead
BOOLEAN NTAPI IopReferenceVerifyVpb(IN PDEVICE_OBJECT DeviceObject, OUT PDEVICE_OBJECT *FileSystemObject, OUT PVPB *Vpb)
VOID NTAPI IopDecrementDeviceObjectRef(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN UnloadIfUnused)
NTSTATUS NTAPI IopMountVolume(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount, IN BOOLEAN DeviceIsLocked, IN BOOLEAN Alertable, OUT PVPB *Vpb)
VOID NTAPI IopDereferenceVpbAndFree(IN PVPB Vpb)
LIST_ENTRY IopDiskFileSystemQueueHead
NTSTATUS NTAPI IoVerifyVolume(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount)
PVPB NTAPI IopMountInitializeVpb(IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT AttachedDeviceObject, IN BOOLEAN Raw)
LIST_ENTRY IopFsNotifyChangeQueueHead
VOID NTAPI IoAcquireVpbSpinLock(OUT PKIRQL Irql)
LIST_ENTRY IopTapeFileSystemQueueHead
#define STATUS_INVALID_BUFFER_SIZE
#define STATUS_FS_DRIVER_REQUIRED
#define STATUS_DEVICE_ALREADY_ATTACHED
#define STATUS_DEVICE_DOES_NOT_EXIST
VOID NTAPI PoVolumeDevice(IN PDEVICE_OBJECT DeviceObject)
#define FILE_DEVICE_DISK_FILE_SYSTEM
#define FILE_DEVICE_TAPE_FILE_SYSTEM
#define FILE_DEVICE_CD_ROM
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM
#define FILE_DEVICE_NETWORK_FILE_SYSTEM
#define FILE_DEVICE_VIRTUAL_DISK
#define IRP_MJ_DEVICE_CONTROL
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
base of all file and directory entries
PDRIVER_FS_NOTIFICATION FSDNotificationProc
LIST_ENTRY FsChangeNotifyList
PDRIVER_OBJECT DriverObject
union _IO_STACK_LOCATION::@1581 Parameters
struct _IO_STACK_LOCATION::@3980::@4001 VerifyVolume
struct _IO_STACK_LOCATION::@3980::@4000 MountVolume
struct _LIST_ENTRY * Blink
struct _LIST_ENTRY * Flink
struct _DEVICE_OBJECT * DeviceObject
#define TAG_FS_CHANGE_NOTIFY
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define CONTAINING_RECORD(address, type, field)
#define STATUS_ACCESS_DENIED
#define STATUS_UNRECOGNIZED_VOLUME
#define STATUS_UNSUCCESSFUL
#define STATUS_WRONG_VOLUME
#define STATUS_INSUFFICIENT_RESOURCES
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PIRP _In_ WDFQUEUE Queue
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_ WDFDRIVER _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT AttachedDeviceObject
_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
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define IoIsErrorUserInduced(Status)
ActualNumberDriverObjects _In_ ULONG DriverObjectListSize
_In_ PDRIVER_FS_NOTIFICATION DriverNotificationRoutine
ActualNumberDriverObjects _In_ ULONG _Out_ PULONG ActualNumberDriverObjects
struct _DRIVER_OBJECT * PDRIVER_OBJECT
#define IRP_MJ_FILE_SYSTEM_CONTROL
#define IRP_MN_VERIFY_VOLUME
#define IRP_MOUNT_COMPLETION
#define DO_LOW_PRIORITY_FILESYSTEM
#define SL_ALLOW_RAW_MOUNT
DRIVER_FS_NOTIFICATION * PDRIVER_FS_NOTIFICATION
#define IRP_MN_LOAD_FILE_SYSTEM
#define IRP_SYNCHRONOUS_PAGING_IO
#define IRP_MN_MOUNT_VOLUME
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
enum _KSPIN_LOCK_QUEUE_NUMBER KSPIN_LOCK_QUEUE_NUMBER
@ LockQueueIoDatabaseLock
#define ObDereferenceObject
#define ObReferenceObject
_Out_ PUNICODE_STRING DosName