Vista + .ini файл

Discussion in 'WASM.WIN32' started by sideX, Jun 5, 2010.

  1. sideX

    sideX New Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2009
    Messages:
    57
    Доброго времени суток уважаемые.
    Ситуация такая: имеется ОС Виста(х32), имеется .INI файл с настройками, созданный моим приложением. данное приложение читает/пишет в него все ок. пытаюсь записать в него данные из другого процесса WritePrivateProfileString, ... результат = 0. вызываю GetLastError - получаю код ошибки 5h (ERROR_ACCESS_DENIED). процессы запущены без привилегий админа.
    как такое победить?
     
  2. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    sideX
    он в монопольном доступе.
    синхронизуруй доступ через какое нить IPC
     
  3. sideX

    sideX New Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2009
    Messages:
    57
    тоже уже думал об этом. как вы считаете - если я буду использовать MMF то у меня не возникнет таких же проблем как в #1?
     
  4. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    что в Вашей терминологии означает MMF
     
  5. sideX

    sideX New Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2009
    Messages:
    57
    Memory Mapped Files
     
  6. wsd

    wsd New Member

    Blog Posts:
    0
    Joined:
    Aug 8, 2007
    Messages:
    2,824
    sideX
    что ini что mmf, если оба приложения работают на чтение и запись то надо их синхронизировать IPC
    для согласованности данных ( ThreadSeafe)
    что бы не получилось чтения не до конца обновлённого елемента
     
  7. KeSqueer

    KeSqueer Сергей

    Blog Posts:
    0
    Joined:
    Jul 19, 2007
    Messages:
    1,183
    Location:
    Москва
    Функции для работы с INI файлами можно без особого геморроя заменить функциями работы с реестром, что в принципе советует MSDN.
     
  8. Sol_Ksacap

    Sol_Ksacap Миша

    Blog Posts:
    0
    Joined:
    Mar 6, 2008
    Messages:
    623
    Первое приложение пытается записать .ini-файл в подкаталог "Program Files" ("C:\Program Files\MyApp\data.ini"), а туда запись запрещена настройками DACL. Поскольку у этого приложения отсутсвует манифест, система считает это приложение устаревшим и перенаправляет запись в "Virtual Store" ("%LocalAppData%\VirtualStore\Program Files\MyApp\data.ini"), что позволяет успешно выполнить сохранение данных. У второго приложения манифест имеется, и система считает, что оно достаточно осведомлено о правах доступа; перенаправление для него не используется.

    Выход предложил KeSqueer. Если же использование реестра по каким-то причинам не подходит, можно для сохранения данных использовать подкаталог в %AppData%.
     
  9. sideX

    sideX New Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2009
    Messages:
    57
    всетаки решил использовать реестр. в висте хоть кому можно писать в HKCU\SOFTWARE\Microsoft\Internet Explorer\Low Rights
     
  10. sideX

    sideX New Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2009
    Messages:
    57
    всем спасибо за внимание
     
  11. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Перенаправление можно включать/выключать принудительно.
     
  12. Sol_Ksacap

    Sol_Ksacap Миша

    Blog Posts:
    0
    Joined:
    Mar 6, 2008
    Messages:
    623
    >Перенаправление можно включать/выключать принудительно.
    Например как? (Это не wow64-redirection здесь).
     
  13. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Например добавить манифест c requestedExecutionLevel. Это отключит виртуализацию. Теперь при попытке залезть куда нельзя, вместо перенаправления вылезет access denied.

    Для registry keys также есть специальный флаг REG_KEY_DONT_VIRTUALIZE
     
  14. Partner

    Partner Павел

    Blog Posts:
    0
    Joined:
    Feb 28, 2008
    Messages:
    917
    Location:
    Los Angeles
    Sol_Ksacap
    Кстати, за виртуализацию, если не ошибаюсь, отвечает TokenVirtualizationEnabled у токена.
    Его можно установить через SetTokenInformation.