1507 PCWSTR pwszNtPathToMap = pwszNTPath;
1511 WCHAR wszDrives[512];
1525 for (ListEntry = MappingList->List.Flink;
1526 ListEntry != &MappingList->List;
1527 ListEntry = ListEntry->
Flink)
1540 pwszDrive =
Entry->Win32Path;
1541 pwszRemaining = pwszNTPath +
wcslen(
Entry->NtPath);
1552 if (cchDrives == 0 || cchDrives >=
_countof(wszDrives))
1555 DPRINT1(
"ConvertNtPathToWin32Path: GetLogicalDriveStringsW failed\n");
1563 for (pwszDrive = wszDrives; *pwszDrive; pwszDrive +=
wcslen(pwszDrive) + 1)
1568 pwszDrive[2] =
L'\\';
1570 DPRINT(
"Testing '%S' --> '%S'\n", pwszDrive, wszNTPath);
1573 FoundDrive = !
_wcsnicmp(pwszNtPathToMap, wszNTPath,
wcslen(wszNTPath));
1602 if (pwszDrive[0] !=
ptr[1])
1604 DPRINT1(
"Peculiar: expected network share drive letter %C different from actual one %C\n",
1605 pwszDrive[0],
ptr[1]);
1611 while (*ptr2 ==
L'\\') ++ptr2;
1616 FoundDrive = !
_wcsnicmp(pwszNtPathToMap, wszNTPath,
wcslen(wszNTPath));
1625 if (pwszNtPathToMap == pwszNTPath)
1627 ASSERT(!RetryOnce && pwszNTPath != TargetPath);
1628 pwszRemaining = pwszNTPath +
wcslen(wszNTPath);
1640 DPRINT1(
"ConvertNtPathToWin32Path: Cannot allocate memory\n");
1644 pwszNTPath, pwszRemaining - pwszNTPath);
1649 MappingList->MappingsCount++;
1652 pwszDrive =
Entry->Win32Path;
1677 if (!RetryOnce && !FoundDrive)
1687 if (
swscanf(pwszNTPath,
L"\\Device\\Harddisk%lu\\Partition%lu%n",
1695 RtlInitEmptyUnicodeString(&SymLink, (
PWCHAR)pwszNTPath,
Length *
sizeof(
WCHAR));
1709 DPRINT1(
"ConvertNtPathToWin32Path: NtOpenSymbolicLinkObject(%wZ) failed, Status 0x%08lx\n",
1715 RtlInitEmptyUnicodeString(&
Target, TargetPath,
sizeof(TargetPath));
1725 DPRINT1(
"ConvertNtPathToWin32Path: NtQuerySymbolicLinkObject(%wZ) failed, Status 0x%08lx\n",
1731 pwszRemaining = pwszNTPath +
Length;
1732 pwszNtPathToMap = TargetPath;
1748 DPRINT(
"ConvertNtPathToWin32Path: %S\n", pwszPath);
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define memmove(s1, s2, n)
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define OBJ_CASE_INSENSITIVE
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
NTSTATUS NTAPI NtQuerySymbolicLinkObject(IN HANDLE LinkHandle, OUT PUNICODE_STRING LinkTarget, OUT PULONG ResultLength OPTIONAL)
_In_ ULONG _In_ ULONG PartitionNumber
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
DWORD WINAPI QueryDosDeviceW(LPCWSTR lpDeviceName, LPWSTR lpTargetPath, DWORD ucchMax)
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)
struct _LIST_ENTRY * Flink
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define SYMBOLIC_LINK_QUERY
#define InitializeObjectAttributes(p, n, a, r, s)
NTSTATUS NTAPI NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
_Check_return_ _CRTIMP int __cdecl swscanf(_In_z_ const wchar_t *_Src, _In_z_ _Scanf_format_string_ const wchar_t *_Format,...)
base of all file and directory entries
DWORD WINAPI GetLogicalDriveStringsW(IN DWORD nBufferLength, IN LPWSTR lpBuffer)