winapi с 64-битным числом в masm32

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


person Stan Kurilin    schedule 13.12.2009    source источник
comment
Разве это не доступное количество байтов на диске?   -  person Nifle    schedule 13.12.2009
comment
Какой язык вы используете? Покажите нам код..   -  person Nifle    schedule 13.12.2009
comment
Я использую masm32. Я исправляю проблему с чем-то, что вызывает GetDiskFreeSpaceEx, esi, 0, addr totalsize, 0, вызывает StrFormatByteSize64, totalsize, totalsize + 4, ADDR sizebuffer, SIZEOF totalsize -3   -  person Stan Kurilin    schedule 13.12.2009


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

person KernelJ    schedule 13.12.2009