100 GlobalString->Length = IntGlobal.
Length;
102 GlobalString->Buffer = IntGlobal.
Buffer;
393 if (ValueNameString.
Length)
431 if (!ValueNameString.
Length)
438 if (!ValueNameString.
Buffer)
447 while (ReturnString->
Length)
453 *ReturnString = ValueNameString;
517 IN BOOLEAN UseOnlyIfThereAreNoOtherLinks,
538 DeviceInformation->UniqueId,
546 if (SuggestedLinkName && !
IsDriveLetter(SuggestedLinkName) &&
547 UseOnlyIfThereAreNoOtherLinks && *SymLinkCount == 0)
567 SuggestedLinkName->Buffer,
569 DeviceInformation->UniqueId->UniqueId,
570 DeviceInformation->UniqueId->UniqueIdLength);
581 DeviceInformation->UniqueId,
630 DeviceInformation->UniqueId,
647 if (
IsListEmpty(&(DeviceExtension->SavedLinksListHead)))
653 for (NextEntry = DeviceExtension->SavedLinksListHead.
Flink;
654 NextEntry != &(DeviceExtension->SavedLinksListHead);
655 NextEntry = NextEntry->
Flink)
659 SavedLinksListEntry);
666 UniqueId->UniqueIdLength) ==
667 UniqueId->UniqueIdLength)
671 return SavedLinkInformation;
797 SuggestedLinkName->Length = IoCtlSuggested->
NameLength;
800 if (!SuggestedLinkName->Buffer)
807 SuggestedLinkName->Buffer[SuggestedLinkName->Length /
sizeof(
WCHAR)] =
UNICODE_NULL;
835 for (NextEntry = SavedLinkInformation->SymbolicLinksListHead.
Flink;
836 NextEntry != &(SavedLinkInformation->SymbolicLinksListHead);
837 NextEntry = NextEntry->
Flink)
873 if (
IsListEmpty(&(DeviceExtension->DeviceListHead)))
879 for (DeviceEntry = DeviceExtension->DeviceListHead.
Flink;
880 DeviceEntry != &(DeviceExtension->DeviceListHead);
881 DeviceEntry = DeviceEntry->
Flink)
887 SymbolEntry = SymbolEntry->
Flink)
940 if ((Letter < L'A' || Letter >
L'Z') &&
Letter != (
WCHAR)-1)
982 Status = ZwQuerySymbolicLinkObject(LinkHandle,
NTKERNELAPI NTSTATUS ExUuidCreate(OUT UUID *Uuid)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
#define STATUS_INSUFFICIENT_RESOURCES
NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID)
UNICODE_STRING DeviceCdRom
#define OBJ_CASE_INSENSITIVE
UNICODE_STRING DosDevices
UNICODE_STRING DosDevicesMount
#define IOCTL_MOUNTDEV_LINK_DELETED
#define UNREFERENCED_PARAMETER(P)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ PNDIS_STRING _In_ PNDIS_STRING SymbolicName
NTSTATUS NTAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
UNICODE_STRING DeviceMount
NTSTATUS GlobalDeleteSymbolicLink(IN PUNICODE_STRING DosName)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_ ULONG _Out_opt_ PULONG _Out_opt_ PULONG ValueType
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
UNICODE_STRING ReparseIndex
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define MOUNTMGR_DEVICE_NAME
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
BOOLEAN RedirectSavedLink(IN PSAVED_LINK_INFORMATION SavedLinkInformation, IN PUNICODE_STRING DosName, IN PUNICODE_STRING NewLink)
UNICODE_STRING SafeVolumes
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
_Inout_ PUNICODE_STRING LinkTarget
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
NTSYSAPI NTSTATUS WINAPI RtlWriteRegistryValue(ULONG, PCWSTR, PCWSTR, ULONG, PVOID, ULONG)
_In_ PVOID _In_ ULONG Event
_In_ PCWSTR _Inout_ _At_ QueryTable EntryContext
NTSTATUS MountMgrQuerySymbolicLink(IN PUNICODE_STRING SymbolicName, IN OUT PUNICODE_STRING LinkTarget)
NTSTATUS GlobalCreateSymbolicLink(IN PUNICODE_STRING DosName, IN PUNICODE_STRING DeviceName)
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)
struct _LIST_ENTRY * Flink
#define CTL_CODE(DeviceType, Function, Method, Access)
NTSTATUS CreateNewVolumeName(OUT PUNICODE_STRING VolumeName, IN PGUID VolumeGuid OPTIONAL)
NTSTATUS NTAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName, IN PUNICODE_STRING DeviceName)
#define NT_SUCCESS(StatCode)
NTSTATUS QuerySymbolicLinkNamesFromStorage(IN PDEVICE_EXTENSION DeviceExtension, IN PDEVICE_INFORMATION DeviceInformation, IN PUNICODE_STRING SuggestedLinkName, IN BOOLEAN UseOnlyIfThereAreNoOtherLinks, OUT PUNICODE_STRING *SymLinks, OUT PULONG SymLinkCount, IN BOOLEAN HasGuid, IN LPGUID Guid)
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
#define ObDereferenceObject
_In_ GUID _In_ PVOID ValueData
NTSTATUS CreateStringWithGlobal(IN PUNICODE_STRING DosName, OUT PUNICODE_STRING GlobalString)
#define MOUNTDEVCONTROLTYPE
#define FILE_READ_ATTRIBUTES
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
NTSTATUS NTAPI SymbolicLinkNamesFromUniqueIdQuery(IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
static const WCHAR Cleanup[]
#define RTL_REGISTRY_ABSOLUTE
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetNextIrpStackLocation(_In_ PIRP Irp)
#define AllocatePool(Size)
#define KeInitializeEvent(pEvt, foo, foo2)
struct _MOUNTDEV_SUGGESTED_LINK_NAME MOUNTDEV_SUGGESTED_LINK_NAME
#define STATUS_BUFFER_OVERFLOW
#define IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME
VOID DeleteSymbolicLinkNameFromMemory(IN PDEVICE_EXTENSION DeviceExtension, IN PUNICODE_STRING SymbolicLink, IN BOOLEAN MarkOffline)
VOID SendLinkCreated(IN PUNICODE_STRING SymbolicName)
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
VOID SendLinkDeleted(IN PUNICODE_STRING DeviceName, IN PUNICODE_STRING SymbolicName)
_Out_ PUNICODE_STRING DosName
static OUT PIO_STATUS_BLOCK IoStatusBlock
UNICODE_STRING DeviceFloppy
BOOLEAN IsDriveLetter(PUNICODE_STRING SymbolicName)
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)
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)
_Must_inspect_result_ _Inout_opt_ PUNICODE_STRING VolumeName
#define FILE_WRITE_ACCESS
struct tagContext Context
PSAVED_LINK_INFORMATION RemoveSavedLinks(IN PDEVICE_EXTENSION DeviceExtension, IN PMOUNTDEV_UNIQUE_ID UniqueId)
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)
BOOLEAN UseOnlyIfThereAreNoOtherLinks
#define ExFreePoolWithTag(_P, _T)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
NTSTATUS QuerySuggestedLinkName(IN PUNICODE_STRING SymbolicName, OUT PUNICODE_STRING SuggestedLinkName, OUT PBOOLEAN UseOnlyIfThereAreNoOtherLinks)
NTSTATUS NTAPI SymbolicLinkNamesFromUniqueIdCount(IN PWSTR ValueName, IN ULONG ValueType, IN PVOID ValueData, IN ULONG ValueLength, IN PVOID Context, IN PVOID EntryContext)
NTSYSAPI NTSTATUS NTAPI ZwOpenSymbolicLinkObject(_Out_ PHANDLE SymbolicLinkHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes)
static const WCHAR SymbolicLink[]
#define IOCTL_MOUNTDEV_LINK_CREATED
#define RtlCompareMemory(s1, s2, l)
#define RTL_CONSTANT_STRING(s)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_ ULONG ValueLength
PULONG MinorVersion OPTIONAL