Работа с файлами с длиной овер MAX_PATH

Тема в разделе "WASM.WIN32", создана пользователем nullPtr, 26 ноя 2020.

Метки:
  1. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Блиц вопрос. Ни как не могу понять в чем ошибка:
    CopyFileW(L"\\\\?\\C:\..", L"C:\\data.txt", FALSE);

    Ошибка в том, что в первом аргументе я задаю путь овер MAX_PATH и он не робит. А если меньше, то робит. Хотя префикс в двух случаях поставлен "\\\\?\\"

    123 ошибка выводит.
    В чем трабл может быть?
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Ну 123 ошибка - это ERROR_INVALID_NAME, многие функции в венде предполагают, что пути не превышают MAX_PATH, может с этим связано. Зачем тебе "\\\\?\\"? Можно попробовать GetShortPathName, может он влезет в MAX_PATH, это тупо канеш, но мало ли.
     
  3. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    не, как раз так и мне нужно использовать длинный путь. И использовал самый минимальный, а так длина превышает вообще 5-6 раза больше MAX_PATH
    https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-copyfile
    на msdn написано, что "\\\\?\\" надо именно тип для овер MAX_PATH.
    Есть ли еще другие способы/методы?
    --- Сообщение объединено, 26 ноя 2020 ---
    p.s. а вообще мне надо прочитать файл, которым другая прога не хочет делится. Запрещен доступ к чтению. Вот и надо скопировать или можете предложить что-нибудь другое?
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Есть интересный сайд-эффект у этого, может в нем дело:
     
  5. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    как раз так и фишка у меня в самых '.' и '..'
    Предполагаю, что C:\\Data\\..\\Data удаляет '..' и у меня остается С:\\Data\\\\Data
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Path Traversal баг штоль эксплойтишь?
    --- Сообщение объединено, 26 ноя 2020 ---
    Может попробовать сделать GetFullPathName перед CopyFile?
     
  7. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    ага. Но знаешь, там у меня вообще очень длинный. Просто на глаз не разберешь куда идти. А на счет авер хуков хз

    Rel, можем в ПМ списаться? У меня есть некая идея. Хотел поинтересоваться не публично
    --- Сообщение объединено, 26 ноя 2020 ---
    очень боюсь, что GetFullPathName может урезать главную фишечку. Хотя могу даже щас потестить
     
    Последнее редактирование: 26 ноя 2020
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Ох уж эти ваши блекушные приваты).
     
  9. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Протестил.
    GetFullPathName - урезает "." и ".."

    т.е. C:\\Data\\..\\Data - получится C:\\Data\\
    --- Сообщение объединено, 26 ноя 2020 ---
    да лан те Рел) Не такой уж приват, прост потенциально-то приват) Сам понимаешь, такая инфа на вес золота
     
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Да, смотри не спали никому больше, это будет наш с тобой превад, особенно аверам всяким, типа Инди.
     
    nullPtr нравится это.
  11. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    ага) уже бабки будут крутиться завтра, бешенные)
     
  12. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Непойму, приват в том, шо имя директории '..' будет обозначать переход на каталог вверх и удалять всё чо до слеша слева?
     
  13. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    та не. Это фигня же. Там о другом как бы
     
  14. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Не-не, не примазывайся.
     
  15. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Rel, кстати лет 8 назад трещген кодил зиродей, который отправлял картинку через магент, и удалял все, что в каталоге выше.
     
  16. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    Кстати, да, только то не картинка была по идее, а dll, например, которую mra мог впилить в любую директорию по заранее известному пути
     
  17. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Да великий был человек, а сейчас скатился до примазывания к чужим зиродей рцешкам.
     
    q2e74 нравится это.
  18. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    проблема решена.

    Длина символа оказывается не была у меня больше 260

    Все дело вот в чем:

    C:\\..\\C:\\Windows\\..\\Windows
    ->исправил на
    C:\\Windows\\..\\Windows

    т.е. в самом первом префиксе была ошибка "C:\\..\\C:\\"
    Но в проводнике все воркает.

    Рел, там крч даже создат папку овер 260 символов венда не позволит оказыватеся.