28 #define MAX_DEVICES 0x3E8 57 if (DeviceExtension->EpicNumber != ChangeNotify->
EpicNumber)
59 ChangeNotify->
EpicNumber = DeviceExtension->EpicNumber;
92 DeviceExtension->RegistryPath.Buffer,
114 Irp->IoStatus.Information = 0;
120 if (SetState->
NewState == !DeviceExtension->NoAutoMount)
122 Irp->IoStatus.Information = 0;
127 DeviceExtension->NoAutoMount = !SetState->
NewState;
128 Irp->IoStatus.Information = 0;
146 Irp->IoStatus.Information = 0;
151 QueryState->
CurrentState = !DeviceExtension->NoAutoMount;
181 if (!
IsListEmpty(&(DeviceExtension->DeviceListHead)))
183 for (NextEntry = DeviceExtension->DeviceListHead.Flink;
184 NextEntry != &(DeviceExtension->DeviceListHead);
185 NextEntry = NextEntry->
Flink)
266 MaxLength =
MAX((
Point->DeviceNameOffset +
Point->DeviceNameLength),
267 (
Point->SymbolicLinkNameLength +
Point->SymbolicLinkNameOffset));
268 if (MaxLength >
Stack->Parameters.DeviceIoControl.InputBufferLength)
298 if (
IsListEmpty(&(DeviceExtension->OfflineDeviceListHead)))
307 while (!
IsListEmpty(&(DeviceExtension->OfflineDeviceListHead)))
309 NextEntry =
RemoveHeadList(&(DeviceExtension->OfflineDeviceListHead));
411 if (
IsListEmpty(&(DeviceExtension->DeviceListHead)))
417 for (NextEntry = DeviceExtension->DeviceListHead.Flink;
418 NextEntry != &(DeviceExtension->DeviceListHead);
419 NextEntry = NextEntry->Flink)
472 if (!DeviceExtension->ProcessedSuggestions)
475 DeviceExtension->ProcessedSuggestions =
TRUE;
486 NextEntry = DeviceExtension->DeviceListHead.
Flink;
487 while (NextEntry != &(DeviceExtension->DeviceListHead))
496 NextEntry = NextEntry->
Flink;
499 if (NextEntry == &(DeviceExtension->DeviceListHead))
507 DriveLetterInfo->DriveLetterWasAssigned =
TRUE;
518 DriveLetterInfo->DriveLetterWasAssigned =
FALSE;
523 NextEntry = NextEntry->
Flink;
534 DriveLetterInfo->DriveLetterWasAssigned =
FALSE;
535 DriveLetterInfo->CurrentDriveLetter = 0;
542 if (!DeviceExtension->NoAutoMount && !
Removable)
544 if (DriveLetterInfo->DriveLetterWasAssigned)
546 DriveLetterInfo->DriveLetterWasAssigned =
FALSE;
547 DriveLetterInfo->CurrentDriveLetter = 0;
553 if (!DriveLetterInfo->DriveLetterWasAssigned)
582 DriveLetterInfo->DriveLetterWasAssigned =
FALSE;
583 DriveLetterInfo->CurrentDriveLetter = 0;
609 for (DriveLetterInfo->CurrentDriveLetter = DriveLetter;
610 DriveLetterInfo->CurrentDriveLetter <=
L'Z';
611 DriveLetterInfo->CurrentDriveLetter++)
623 if (DriveLetterInfo->CurrentDriveLetter >
L'Z')
625 DriveLetterInfo->DriveLetterWasAssigned =
FALSE;
626 DriveLetterInfo->CurrentDriveLetter = 0;
678 &DriveLetterInformation);
682 DriveLetterInformation;
720 if (SystemVolumeName->
Buffer)
743 SystemVolumeName->Buffer =
NULL;
746 L"\\Registry\\Machine\\System\\Setup",
751 if (SystemVolumeName->Buffer)
775 if (
IsListEmpty(&(DeviceExtension->DeviceListHead)))
786 for (NextEntry = DeviceExtension->DeviceListHead.
Flink;
787 NextEntry != &(DeviceExtension->DeviceListHead);
788 NextEntry = NextEntry->
Flink)
797 &DriveLetterInformation);
806 if (DeviceExtension->DriveLetterData)
814 if (!DeviceExtension->NoAutoMount)
816 DeviceExtension->NoAutoMount =
TRUE;
820 &DriveLetterInformation);
822 DeviceExtension->NoAutoMount =
FALSE;
846 PWSTR DeviceString, OldBuffer;
847 USHORT DeviceLength, OldLength;
869 Stack->Parameters.DeviceIoControl.InputBufferLength)
875 if (
Stack->Parameters.DeviceIoControl.OutputBufferLength <
sizeof(
ULONG))
901 SymlinksEntry = SymlinksEntry->
Flink)
921 goto TryWithVolumeName;
926 OldLength = DeviceLength;
927 OldBuffer = DeviceString;
955 goto TryWithVolumeName;
960 OldBuffer = DeviceString;
961 OldLength = DeviceLength;
962 DeviceLength += 2 *
sizeof(
WCHAR);
976 DeviceString[1] =
L':';
987 if (DeviceLength < 2 *
sizeof(
WCHAR) || DeviceString[1] !=
L':')
998 SymlinksEntry = SymlinksEntry->
Flink)
1011 DeviceLength = SymlinkInformation->
Name.
Length;
1020 DeviceString[1] =
L'\\';
1030 Irp->IoStatus.Information = DeviceLength +
sizeof(
ULONG);
1033 if (
sizeof(
ULONG) + DeviceLength <=
Stack->Parameters.DeviceIoControl.OutputBufferLength)
1052 Irp->IoStatus.Information =
sizeof(
ULONG);
1081 + AssociatedDeviceEntry->DeviceInformation->DeviceName.Length
1117 if (ReparseData ==
NULL)
1147 if (SubstituteName.
Length == 98 && SubstituteName.
Buffer[1] ==
L'?')
1149 for (SymlinksEntry = DeviceInformation->SymbolicLinksListHead.
Flink;
1150 SymlinksEntry != &(DeviceInformation->SymbolicLinksListHead);
1151 SymlinksEntry = SymlinksEntry->
Flink)
1186 ULONG OutputPathLength, NumberOfPaths, ReturnedPaths;
1191 for (
Entry = DeviceInformation->SymbolicLinksListHead.Flink;
1192 Entry != &(DeviceInformation->SymbolicLinksListHead);
1201 OutputPathLength = 4 *
sizeof(
WCHAR);
1207 if (
Entry == &(DeviceInformation->SymbolicLinksListHead))
1209 SymlinkInformation =
NULL;
1222 if (*VolumePaths ==
NULL)
1228 (*VolumePaths)->MultiSzLength = OutputPathLength;
1230 if (SymlinkInformation !=
NULL)
1233 (*VolumePaths)->MultiSz[1] =
L':';
1248 if (DeviceInfoEntry ==
NULL)
1259 if (!
IsListEmpty(&DeviceInformation->AssociatedDevicesHead))
1261 for (
Entry = DeviceInformation->AssociatedDevicesHead.Flink;
1262 Entry != &DeviceInformation->AssociatedDevicesHead;
1268 ASSERT(NumberOfPaths != 0);
1281 CurrentPath = Paths;
1282 for (
Entry = DeviceInformation->AssociatedDevicesHead.Flink;
1283 Entry != &DeviceInformation->AssociatedDevicesHead;
1306 for (
i = 0;
i < ReturnedPaths; ++
i)
1330 for (
i = 0;
i < ReturnedPaths; ++
i)
1346 if ((*CurrentPath)->MultiSzLength !=
sizeof(
UNICODE_NULL))
1349 PWSTR MultiSz = (*CurrentPath)->MultiSz;
1351 for (
i = 0;
i < (*CurrentPath)->MultiSzLength /
sizeof(
WCHAR); ++
i, ++MultiSz)
1365 OutputPathLength += (*CurrentPath)->MultiSzLength + InnerStrings * AssociatedDeviceEntry->
String.
Length -
sizeof(
UNICODE_NULL);
1370 if (*VolumePaths ==
NULL)
1374 for (
i = 0;
i < ReturnedPaths; ++
i)
1390 (*VolumePaths)->MultiSzLength = OutputPathLength;
1391 if (SymlinkInformation !=
NULL)
1394 (*VolumePaths)->MultiSz[1] =
L':';
1400 CurrentPath = Paths;
1401 for (
Entry = DeviceInformation->AssociatedDevicesHead.Flink;
1402 Entry != &DeviceInformation->AssociatedDevicesHead;
1408 if ((*CurrentPath)->MultiSzLength !=
sizeof(
UNICODE_NULL))
1416 for (
i = 0;
i < (*CurrentPath)->MultiSzLength /
sizeof(
WCHAR) - 1; ++
i)
1423 (*VolumePaths)->MultiSz[Written] = *MultiSz;
1472 ULONG Attempts, OutputLength;
1500 if (
Stack->Parameters.DeviceIoControl.OutputBufferLength <
sizeof(
ULONG))
1517 NeedNotification =
FALSE;
1521 FailedDevice =
NULL;
1532 if (FailedDevice ==
NULL)
1540 NeedNotification =
TRUE;
1551 for (
Entry = DeviceExtension->DeviceListHead.Flink;
1552 Entry != &DeviceExtension->DeviceListHead;
1557 if (ListDeviceInfo == DeviceInformation)
1564 if (
Entry == &DeviceExtension->DeviceListHead)
1572 if (Attempts >= 1000)
1579 if (NeedNotification)
1591 OutputLength =
Output->MultiSzLength +
sizeof(
ULONG);
1594 if (OutputLength >
Stack->Parameters.DeviceIoControl.OutputBufferLength)
1596 Irp->IoStatus.Information =
sizeof(
ULONG);
1602 Irp->IoStatus.Information = OutputLength;
1630 if (
Target->DeviceNameLength +
sizeof(
USHORT) >
Stack->Parameters.DeviceIoControl.InputBufferLength)
1674 if (
Target->DeviceNameLength +
sizeof(
USHORT) >
Stack->Parameters.DeviceIoControl.InputBufferLength)
1908 if (
Link == 0 && !CreateNoDrive)
2046 Stack->Parameters.DeviceIoControl.InputBufferLength)
2052 SourceVolumeName.
Length =
2080 sizeof(FsDeviceInfo),
2103 FOReferenced =
TRUE;
2141 ObjectNameInfoPtr = &ObjectNameInfo;
2148 if (!ObjectNameInfoPtr)
2172 TargetVolumeName->Length =
2185 SourceSymbolicName->Length =
2187 SourceSymbolicName->Buffer = (
PWSTR)FileNameInfo;
2190 FileNameInfo =
NULL;
2211 if (TargetDeviceName.
Buffer)
2216 if (ObjectNameInfoPtr && ObjectNameInfoPtr != &ObjectNameInfo)
2348 if (DatabaseEntry ==
NULL)
2389 if (DatabaseEntry ==
NULL)
2420 if (UniqueIdReplicate ==
NULL)
2429 UniqueIdReplicate->
UniqueId = UniqueId;
2445 if (AssociatedEntry ==
NULL)
2580 if (DatabaseEntry ==
NULL)
2702 switch (
Stack->Parameters.DeviceIoControl.IoControlCode)
2725 DeviceExtension->AutomaticDriveLetter =
TRUE;
2798 DPRINT1(
"Winism! Rewrite the caller!\n");
NTSTATUS MountMgrDeletePointsDbOnly(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
struct _MOUNTMGR_VOLUME_MOUNT_POINT * PMOUNTMGR_VOLUME_MOUNT_POINT
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH
NTSTATUS MountMgrCheckUnprocessedVolumes(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
VOID NTAPI MountMgrCancel(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
PMOUNTDEV_UNIQUE_ID UniqueId
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
struct _MOUNTMGR_DRIVE_LETTER_INFORMATION * PMOUNTMGR_DRIVE_LETTER_INFORMATION
NTSTATUS MountMgrQueryAutoMount(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
UNICODE_STRING DosDevices
NTSTATUS MountMgrSetAutoMount(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
#define STATUS_INFO_LENGTH_MISMATCH
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_DELETED
#define OBJ_CASE_INSENSITIVE
#define PsGetCurrentThread()
NTSTATUS MountMgrVolumeMountPointDeleted(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp, IN NTSTATUS LockStatus)
VOID ReleaseRemoteDatabaseSemaphore(IN PDEVICE_EXTENSION DeviceExtension)
struct _MOUNTMGR_MOUNT_POINTS * PMOUNTMGR_MOUNT_POINTS
struct _REPARSE_DATA_BUFFER::@310::@312 SymbolicLinkReparseBuffer
#define UNREFERENCED_PARAMETER(P)
#define IOCTL_MOUNTMGR_VOLUME_MOUNT_POINT_CREATED
#define STATUS_INVALID_PARAMETER
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSTATUS GlobalDeleteSymbolicLink(IN PUNICODE_STRING DosName)
NTSTATUS MountMgrQuerySymbolicLink(IN PUNICODE_STRING SymbolicName, IN OUT PUNICODE_STRING LinkTarget)
PDEVICE_INFORMATION DeviceInformation
_In_ PNDIS_STRING _In_ PNDIS_STRING SymbolicName
#define IOCTL_MOUNTMGR_AUTO_DL_ASSIGNMENTS
NTSTATUS MountMgrQueryPoints(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
HANDLE OpenRemoteDatabase(IN PDEVICE_INFORMATION DeviceInformation, IN BOOLEAN MigrateDatabase)
VOID NTAPI IoAcquireCancelSpinLock(OUT PKIRQL Irql)
BOOLEAN IsDriveLetter(PUNICODE_STRING SymbolicName)
#define IOCTL_MOUNTMGR_SET_AUTO_MOUNT
#define STATUS_INVALID_DEVICE_REQUEST
#define IOCTL_MOUNTMGR_CREATE_POINT
NTSTATUS NTAPI ObQueryNameString(IN PVOID Object, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
#define FILE_DEVICE_VIRTUAL_DISK
VOID DeleteSymbolicLinkNameFromMemory(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING SymbolicLink, IN BOOLEAN MarkOffline)
NTSTATUS NTAPI MountMgrDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define FSCTL_GET_REPARSE_POINT
#define InsertTailList(ListHead, Entry)
USHORT SymbolicNameLength
BOOLEAN IsFtVolume(IN PUNICODE_STRING SymbolicName)
IoSetCancelRoutine(Irp, CancelRoutine)
#define IOCTL_MOUNTMGR_CHECK_UNPROCESSED_VOLUMES
NTSTATUS MountMgrCreatePointWorker(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_ ULONG _Out_opt_ PULONG _Out_opt_ PULONG ValueType
VOID MountMgrAssignDriveLetters(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI KeWaitForSingleObject(IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Timeout OPTIONAL)
#define OBJ_KERNEL_HANDLE
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
static int Link(const char **args)
LIST_ENTRY AssociatedDevicesEntry
#define IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE
#define RtlMoveMemory(Destination, Source, Length)
#define IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION
#define IOCTL_MOUNTMGR_KEEP_LINKS_WHEN_OFFLINE
BOOLEAN HasNoDriveLetterEntry(IN PMOUNTDEV_UNIQUE_ID UniqueId)
LIST_ENTRY DeviceInformationEntry
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
UNICODE_STRING RemoteDatabase
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_Inout_ PUNICODE_STRING LinkTarget
_In_ PDEVICE_OBJECT DeviceObject
#define IOCTL_MOUNTMGR_QUERY_POINTS
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATHS
NTSTATUS MountMgrQueryVolumePaths(IN PDEVICE_EXTENSION DeviceExtension, IN PDEVICE_INFORMATION DeviceInformation, IN PLIST_ENTRY DeviceInfoList, OUT PMOUNTMGR_VOLUME_PATHS *VolumePaths, OUT PDEVICE_INFORMATION *FailedDevice)
PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
VOID DeleteNoDriveLetterEntry(IN PMOUNTDEV_UNIQUE_ID UniqueId)
NTSYSAPI NTSTATUS WINAPI RtlWriteRegistryValue(ULONG, PCWSTR, PCWSTR, ULONG, PVOID, ULONG)
#define IOCTL_MOUNTMGR_NEXT_DRIVE_LETTER
pRequest Complete(RequestStatus)
MOUNTMGR_AUTO_MOUNT_STATE NewState
NTSTATUS MountMgrQueryDosVolumePath(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
#define MOUNTMGR_IS_VOLUME_NAME(s)
#define FILE_REMOVABLE_MEDIA
USHORT SourceVolumeNameOffset
_In_ PVOID _In_ ULONG Event
struct _MOUNTMGR_TARGET_NAME * PMOUNTMGR_TARGET_NAME
NTSYSAPI NTSTATUS NTAPI ZwFsControlFile(IN HANDLE DeviceHandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG IoControlCode, IN PVOID InputBuffer, IN ULONG InputBufferSize, OUT PVOID OutputBuffer, IN ULONG OutputBufferSize)
NTSTATUS MountMgrVolumeArrivalNotification(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION
_In_ PCWSTR _Inout_ _At_ QueryTable EntryContext
NTSTATUS NTAPI MountMgrQuerySystemVolumeNameQueryRoutine(IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
NTSTATUS MountMgrVolumeMountPointCreated(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp, IN NTSTATUS LockStatus)
#define IoCompleteRequest
UNICODE_STRING DeviceFloppy
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
NTSTATUS MountMgrScrubRegistry(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS FindDeviceInfo(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING SymbolicName, IN BOOLEAN DeviceNameGiven, OUT PDEVICE_INFORMATION *DeviceInformation)
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
PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference(PDEVICE_OBJECT DeviceObject)
NTSTATUS QueryDeviceInformation(IN PUNICODE_STRING SymbolicName, OUT PUNICODE_STRING DeviceName OPTIONAL, OUT PMOUNTDEV_UNIQUE_ID *UniqueId OPTIONAL, OUT PBOOLEAN Removable OPTIONAL, OUT PBOOLEAN GptDriveLetter OPTIONAL, OUT PBOOLEAN HasGuid OPTIONAL, IN OUT LPGUID StableGuid OPTIONAL, OUT PBOOLEAN Valid OPTIONAL)
#define IOCTL_MOUNTMGR_CHANGE_NOTIFY
NTSTATUS MountMgrVolumeMountPointChanged(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp, IN NTSTATUS LockStatus, OUT PUNICODE_STRING SourceDeviceName, OUT PUNICODE_STRING SourceSymbolicName, OUT PUNICODE_STRING TargetVolumeName)
NTSTATUS NTAPI ScrubRegistryRoutine(IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
PDEVICE_INFORMATION DeviceInformation
struct _DATABASE_ENTRY DATABASE_ENTRY
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
struct _LIST_ENTRY * Flink
NTSTATUS WaitForRemoteDatabaseSemaphore(IN PDEVICE_EXTENSION DeviceExtension)
struct _MOUNTMGR_SET_AUTO_MOUNT * PMOUNTMGR_SET_AUTO_MOUNT
VOID NTAPI PsSetThreadHardErrorsAreDisabled(IN PETHREAD Thread, IN BOOLEAN HardErrorsAreDisabled)
#define NT_SUCCESS(StatCode)
#define ObDereferenceObject
_In_ GUID _In_ PVOID ValueData
struct _DeviceInfo DeviceInfo
_In_ ULONG _In_ struct _SET_PARTITION_INFORMATION_EX * PartitionInfo
struct _MOUNTMGR_QUERY_AUTO_MOUNT * PMOUNTMGR_QUERY_AUTO_MOUNT
struct _MOUNTMGR_MOUNT_POINT * PMOUNTMGR_MOUNT_POINT
struct _MOUNTMGR_VOLUME_PATHS * PMOUNTMGR_VOLUME_PATHS
USHORT SymbolicNameOffset
NTSTATUS MountMgrKeepLinksWhenOffline(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
NTSTATUS QueryPointsFromSymbolicLinkName(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING SymbolicName, IN PIRP Irp)
ULONG NumberOfMountPoints
#define MOUNTMGR_IS_DRIVE_LETTER(s)
#define FILE_READ_ATTRIBUTES
NTSYSAPI NTSTATUS NTAPI ZwQueryVolumeInformationFile(IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FsInformation, IN ULONG Length, IN FS_INFORMATION_CLASS FsInformationClass)
#define STATUS_UNSUCCESSFUL
NTSTATUS AddRemoteDatabaseEntry(IN HANDLE Database, IN PDATABASE_ENTRY Entry)
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
struct _MOUNTMGR_CHANGE_NOTIFY_INFO MOUNTMGR_CHANGE_NOTIFY_INFO
_In_ WDFDEVICE AssociatedDevice
VOID CreateNoDriveLetterEntry(IN PMOUNTDEV_UNIQUE_ID UniqueId)
#define FILE_SHARE_DELETE
#define IOCTL_DISK_GET_PARTITION_INFO
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
VOID MountMgrNotify(IN PDEVICE_EXTENSION DeviceExtension)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
NTSYSAPI NTSTATUS WINAPI RtlDeleteRegistryValue(ULONG, PCWSTR, PCWSTR)
MOUNTMGR_AUTO_MOUNT_STATE CurrentState
#define FILE_REMOTE_DEVICE
NTSTATUS MountMgrValidateBackPointer(IN PASSOCIATED_DEVICE_ENTRY AssociatedDeviceEntry, IN PDEVICE_INFORMATION DeviceInformation, OUT PBOOLEAN Invalid)
BOOLEAN NTAPI PsGetThreadHardErrorsAreDisabled(IN PETHREAD Thread)
#define IOCTL_MOUNTMGR_DEFINE_UNIX_DRIVE
static const WCHAR Cleanup[]
#define RTL_REGISTRY_ABSOLUTE
POBJECT_TYPE IoFileObjectType
#define AllocatePool(Size)
VOID ReconcileThisDatabaseWithMaster(IN PDEVICE_EXTENSION DeviceExtension, IN PDEVICE_INFORMATION DeviceInformation)
VOID MountMgrFreeDeadDeviceInfo(IN PDEVICE_INFORMATION DeviceInformation)
VOID NTAPI IoReleaseCancelSpinLock(IN KIRQL Irql)
NTSTATUS DeleteRemoteDatabaseEntry(IN HANDLE Database, IN LONG StartingOffset)
#define IOCTL_MOUNTMGR_QUERY_AUTO_MOUNT
VOID PostOnlineNotification(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING SymbolicName)
MOUNTMGR_MOUNT_POINT MountPoints[1]
_In_ ULONG _In_ ULONG Offset
PDEVICE_INFORMATION DeviceInformation
NTSTATUS MountMgrNextDriveLetterWorker(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING DeviceName, OUT PMOUNTMGR_DRIVE_LETTER_INFORMATION DriveLetterInfo)
NTSTATUS MountMgrNextDriveLetter(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
NTSTATUS CloseRemoteDatabase(IN HANDLE Database)
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
VOID ProcessSuggestedDriveLetters(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS MountmgrWriteNoAutoMount(IN PDEVICE_EXTENSION DeviceExtension)
#define KeInitializeEvent(pEvt, foo, foo2)
#define STATUS_OBJECT_NAME_NOT_FOUND
#define STATUS_BUFFER_OVERFLOW
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
NTSTATUS QueryVolumeName(IN HANDLE RootDirectory, IN PFILE_REPARSE_POINT_INFORMATION ReparsePointInformation, IN PUNICODE_STRING FileName OPTIONAL, OUT PUNICODE_STRING SymbolicName, OUT PUNICODE_STRING VolumeName)
LONG NTAPI KeReleaseSemaphore(IN PKSEMAPHORE Semaphore, IN KPRIORITY Increment, IN LONG Adjustment, IN BOOLEAN Wait)
PDATABASE_ENTRY GetRemoteDatabaseEntry(IN HANDLE Database, IN LONG StartingOffset)
#define InitializeListHead(ListHead)
#define IsFTPartition(PartitionType)
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
USHORT SourceVolumeNameLength
#define FIELD_OFFSET(t, f)
static OUT PIO_STATUS_BLOCK IoStatusBlock
VOID ReconcileAllDatabasesWithMaster(IN PDEVICE_EXTENSION DeviceExtension)
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSYSAPI BOOLEAN NTAPI RtlPrefixUnicodeString(IN PUNICODE_STRING String1, IN PUNICODE_STRING String2, IN BOOLEAN CaseInSensitive)
BOOLEAN HasDriveLetter(IN PDEVICE_INFORMATION DeviceInformation)
NTSTATUS MountMgrChangeNotify(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
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)
struct _MOUNTMGR_DRIVE_LETTER_TARGET * PMOUNTMGR_DRIVE_LETTER_TARGET
VOID NTAPI ReconcileThisDatabaseWithMasterWorker(IN PVOID Parameter)
#define FILE_SYNCHRONOUS_IO_NONALERT
_Must_inspect_result_ _Inout_opt_ PUNICODE_STRING VolumeName
struct tagContext Context
ULONG SymbolicLinkNameOffset
#define IOCTL_MOUNTMGR_DELETE_POINTS_DBONLY
USHORT SymbolicLinkNameLength
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define InitializeObjectAttributes(p, n, a, r, s)
#define RtlCopyMemory(Destination, Source, Length)
NTSTATUS MountMgrQueryDosVolumePaths(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
PDEVICE_EXTENSION DeviceExtension
#define IOCTL_MOUNTMGR_SCRUB_REGISTRY
NTSTATUS MountMgrMountedDeviceArrival(IN PDEVICE_EXTENSION Extension, IN PUNICODE_STRING SymbolicName, IN BOOLEAN FromVolume)
unsigned short MaximumLength
USHORT TargetVolumeNameOffset
#define RTL_QUERY_REGISTRY_REQUIRED
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE
#define DRIVE_LETTER_LENGTH
NTSTATUS WriteRemoteDatabaseEntry(IN HANDLE Database, IN LONG Offset, IN PDATABASE_ENTRY Entry)
#define FILE_OPEN_REPARSE_POINT
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
LIST_ENTRY ReplicatedUniqueIdsListEntry
NTSTATUS MountMgrCreatePoint(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
base of all file and directory entries
USHORT TargetVolumeNameLength
#define RtlCompareMemory(s1, s2, l)
VOID MountMgrNotifyNameChange(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING DeviceName, IN BOOLEAN ValidateVolume)
NTSTATUS MountMgrQuerySystemVolumeName(OUT PUNICODE_STRING SystemVolumeName)
struct _MOUNTMGR_CREATE_POINT_INPUT * PMOUNTMGR_CREATE_POINT_INPUT
#define IOCTL_MOUNTMGR_DELETE_POINTS
NTSTATUS QueryPointsFromMemory(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp, IN PMOUNTDEV_UNIQUE_ID UniqueId OPTIONAL, IN PUNICODE_STRING SymbolicName OPTIONAL)
VOID WaitForOnlinesToComplete(IN PDEVICE_EXTENSION DeviceExtension)
UNICODE_STRING DeviceCdRom
NTSTATUS MountMgrDeletePoints(IN PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_ ULONG ValueLength
struct _MOUNTMGR_CHANGE_NOTIFY_INFO * PMOUNTMGR_CHANGE_NOTIFY_INFO