Get Uset Temp Path

Тема в разделе "WASM.BEGINNERS", создана пользователем Raznid, 2 апр 2010.

  1. Raznid

    Raznid New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2010
    Сообщения:
    3
    Гугл сказал- в этой проблемме ты не одинок, но ответа не дал(мб непрально составил запрос на поиск)

    Подскажите пожалуйста как получить путь(естественно с помощью асма ;) ) до Temp каталога в винде и еще что бы он был обязательно в "X:\Documents and Settings\User...."
    Использование GetTempPath - не дало положительных результатов так как нужна папка в которую б можно было 100% записать временные файлы(как Temp...InternetFiles), а GetTempPath иногда возвращает уж очень "плохие" пути к примеру "X:\Temp" или "X:\WINDOWS\Temp" а туда записывать могут не все, а только администраторы.
    PS:Записывать в каталог программы нельзя так как она расположенна в программфайзах и изменение файлов там запрещенно что бы ничего лишнего не сотворили пользователи ;)
    PPS: ну и самое последнее хорошо что б эта функция была рабочей и на свиста/win7(но не обязательно)
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    PEB.ProcessParameters.Environment и апи что этот блок юзают, типо GetEnvironmentStrings().
     
  3. Raznid

    Raznid New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2010
    Сообщения:
    3
    Clerk
    Спасибо :)
    (на заметку)
    сейчас протестил
    GetTempPathW (Unicode) и GetTempPathA (ANSI)
    Странная вещь получается при юникодовском вызове возвращает системную переменную при анси вызове возвращает пользовательский темп
     
  4. VaZoNeZ

    VaZoNeZ New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2009
    Сообщения:
    121
    Дык а GetTempPath разве не PEB юзает? Тетя Олли говорит, что юзают именно его.
     
  5. deshiko

    deshiko New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    42
    Код (Text):
    1.     DWORD dwRetVal = 0;                        
    2.     TCHAR lpTempPathBuffer[MAX_PATH];          
    3.  
    4.     dwRetVal = GetTempPath(MAX_PATH, lpTempPathBuffer);
    5.    
    6.     if ( (dwRetVal > MAX_PATH) || (dwRetVal == 0))  return FALSE;
    Вот код который я применял в dll работающей от имени explorer.exe. Всегда возвращал %USERPROFILE%\AppData\Local\Temp.
     
  6. VaZoNeZ

    VaZoNeZ New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2009
    Сообщения:
    121
    Тут наверно проблема в самих переменных окружения - у кого как они заданы, так GetTempPath и возвращает.

    Вот что г-рит вики:
    Т.е. выходит, чтобы получить юзерский темп, нужно вызвать GetEnvironmentVariable("TMP", ...)
     
  7. Raznid

    Raznid New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2010
    Сообщения:
    3
    Хм... вообщем в винде переменная Темп есть и пользовательская и системная....
    deshiko спасибо за сырец ;)

    Вопрос закрыт - спасибо всем =)