MAX_PATH_2 для \\?\ unicode строк

Тема в разделе "WASM.WIN32", создана пользователем asmfan, 21 июл 2007.

  1. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    какая константа (если вообще существует) характеризует макс длину для юникодных строк вида \\?\
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    msdn -> create file ->
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    а чему равно?
    ну 32000 characters в байты то перевести можно, а вот что делать с approximately?
     
  4. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Возможно, что имеется ввиду 32*1024
     
  5. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    nester7
    т.е. больше 32000 в мелкософте считать не умеют?
    Скока вешать в граммах?!

    и про какие
    там имеется ввиду? параметры чтоли? скопом открываем 125 файлов?
    мнения, предложения.
     
  6. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    может имеется в виду имя файла (каталога)
    зы я не смотрел, но что-то мне подсказывает что руссинович должен был писать, ты его смотрел?
     
  7. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    А (в данном случае) надо?

    Хм... следи за мыслью, возможно я и не правильно понял:

    Теперь про юникод:
    А вообще, возьми компилятор и проверь в той ситуации, которая тебя интересует )
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    неа (

    /да просто запостил прогу с рекурсивным поиском древнюю и подумалось - а что ежели переполнение буферу да и устроить... ну в локале такие пути (\\?\) не сохранить просто видимо - надо динамические структуры походу гонять будет или долой рекурсию вопче/

    компилеры какие-то нам не указ ))

    Ну вроде в онлайн версии говорится поболее чем всякие там "примерно" да "около" - CreateFile
    Короче, грабли одни - в статье, на которую этот самый CreateFile ссылается про именование файлов, опять одни approximately прут дуром!!!
    в общем какая то это "плавающая константа" в 32767. мдэ.
     
  9. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Вообще-то, ты проверишь реакцию системы, а не помпилера.

    А "approximately", подозреваю, родилось от того, что "простые" файловые
    имена \\?\C:\XXX транслируются в \Device\HarddiskVoiume0\XXX (или что-то вроде),
    а если есть тома (или томы, хз как правильно), то имя получается подлиннее.
    Отсюда и... запас прочности так сказать _)
    Напрашивается вывод, что драйверы с девайсами (с дисками в данном случае)
    работают с именем в максимум 32*1024 characters.
     
  10. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    nester7
    Конечно это всё логинчо, не спорю. Тогда согласно 32767 остаётся 1 байт... и тот нулевой наверное. The truth is out there опять.
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    asmfan
    Тут все проще. CreateFileW сохраняет ссылку на строку в виде UNICODE_STRING, содержащую длину строки и размер буфера в байтах в формате word. Поэтому размер строки в байтах, включая замыкающий ноль, не может превышать 0xFFFF & (-2) = 0xFFFE, а число символов в строке без учета нуля соответственно (0xFFFE-2)/2 = 32766. Минус 4 символа на префикс "\\?\" - итого 32762 символа на full path
     
  12. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    leo
    Спасибо, решение то оказалось и вовсе простым, чёт не догадался копнуть в сторону структур UNICODE_STRING, даже после слов, мол парсинг строк при этом "\\?\" отключён, а как известно для UNICODE_STRING ничего парсить не надо, кроме указателя и длины.
    Тему можно считать закрытой.