2009-12-13 3 views
0

Мне нужно определить размер логического тома и распечатать его. GetDiskFreeSpaceEx возвращает размер как 64-битное число (?). Что я могу с ним сделать?winapi с 64-разрядным номером в masm32

+0

Разве это не количество доступных байтов на диске? – Nifle

+0

На каком языке вы используете? Покажите нам код .. – Nifle

+0

Я использую MASM32 исправить проблемы с чем-то, что вызова GetDiskFreeSpaceEx ИЭР, 0, адр TotalSize, 0 вызова StrFormatByteSize64, TotalSize, TotalSize + 4, ADDR sizebuffer, SIZEOF TotalSize -3 –

ответ

1

Вы можете делать все, что хотите, но это немного неудобно делать вычисления с помощью 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. " Предыдущий код сообщает только, сколько доступно текущему пользователю.