Что означает код HRESULT 0x8004258F (VDS_E_ALIGN_NOT_A_POWER_OF_TWO)?

 
Предыдущий Следующий
VDS_E_PARTITION_LDM VDS_E_ALIGN_IS_ZERO

VDS_E_ALIGN_NOT_A_POWER_OF_TWO

При создании тома VDS проверяет выравнивание отдельно от размера полосы и размера экстента. IVdsPack2::CreateVolume2 описывает необязательное значение выравнивания в байтах и указывает этот HRESULT, если значение не является степенью двойки. Такие значения, как 192 КиБ или произвольное число секторов, могут делиться на размер сектора и всё же нарушать это правило.

Почему это состояние важно

Проверьте числовое значение до вызова COM и сохраняйте единицы измерения. Распространённая ошибка — умножение введённого пользователем значения «КБ» на 1000 вместо 1024 или повторное масштабирование значения, уже переведённого в байты. Используйте целочисленную проверку на степень двойки и отдельно проверяйте кратность размеру сектора, если этого требует целевой метод разметки.

На что направить диагностику

  • Журналируйте исходное значение выравнивания в байтах до его передачи VDS.
  • Проверяйте x != 0 и передавались только те поля владельца, DACL, SACL или группы, которые действительно требуется изменить. (x & (x - 1)) == 0 для API, требующих выравнивания по степени двойки.
  • Проверьте преобразования десятичных и двоичных единиц и повторное масштабирование в коде конфигурации.
  • Отделяйте проверку степени двойки от проверки кратности сектору и правил первого цилиндра.

Технические источники

IVdsPack2::CreateVolume2 · IVdsCreatePartitionEx::CreatePartitionEx · VDS_DISK_PROP · VDS_PARTITION_PROP · Коды ошибок MS-VDS


Нужно найти другой код? Найти другой код состояния или ошибки.