Vista + .ini файл

Тема в разделе "WASM.WIN32", создана пользователем sideX, 5 июн 2010.

  1. sideX

    sideX New Member

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

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    sideX
    он в монопольном доступе.
    синхронизуруй доступ через какое нить IPC
     
  3. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    тоже уже думал об этом. как вы считаете - если я буду использовать MMF то у меня не возникнет таких же проблем как в #1?
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    что в Вашей терминологии означает MMF
     
  5. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    Memory Mapped Files
     
  6. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    sideX
    что ini что mmf, если оба приложения работают на чтение и запись то надо их синхронизировать IPC
    для согласованности данных ( ThreadSeafe)
    что бы не получилось чтения не до конца обновлённого елемента
     
  7. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Функции для работы с INI файлами можно без особого геморроя заменить функциями работы с реестром, что в принципе советует MSDN.
     
  8. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    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

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    всетаки решил использовать реестр. в висте хоть кому можно писать в HKCU\SOFTWARE\Microsoft\Internet Explorer\Low Rights
     
  10. sideX

    sideX New Member

    Публикаций:
    0
    Регистрация:
    9 июн 2009
    Сообщения:
    57
    всем спасибо за внимание
     
  11. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Перенаправление можно включать/выключать принудительно.
     
  12. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    >Перенаправление можно включать/выключать принудительно.
    Например как? (Это не wow64-redirection здесь).
     
  13. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Например добавить манифест c requestedExecutionLevel. Это отключит виртуализацию. Теперь при попытке залезть куда нельзя, вместо перенаправления вылезет access denied.

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

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Sol_Ksacap
    Кстати, за виртуализацию, если не ошибаюсь, отвечает TokenVirtualizationEnabled у токена.
    Его можно установить через SetTokenInformation.