В Windows (предположим, начиная с 2000 года) длина файла может составлять не более 32767 символов. Это ограничение существует из-за внутренней обработки с UNICODE_STRING в собственном API (также со стороны ядра, в драйверах и т.д.). Все идет нормально. Я знаю теорию этой части.
Причиной ограничения является то, что члены Length и MaximumLength UNICODE_STRING подсчитывают количество байтов в Buffer, но представляют собой 16-битные беззнаковые целые числа.
Я также знаю, почему предел является приближением, а не установленным пределом. Это происходит главным образом из-за того, как ваше имя файла (например, \\.\C:\boot.ini) разрешается в его родной форме (например, \??\C:\boot.ini), а затем на то, что префикс имени фактического имени устройства, а затем путь по отношению к этому тому, например \Device\HarddiskVolume2\boot.ini.
Кроме того, из Проводника Windows известный симптом при достижении предела ( "ANSI" ) MAX_PATH заключается в том, чтобы притворяться, что файл или папка не существует в некоторых версиях Windows (возможно, это было исправлено в какой-то момент).
Но что происходит в диспетчере объектов, диспетчере ввода-вывода и уровне драйверов файловой системы, соответственно, когда я вызываю CreateFile() с контуром, который выглядит как \\.\C:\...\filename.ext, и весь путь не превышает предел, но достигает его, в моем обращении к kernel32.dll CreateFile(), а затем расширяется?...
Ни SDK, ни WDK не кажутся особенно болтливыми по этой теме. Или я смотрел в неправильные разделы?