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)
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);
759 PWSTR FullPathBuf, FilePart, VolumeNameBuf;
763 if (FullPathLen == 0)
770 if (FullPathBuf ==
NULL)
777 if (
GetFullPathNameW(lpszFileName, FullPathLen + 10, FullPathBuf, &FilePart) == 0)
795 if (VolumeNameBuf ==
NULL)
829 CHAR RootPathName[4];
832 RootPathName[0] = FullPath.
Buffer[0];
833 RootPathName[1] =
':';
834 RootPathName[2] =
'\\';
847 if ((VolumeNameBuf[0] !=
L'\\') || (VolumeNameBuf[1] !=
L'?') ||
848 (VolumeNameBuf[2] !=
L'?') || (VolumeNameBuf[3] !=
L'\\'))
859 if (GlobalPath ==
NULL)
861 RtlFreeHeap(RtlGetProcessHeap(), 0, VolumeNameBuf);
879 if ((VolumeNameBuf[4] !=
UNICODE_NULL) && (VolumeNameBuf[5] !=
L':'))
890 VolumeNameBuf[1] =
L'\\';
898 RtlFreeHeap(RtlGetProcessHeap(), 0, VolumeNameBuf);
904 if (!MountPoint && FilePart !=
NULL)
906 FilePart[0] = OldFilePart;
923 if (FullPath.
Buffer[LastSlash] ==
L'\\')
929 }
while (LastSlash != 0);
941 FilePart = &FullPath.
Buffer[LastSlash + 1];
942 OldFilePart = FilePart[0];
959 RtlFreeHeap(RtlGetProcessHeap(), 0, VolumeNameBuf);
962 if (!MountPoint && FilePart ==
NULL)
1024 while (
data->Size <
data->NumberOfMountPoints)
1026 static const WCHAR volumeW[] = {
'\\',
'?',
'?',
'\\',
'V',
'o',
'l',
'u',
'm',
'e',
'{',};
1031 if (
size <
sizeof(volumeW) ||
memcmp(
link, volumeW,
sizeof(volumeW) ))
continue;
1060 DWORD cchReturnLength;
1067 if (VolumeNameU ==
NULL)
1073 VolumePathName.
Length = 0;
1075 VolumePathName.
Buffer = lpszVolumePathNames;
1077 VolumePathNamesU.
Length = 0;
1096 cchBufferLength, &cchReturnLength);
1100 VolumePathNamesU.
Length =
sizeof(
WCHAR) * cchReturnLength;
1116 VolumePathNamesU.
Length =
sizeof(
WCHAR) * cchBufferLength;
1134 if (lpcchReturnLength !=
NULL)
1139 *lpcchReturnLength = VolumePathName.
Length;
1144 *lpcchReturnLength =
sizeof(
WCHAR) * cchReturnLength;
1219 if (VolumePaths ==
NULL)
1250 if (VolumePaths ==
NULL)
1277 MultiSz = VolumePaths->
MultiSz;
1280 if (cchBufferLength != 0)
1285 for (; (CharsInMgr < VolumePaths->
MultiSzLength /
sizeof(
WCHAR) - 1) && (CharsInOutput < cchBufferLength);
1286 ++CharsInMgr, ++CharsInOutput)
1293 lpszVolumePathNames[CharsInOutput] =
L'\\';
1296 if (CharsInOutput == cchBufferLength)
1306 lpszVolumePathNames[CharsInOutput] = MultiSz[CharsInMgr];
1311 if (CharsInMgr < VolumePaths->MultiSzLength /
sizeof(
WCHAR) - 1)
1329 if (CharsInOutput >= cchBufferLength)
1335 if (lpcchReturnLength !=
NULL)
1348 if (lpcchReturnLength !=
NULL)
1351 *lpcchReturnLength = CharsInOutput + 1;
#define FILE_DIRECTORY_FILE
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _In_ ULONG _Out_ PULONG ReturnedLength
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define ERROR_NOT_ENOUGH_MEMORY
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)
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define INVALID_HANDLE_VALUE
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define ERROR_ACCESS_DENIED
UINT WINAPI GetDriveTypeA(IN LPCSTR lpRootPathName)
BOOL WINAPI FindNextVolumeW(IN HANDLE handle, IN LPWSTR volume, IN DWORD len)
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)
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)
HANDLE WINAPI FindFirstVolumeW(IN LPWSTR volume, IN DWORD len)
BOOL WINAPI GetVolumePathNameW(IN LPCWSTR lpszFileName, IN LPWSTR lpszVolumePathName, IN DWORD cchBufferLength)
BOOL WINAPI FindVolumeClose(IN HANDLE hFindVolume)
BOOL IsThisARootDirectory(IN HANDLE VolumeHandle, IN PUNICODE_STRING NtPathName)
HANDLE WINAPI FindFirstVolumeA(IN LPSTR volume, IN DWORD len)
BOOL WINAPI FindNextVolumeA(IN HANDLE handle, IN LPSTR volume, IN DWORD len)
BOOL WINAPI GetVolumePathNamesForVolumeNameA(IN LPCSTR lpszVolumeName, IN LPSTR lpszVolumePathNames, IN DWORD cchBufferLength, OUT PDWORD lpcchReturnLength)
BOOL WINAPI SetVolumeLabelA(IN LPCSTR lpRootPathName, IN LPCSTR lpVolumeName OPTIONAL)
BOOL WINAPI GetVolumePathNamesForVolumeNameW(IN LPCWSTR lpszVolumeName, IN LPWSTR lpszVolumePathNames, IN DWORD cchBufferLength, OUT PDWORD lpcchReturnLength)
BOOL WINAPI SetVolumeLabelW(IN LPCWSTR lpRootPathName, IN LPCWSTR lpVolumeName OPTIONAL)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
BOOLEAN WINAPI Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, IN LPCSTR String)
PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString(IN LPCSTR String)
#define SYMBOLIC_LINK_QUERY
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_Must_inspect_result_ _Inout_opt_ PUNICODE_STRING VolumeName
_Must_inspect_result_ _Out_ PHANDLE VolumeHandle
#define FILE_SYNCHRONOUS_IO_NONALERT
struct _FILE_FS_ATTRIBUTE_INFORMATION FILE_FS_ATTRIBUTE_INFORMATION
@ FileFsAttributeInformation
@ FileFsVolumeInformation
#define FILE_OPEN_FOR_BACKUP_INTENT
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLenum GLenum input
#define OBJ_CASE_INSENSITIVE
NTSYSAPI NTSTATUS WINAPI RtlSetThreadErrorMode(DWORD, LPDWORD)
struct _FILE_NAME_INFORMATION FILE_NAME_INFORMATION
NTSTATUS NTAPI NtSetVolumeInformationFile(IN HANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PVOID FsInformation, IN ULONG Length, IN FS_INFORMATION_CLASS FsInformationClass)
#define memcpy(s1, s2, n)
BOOL WINAPI GetVolumeNameForVolumeMountPointW(IN LPCWSTR VolumeMountPoint, OUT LPWSTR VolumeName, IN DWORD VolumeNameLength)
BOOL BasepGetVolumeNameForVolumeMountPoint(IN LPCWSTR lpszMountPoint, OUT LPWSTR lpszVolumeName, IN DWORD cchBufferLength, OUT LPBOOL IsAMountPoint)
#define InitializeObjectAttributes(p, n, a, r, s)
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATHS
#define IOCTL_MOUNTMGR_QUERY_POINTS
#define MOUNTMGR_DOS_DEVICE_NAME
struct _MOUNTMGR_VOLUME_PATHS MOUNTMGR_VOLUME_PATHS
#define MOUNTMGR_IS_DOS_VOLUME_NAME_WB(s)
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)
#define RTL_SEM_FAILCRITICALERRORS
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)
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
static OUT PIO_STATUS_BLOCK IoStatusBlock
NTSTATUS NTAPI NtQuerySymbolicLinkObject(IN HANDLE LinkHandle, OUT PUNICODE_STRING LinkTarget, OUT PULONG ResultLength OPTIONAL)
NTSTATUS NTAPI NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
DWORD BaseSetLastNTError(IN NTSTATUS Status)
NTSTATUS NTAPI NtQueryVolumeInformationFile(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FsInformation, ULONG Length, FS_INFORMATION_CLASS FsInformationClass)
PULONG MinorVersion OPTIONAL
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_OBJECT_NAME_INVALID
_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
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
DWORD WINAPI GetLastError(void)
struct _FILE_FS_VOLUME_INFORMATION FILE_FS_VOLUME_INFORMATION
#define ERROR_PATH_NOT_FOUND
#define ERROR_NO_MORE_FILES
#define ERROR_DIR_NOT_ROOT
#define ERROR_FILENAME_EXCED_RANGE
_Inout_ PUNICODE_STRING LinkTarget