Мне нужно определить размер логического тома и распечатать его. GetDiskFreeSpaceEx возвращает размер как 64-битное число (?). Что я могу с этим сделать?
winapi с 64-битным числом в masm32
Ответы (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." Предыдущий код только говорит вам, сколько из них доступно текущему пользователю.