Доброго времени суток уважаемые. Ситуация такая: имеется ОС Виста(х32), имеется .INI файл с настройками, созданный моим приложением. данное приложение читает/пишет в него все ок. пытаюсь записать в него данные из другого процесса WritePrivateProfileString, ... результат = 0. вызываю GetLastError - получаю код ошибки 5h (ERROR_ACCESS_DENIED). процессы запущены без привилегий админа. как такое победить?
тоже уже думал об этом. как вы считаете - если я буду использовать MMF то у меня не возникнет таких же проблем как в #1?
sideX что ini что mmf, если оба приложения работают на чтение и запись то надо их синхронизировать IPC для согласованности данных ( ThreadSeafe) что бы не получилось чтения не до конца обновлённого елемента
Функции для работы с INI файлами можно без особого геморроя заменить функциями работы с реестром, что в принципе советует MSDN.
Первое приложение пытается записать .ini-файл в подкаталог "Program Files" ("C:\Program Files\MyApp\data.ini"), а туда запись запрещена настройками DACL. Поскольку у этого приложения отсутсвует манифест, система считает это приложение устаревшим и перенаправляет запись в "Virtual Store" ("%LocalAppData%\VirtualStore\Program Files\MyApp\data.ini"), что позволяет успешно выполнить сохранение данных. У второго приложения манифест имеется, и система считает, что оно достаточно осведомлено о правах доступа; перенаправление для него не используется. Выход предложил KeSqueer. Если же использование реестра по каким-то причинам не подходит, можно для сохранения данных использовать подкаталог в %AppData%.
всетаки решил использовать реестр. в висте хоть кому можно писать в HKCU\SOFTWARE\Microsoft\Internet Explorer\Low Rights
>Перенаправление можно включать/выключать принудительно. Например как? (Это не wow64-redirection здесь).
Например добавить манифест c requestedExecutionLevel. Это отключит виртуализацию. Теперь при попытке залезть куда нельзя, вместо перенаправления вылезет access denied. Для registry keys также есть специальный флаг REG_KEY_DONT_VIRTUALIZE
Sol_Ksacap Кстати, за виртуализацию, если не ошибаюсь, отвечает TokenVirtualizationEnabled у токена. Его можно установить через SetTokenInformation.