Мне нужно определить размер логического тома и распечатать его. GetDiskFreeSpaceEx возвращает размер как 64-битное число (?). Что я могу с ним сделать?winapi с 64-разрядным номером в masm32
ответ
Вы можете делать все, что хотите, но это немного неудобно делать вычисления с помощью masm32. Вы должны иметь возможность заполнить любую другую структуру данных, которая использует 64-битные целые числа. Также возможно выполнить некоторые арифметические операции на 64 битах, таких как деление, путем загрузки значения в EDX: EAX (так что загрузите первые 4 байта в EAX, а следующие 4 в EDX). Однако будьте осторожны, что здесь возможно переполнение, которое необходимо обработать или избежать.
Если вы просто хотите, чтобы распечатать размер тома с помощью этой функции вы можете просто вызвать во время выполнения функции библиотеки PRINTF C:
invoke crt_printf,chr$("GetDiskFreeSpaceEx, total bytes: %I64d%c"),
dqTotalBytes,10
Однако, как сказано в руководстве «Для того, чтобы определить общее количество байтов на диске или томе, используйте IOCTL_DISK_GET_LENGTH_INFO. " Предыдущий код сообщает только, сколько доступно текущему пользователю.
Разве это не количество доступных байтов на диске? – Nifle
На каком языке вы используете? Покажите нам код .. – Nifle
Я использую MASM32 исправить проблемы с чем-то, что вызова GetDiskFreeSpaceEx ИЭР, 0, адр TotalSize, 0 вызова StrFormatByteSize64, TotalSize, TotalSize + 4, ADDR sizebuffer, SIZEOF TotalSize -3 –