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;
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
#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 GetVolumePathNameA(IN LPCSTR lpszFileName, IN LPSTR lpszVolumePathName, IN DWORD cchBufferLength)
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)
_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)
static OUT PIO_STATUS_BLOCK IoStatusBlock
#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)
#define SYMBOLIC_LINK_QUERY
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)
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)
struct _FILE_FS_VOLUME_INFORMATION FILE_FS_VOLUME_INFORMATION
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)
#define ERROR_PATH_NOT_FOUND
#define ERROR_NO_MORE_FILES
#define ERROR_DIR_NOT_ROOT
#define ERROR_FILENAME_EXCED_RANGE
_Inout_ PUNICODE_STRING LinkTarget