48 if (lpRootPathName ==
NULL)
50 lpRootPathName =
"\\";
55 if (RootPathNameU ==
NULL)
68 FileSystemName.
Buffer = lpFileSystemNameBuffer;
75 if (lpVolumeNameBuffer !=
NULL)
88 if (lpFileSystemNameBuffer !=
NULL)
102 nVolumeNameSize, lpVolumeSerialNumber,
103 lpMaximumComponentLength, lpFileSystemFlags,
104 FileSystemNameU.
Buffer, nFileSystemNameSize);
108 if (lpVolumeNameBuffer !=
NULL)
121 if (lpFileSystemNameBuffer !=
NULL)
175 if (FileNameInfo.FileName[FileNameInfo.FileNameLength /
sizeof(
WCHAR) - 1] !=
L'\\')
182 if (NtPathName !=
NULL)
198 NtPathName->Length +=
sizeof(
WCHAR);
244 ULONG OldMode, VolumeInfoSize, VolumeAttrSize;
247 if (lpRootPathName ==
NULL)
249 RootPathName =
L"\\";
253 RootPathName = lpRootPathName;
257 nVolumeNameSize *=
sizeof(
WCHAR);
258 nFileSystemNameSize *=
sizeof(
WCHAR);
305 if (lpVolumeNameBuffer !=
NULL)
310 else if (lpVolumeSerialNumber !=
NULL)
321 if (VolumeInfoSize != 0)
335 if (lpFileSystemNameBuffer !=
NULL)
340 else if (lpMaximumComponentLength !=
NULL || lpFileSystemFlags !=
NULL)
350 if (VolumeAttrSize != 0)
353 if (VolumeAttr ==
NULL)
381 if (VolumeAttr !=
NULL)
392 if (lpVolumeNameBuffer !=
NULL)
395 if (
VolumeInfo->VolumeLabelLength >= nVolumeNameSize)
407 if (lpVolumeSerialNumber !=
NULL)
409 *lpVolumeSerialNumber =
VolumeInfo->VolumeSerialNumber;
413 if (lpFileSystemNameBuffer !=
NULL)
428 if (lpMaximumComponentLength !=
NULL)
434 if (lpFileSystemFlags !=
NULL)
450 if (VolumeAttr !=
NULL)
470 if (lpRootPathName ==
NULL)
472 lpRootPathName =
"\\";
476 if (RootPathNameU ==
NULL)
481 if (lpVolumeName !=
NULL)
520 if (lpVolumeName !=
NULL)
532 if (lpRootPathName !=
NULL)
544 VolumeRoot = VolumeGuid;
549 if (lpRootPathName !=
NULL)
551 VolumeRoot = (
PWSTR)lpRootPathName;
621 if (FsLabelInfo !=
NULL)
647 if (FsLabelInfo !=
NULL)
743 return RtlFreeHeap(RtlGetProcessHeap(), 0, hFindVolume);
762 if (FileNameU ==
NULL)
768 VolumePathName.
Buffer = lpszVolumePathName;
769 VolumePathName.
Length = 0;
772 VolumePathNameU.
Length = 0;
823 PWSTR FullPathBuf, FilePart, VolumeNameBuf;
827 if (FullPathLen == 0)
834 if (FullPathBuf ==
NULL)
841 if (
GetFullPathNameW(lpszFileName, FullPathLen + 10, FullPathBuf, &FilePart) == 0)
859 if (VolumeNameBuf ==
NULL)
893 CHAR RootPathName[4];
896 RootPathName[0] = FullPath.
Buffer[0];
897 RootPathName[1] =
':';
898 RootPathName[2] =
'\\';
911 if ((VolumeNameBuf[0] !=
L'\\') || (VolumeNameBuf[1] !=
L'?') ||
912 (VolumeNameBuf[2] !=
L'?') || (VolumeNameBuf[3] !=
L'\\'))
923 if (GlobalPath ==
NULL)
925 RtlFreeHeap(RtlGetProcessHeap(), 0, VolumeNameBuf);
943 if ((VolumeNameBuf[4] !=
UNICODE_NULL) && (VolumeNameBuf[5] !=
L':'))
954 VolumeNameBuf[1] =
L'\\';
962 RtlFreeHeap(RtlGetProcessHeap(), 0, VolumeNameBuf);
968 if (!MountPoint && FilePart !=
NULL)
970 FilePart[0] = OldFilePart;
987 if (FullPath.
Buffer[LastSlash] ==
L'\\')
993 }
while (LastSlash != 0);
1005 FilePart = &FullPath.
Buffer[LastSlash + 1];
1006 OldFilePart = FilePart[0];
1023 RtlFreeHeap(RtlGetProcessHeap(), 0, VolumeNameBuf);
1026 if (!MountPoint && FilePart ==
NULL)
1088 while (
data->Size <
data->NumberOfMountPoints)
1090 static const WCHAR volumeW[] = {
'\\',
'?',
'?',
'\\',
'V',
'o',
'l',
'u',
'm',
'e',
'{',};
1095 if (
size <
sizeof(volumeW) ||
memcmp(
link, volumeW,
sizeof(volumeW) ))
continue;
1124 DWORD cchReturnLength;
1131 if (VolumeNameU ==
NULL)
1137 VolumePathName.
Length = 0;
1139 VolumePathName.
Buffer = lpszVolumePathNames;
1141 VolumePathNamesU.
Length = 0;
1160 cchBufferLength, &cchReturnLength);
1164 VolumePathNamesU.
Length =
sizeof(
WCHAR) * cchReturnLength;
1180 VolumePathNamesU.
Length =
sizeof(
WCHAR) * cchBufferLength;
1198 if (lpcchReturnLength !=
NULL)
1203 *lpcchReturnLength = VolumePathName.
Length;
1208 *lpcchReturnLength =
sizeof(
WCHAR) * cchReturnLength;
1283 if (VolumePaths ==
NULL)
1314 if (VolumePaths ==
NULL)
1341 MultiSz = VolumePaths->
MultiSz;
1344 if (cchBufferLength != 0)
1349 for (; (CharsInMgr < VolumePaths->
MultiSzLength /
sizeof(
WCHAR) - 1) && (CharsInOutput < cchBufferLength);
1350 ++CharsInMgr, ++CharsInOutput)
1357 lpszVolumePathNames[CharsInOutput] =
L'\\';
1360 if (CharsInOutput == cchBufferLength)
1370 lpszVolumePathNames[CharsInOutput] = MultiSz[CharsInMgr];
1375 if (CharsInMgr < VolumePaths->MultiSzLength /
sizeof(
WCHAR) - 1)
1393 if (CharsInOutput >= cchBufferLength)
1399 if (lpcchReturnLength !=
NULL)
1412 if (lpcchReturnLength !=
NULL)
1415 *lpcchReturnLength = CharsInOutput + 1;
#define ERROR_INVALID_PARAMETER
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
BOOL BasepGetVolumeNameForVolumeMountPoint(IN LPCWSTR lpszMountPoint, OUT LPWSTR lpszVolumeName, IN DWORD cchBufferLength, OUT LPBOOL IsAMountPoint)
PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString(IN LPCSTR String)
static UCHAR ULONG UCHAR ULONG UCHAR * output
UINT WINAPI GetDriveTypeA(IN LPCSTR lpRootPathName)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
#define WideCharToMultiByte
#define OBJ_CASE_INSENSITIVE
IN BOOLEAN OUT PSTR Buffer
#define FILE_DIRECTORY_FILE
BOOL WINAPI GetVolumePathNamesForVolumeNameW(IN LPCWSTR lpszVolumeName, IN LPWSTR lpszVolumePathNames, IN DWORD cchBufferLength, OUT PDWORD lpcchReturnLength)
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define ERROR_NOT_ENOUGH_MEMORY
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
NTSTATUS NTAPI NtQuerySymbolicLinkObject(IN HANDLE LinkHandle, OUT PUNICODE_STRING LinkTarget, OUT PULONG ResultLength OPTIONAL)
BOOL WINAPI GetVolumePathNameW(IN LPCWSTR lpszFileName, IN LPWSTR lpszVolumePathName, IN DWORD cchBufferLength)
HANDLE WINAPI FindFirstVolumeW(IN LPWSTR volume, IN DWORD len)
BOOL WINAPI GetVolumeInformationA(IN LPCSTR lpRootPathName, IN LPSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
struct _FILE_FS_ATTRIBUTE_INFORMATION FILE_FS_ATTRIBUTE_INFORMATION
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
#define RtlMoveMemory(Destination, Source, Length)
_Inout_ PUNICODE_STRING LinkTarget
BOOL WINAPI GetVolumePathNamesForVolumeNameA(IN LPCSTR lpszVolumeName, IN LPSTR lpszVolumePathNames, IN DWORD cchBufferLength, OUT PDWORD lpcchReturnLength)
#define IOCTL_MOUNTMGR_QUERY_POINTS
BOOL WINAPI FindNextVolumeW(IN HANDLE handle, IN LPWSTR volume, IN DWORD len)
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATHS
BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, IN LPCSTR String)
namespace GUID const ADDRINFOEXW ADDRINFOEXW struct timeval OVERLAPPED LPLOOKUPSERVICE_COMPLETION_ROUTINE HANDLE * handle
#define ERROR_ACCESS_DENIED
HANDLE WINAPI FindFirstVolumeA(IN LPSTR volume, IN DWORD len)
#define MOUNTMGR_DOS_DEVICE_NAME
NTSYSAPI NTSTATUS WINAPI RtlSetThreadErrorMode(DWORD, LPDWORD)
#define ERROR_DIR_NOT_ROOT
DWORD BaseSetLastNTError(IN NTSTATUS Status)
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
#define ERROR_NO_MORE_FILES
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
NTSYSAPI NTSTATUS NTAPI NtOpenFile(OUT PHANDLE phFile, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG ShareMode, IN ULONG OpenMode)
#define NT_SUCCESS(StatCode)
BOOL WINAPI SetVolumeLabelW(IN LPCWSTR lpRootPathName, IN LPCWSTR lpVolumeName OPTIONAL)
BOOL WINAPI GetVolumePathNameA(IN LPCSTR lpszFileName, IN LPSTR lpszVolumePathName, IN DWORD cchBufferLength)
_Must_inspect_result_ _Out_ PHANDLE VolumeHandle
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
#define RTL_SEM_FAILCRITICALERRORS
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
BOOL IsThisARootDirectory(IN HANDLE VolumeHandle, IN PUNICODE_STRING NtPathName)
#define FILE_ATTRIBUTE_NORMAL
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _In_ ULONG _Out_ PULONG ReturnedLength
#define memcpy(s1, s2, n)
#define MOUNTMGR_IS_DOS_VOLUME_NAME_WB(s)
BOOL WINAPI GetVolumeInformationW(IN LPCWSTR lpRootPathName, IN LPWSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPWSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FsInformation, ULONG Length, FS_INFORMATION_CLASS FsInformationClass)
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
GLenum GLenum GLenum input
#define FILE_OPEN_FOR_BACKUP_INTENT
#define STATUS_OBJECT_NAME_INVALID
static OUT PIO_STATUS_BLOCK IoStatusBlock
struct _FILE_NAME_INFORMATION FILE_NAME_INFORMATION
struct _MOUNTMGR_VOLUME_PATHS MOUNTMGR_VOLUME_PATHS
#define FILE_SYNCHRONOUS_IO_NONALERT
_Must_inspect_result_ _Inout_opt_ PUNICODE_STRING VolumeName
NTSTATUS NTAPI NtSetVolumeInformationFile(IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PVOID FsInformation, IN ULONG Length, IN FS_INFORMATION_CLASS FsInformationClass)
struct _FILE_FS_VOLUME_INFORMATION FILE_FS_VOLUME_INFORMATION
#define SYMBOLIC_LINK_QUERY
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
#define InitializeObjectAttributes(p, n, a, r, s)
NTSTATUS NTAPI NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
#define RtlCopyMemory(Destination, Source, Length)
#define ERROR_PATH_NOT_FOUND
BOOL WINAPI GetVolumeNameForVolumeMountPointW(IN LPCWSTR VolumeMountPoint, OUT LPWSTR VolumeName, IN DWORD VolumeNameLength)
BOOL WINAPI SetVolumeLabelA(IN LPCSTR lpRootPathName, IN LPCSTR lpVolumeName OPTIONAL)
BOOL WINAPI FindNextVolumeA(IN HANDLE handle, IN LPSTR volume, IN DWORD len)
BOOL WINAPI FindVolumeClose(IN HANDLE hFindVolume)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
#define ERROR_FILENAME_EXCED_RANGE
PULONG MinorVersion OPTIONAL