AF
Size: a a a
m
m
DRIVE_LAYOUT_INFORMATION_EX
*` на хипе?new DRIVE_LAYOUT_INFORMATION_EX
, то это не решение, так как api будет писать за границами объекта.m
DRIVE_LAYOUT_INFORMATION_EX
. А для того чтобы прочитать все остальное формально надо изголяться с чем-нибудь вроде bit_cast
, который работает через копирование. Других честных решений я не придумал.D
DRIVE_LAYOUT_INFORMATION_EX
. А для того чтобы прочитать все остальное формально надо изголяться с чем-нибудь вроде bit_cast
, который работает через копирование. Других честных решений я не придумал.DRIVE_LAYOUT_INFORMATION_EX
и потом до конца буфера - для PARTITION_INFORMATION_EX
, которые идут хвостикомm
DRIVE_LAYOUT_INFORMATION_EX
и потом до конца буфера - для PARTITION_INFORMATION_EX
, которые идут хвостикомD
DeviceIoControl
не позволит получить число объектов сразу, придется её (по рекомендации с MSDN) вызывать в цикле, удваивая размер буфера. Вопрос целесообразности остаётся открытымm
DeviceIoControl
не позволит получить число объектов сразу, придется её (по рекомендации с MSDN) вызывать в цикле, удваивая размер буфера. Вопрос целесообразности остаётся открытым(size - sizeof(_DRIVE_LAYOUT_INFORMATION_EX)) / sizeof(PARTITION_INFORMATION_EX)
А так я люблю порассуждать о UB, потому что стараюсь писать портируемый код. Но если приходится пользоваться низкоуровневыми штуками специфичными для платформы, я готов гораздо больше полагаться на особенности реализации.D
(size - sizeof(_DRIVE_LAYOUT_INFORMATION_EX)) / sizeof(PARTITION_INFORMATION_EX)
А так я люблю порассуждать о UB, потому что стараюсь писать портируемый код. Но если приходится пользоваться низкоуровневыми штуками специфичными для платформы, я готов гораздо больше полагаться на особенности реализации.D
RtlCopyMemory
, а в текущей реализации это std::memcpy
=> в C++20 считается инициализацией для trivially_copyable
типов, в более ранних - формально UB, но работает