OBJECT_ATTRIBUTES ObjectAttributes;
HANDLE FileHandle;
IO_STATUS_BLOCK Iosb;
- PVOID Buffer;
ULONG BufferLength;
PMOUNTDEV_NAME MountDevName;
PMOUNTMGR_MOUNT_POINT MountPoint;
PMOUNTMGR_MOUNT_POINTS MountPoints;
ULONG Index;
PUCHAR SymbolicLinkName;
+ BOOL Result;
NTSTATUS Status;
/*
BufferLength = sizeof(MOUNTDEV_NAME) + 50 * sizeof(WCHAR);
do
{
- MountDevName = Buffer = RtlAllocateHeap(GetProcessHeap(), 0, BufferLength);
- if (Buffer == NULL)
+ MountDevName = RtlAllocateHeap(GetProcessHeap(), 0, BufferLength);
+ if (MountDevName == NULL)
{
NtClose(FileHandle);
- SetLastErrorByStatus(Status);
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
Status = NtDeviceIoControlFile(FileHandle, NULL, NULL, NULL, &Iosb,
IOCTL_MOUNTDEV_QUERY_DEVICE_NAME,
- NULL, 0, Buffer, BufferLength);
- if (Status == STATUS_BUFFER_OVERFLOW)
+ NULL, 0, MountDevName, BufferLength);
+ if (!NT_SUCCESS(Status))
{
- BufferLength = sizeof(MOUNTDEV_NAME) + MountDevName->NameLength;
- RtlFreeHeap(GetProcessHeap(), 0, Buffer);
- continue;
- }
- else if (!NT_SUCCESS(Status))
- {
- RtlFreeHeap(GetProcessHeap(), 0, Buffer);
- NtClose(FileHandle);
- SetLastErrorByStatus(Status);
- return FALSE;
+ RtlFreeHeap(GetProcessHeap(), 0, MountDevName);
+ if (Status == STATUS_BUFFER_OVERFLOW)
+ {
+ BufferLength = sizeof(MOUNTDEV_NAME) + MountDevName->NameLength;
+ continue;
+ }
+ else
+ {
+ NtClose(FileHandle);
+ SetLastErrorByStatus(Status);
+ return FALSE;
+ }
}
}
while (!NT_SUCCESS(Status));
BufferLength = sizeof(MOUNTMGR_MOUNT_POINTS);
do
{
- MountPoints = Buffer = RtlAllocateHeap(GetProcessHeap(), 0, BufferLength);
- if (Buffer == NULL)
+ MountPoints = RtlAllocateHeap(GetProcessHeap(), 0, BufferLength);
+ if (MountPoints == NULL)
{
RtlFreeHeap(GetProcessHeap(), 0, MountPoint);
NtClose(FileHandle);
- SetLastErrorByStatus(Status);
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
Status = NtDeviceIoControlFile(FileHandle, NULL, NULL, NULL, &Iosb,
IOCTL_MOUNTMGR_QUERY_POINTS,
MountPoint, MountPointSize,
- Buffer, BufferLength);
- if (Status == STATUS_BUFFER_OVERFLOW)
- {
- BufferLength = MountPoints->Size;
- RtlFreeHeap(GetProcessHeap(), 0, Buffer);
- continue;
- }
- else if (!NT_SUCCESS(Status))
+ MountPoints, BufferLength);
+ if (!NT_SUCCESS(Status))
{
- RtlFreeHeap(GetProcessHeap(), 0, MountPoint);
- RtlFreeHeap(GetProcessHeap(), 0, Buffer);
- SetLastErrorByStatus(Status);
- return FALSE;
+ RtlFreeHeap(GetProcessHeap(), 0, MountPoints);
+ if (Status == STATUS_BUFFER_OVERFLOW)
+ {
+ BufferLength = MountPoints->Size;
+ continue;
+ }
+ else if (!NT_SUCCESS(Status))
+ {
+ RtlFreeHeap(GetProcessHeap(), 0, MountPoint);
+ NtClose(FileHandle);
+ SetLastErrorByStatus(Status);
+ return FALSE;
+ }
}
}
while (!NT_SUCCESS(Status));
(PUCHAR)MountPoints + MountPoint->SymbolicLinkNameOffset,
MountPoint->SymbolicLinkNameLength);
VolumeName[1] = L'\\';
- RtlFreeHeap(GetProcessHeap(), 0, MountPoints);
- return TRUE;
+ Result = TRUE;
+ }
+ else
+ {
+ SetLastError(ERROR_FILENAME_EXCED_RANGE);
+ Result = FALSE;
}
RtlFreeHeap(GetProcessHeap(), 0, MountPoints);
- SetLastError(ERROR_FILENAME_EXCED_RANGE);
- return FALSE;
+ return Result;
}
}
}