36 (DosVolumeName ==
NULL) || (DosVolumeName->Buffer ==
NULL) || (DosVolumeName->MaximumLength == 0))
43 DosVolumeName->Length = 0;
136 WCHAR VolumeBuffer[
sizeof(
"\\Device\\Volume{01234567-89ab-cdef-0123-456789abcdef}")];
150 if (VolumeType & (VolumeType- 1))
162 sizeof(NameInfoBuffer),
175 if (cchFilePath < FinalLength + 1)
178 return FinalLength + 1;
193 sizeof(NameInfoBuffer) -
sizeof(
WCHAR),
207 if (cchFilePath < FinalLength + 1)
210 return FinalLength + 1;
223 if (PathSplit ==
NULL)
234 RelativePath.
Buffer = PathSplit + 1;
239 RtlInitEmptyUnicodeString(&
VolumeName, VolumeBuffer,
sizeof(VolumeBuffer));
243 DPRINT1(
"QueryDosVolumeNameForNtDeviceName failed: %lx\n",
Status);
252 if (cchFilePath < FinalLength + 1)
255 return FinalLength + 1;
282 VolumeLength =
wcslen(VolumeBuffer);
283 FinalLength = VolumeLength + (RelativePath.
Length /
sizeof(
WCHAR));
284 if (cchFilePath < FinalLength + 1)
287 return FinalLength + 1;
NTSTATUS NtQueryObject(IN HANDLE Handle, IN OBJECT_INFO_CLASS ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG ObjectInformationLength, OUT PULONG ReturnLength)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
#define ERROR_INVALID_HANDLE
#define FILE_ATTRIBUTE_NORMAL
DWORD WINAPI GetFinalPathNameByHandleW(_In_ HANDLE hFile, _Out_writes_(cchFilePath) LPWSTR lpszFilePath, _In_ DWORD cchFilePath, _In_ DWORD dwFlags)
static NTSTATUS QueryDosVolumeNameForNtDeviceName(_In_ PCUNICODE_STRING DeviceName, _Inout_ PUNICODE_STRING DosVolumeName)
NTSTATUS RtlAppendUnicodeToString(IN PUNICODE_STRING Str1, IN PWSTR Str2)
_Must_inspect_result_ _Inout_opt_ PUNICODE_STRING VolumeName
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define OBJ_CASE_INSENSITIVE
BOOL WINAPI GetVolumeNameForVolumeMountPointW(IN LPCWSTR VolumeMountPoint, OUT LPWSTR VolumeName, IN DWORD VolumeNameLength)
struct _MOUNTMGR_TARGET_NAME * PMOUNTMGR_TARGET_NAME
#define IOCTL_MOUNTMGR_QUERY_DOS_VOLUME_PATH
struct _MOUNTMGR_VOLUME_PATHS * PMOUNTMGR_VOLUME_PATHS
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
NTSYSAPI NTSTATUS NTAPI NtQueryInformationFile(IN HANDLE hFile, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass)
NTSYSAPI NTSTATUS NTAPI NtDeviceIoControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
#define STANDARD_RIGHTS_READ
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
#define RTL_CONSTANT_OBJECT_ATTRIBUTES(n, a)
static OUT PIO_STATUS_BLOCK IoStatusBlock
DWORD BaseSetLastNTError(IN NTSTATUS Status)
#define RTL_CONSTANT_STRING(s)
#define RtlCopyMemory(Destination, Source, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
DWORD WINAPI GetLastError(void)
#define ERROR_PATH_NOT_FOUND
_In_ PVOID _Out_opt_ PULONG_PTR _Outptr_opt_ PCUNICODE_STRING * ObjectName