• XSS.stack #1 – первый литературный журнал от юзеров форума

C++ Отказано в доступе при написании в файл

sect adept

(L3) cache
Пользователь
Регистрация
19.02.2022
Сообщения
280
Решения
3
Реакции
73
Приветствую. Столкнулся с проблемой, что с помощью WinApi пытаюсь открыть файл на чтение и запись, чтобы прочитать эти данные и записать в файл. Проблема заключается в том, что если директория находится в Program Files, то GetLastError() дает значение 5 при попытке открыть файл и записать, собственно, отказано в доступе. Запускаюсь от имени админа, даже от системы пробовал, но все четно. Как можно фиксануть это через код или никак не пофиксить эту проблему через код, а только вручную назначать файлам привеилегии?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Как же вы меня все тригерите старички). Уже даже ты, в реальности wstr для мультиланга нужно. У меня же системные пути где онли англ символы, кст даже в стилере без wstr у арабов все папочки видит с рандом именем юзернейма. Поясни мне дауну за wstr, просто проблем не было
Вот у тебя в пути только англ символы, но ты тут раздаешь свои авторитетные советы забить на юникод и везде анси строки использовать. У тебя почему-то не возникает мысли, что другим людям нужно нормальный код писать, который будет работать в "мультиланге".

"Анси" кодировок куча и они разные, даже в русском acp и oemcp - две разные кодировки. Чтобы что-то передать по сети в унифицированном виде (не как гавнокодеры делают, а нормально), тебе надо будет для каждой из них иметь конвертер в UTF-8, или средствами системы конвертировать два раза: ACP в UTF-16, а UTF-16 в UTF-8.

Не говоря уже о том, что ядро "юникодное", и когда ты вызываешь "анси" версии апи-функций ты по сути два раза конвертируешь эти строки на входе и на выходе из апи.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Можно оборачивать строки в макрос TEXT(), тогда не прийдётся писать L перед обьявлением каждой строки. Фишка в том, что решается вопрос с потртабельностью, если проект кросплатформенный, т.к в никсах всё в utf-8 и utf-16le там не используется
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Отключить UAC, может быть. Альтернативно ты можешь использовать IFileOperation, он вывалит пользователю окошко, которое он (может быть) прокликает.
Можно и без уака при условии, что код выполняется в эксплорере, если я не ошибаюсь
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Приветствую. Столкнулся с проблемой, что с помощью WinApi пытаюсь открыть файл на чтение и запись, чтобы прочитать эти данные и записать в файл. Проблема заключается в том, что если директория находится в Program Files, то GetLastError() дает значение 5 при попытке открыть файл и записать, собственно, отказано в доступе. Запускаюсь от имени админа, даже от системы пробовал, но все четно. Как можно фиксануть это через код или никак не пофиксить эту проблему через код, а только вручную назначать файлам привеилегии?
Скорее всего файл уже открыт другим приложением без флагов FILE_SHARE_READ и FILE_SHARE_WRITE. Тебе нужно убить это приложение, найди PID через Restart Manager
 
Вот у тебя в пути только англ символы, но ты тут раздаешь свои авторитетные советы забить на юникод и везде анси строки использовать. У тебя почему-то не возникает мысли, что другим людям нужно нормальный код писать, который будет работать в "мультиланге".

"Анси" кодировок куча и они разные, даже в русском acp и oemcp - две разные кодировки. Чтобы что-то передать по сети в унифицированном виде (не как гавнокодеры делают, а нормально), тебе надо будет для каждой из них иметь конвертер в UTF-8, или средствами системы конвертировать два раза: ACP в UTF-16, а UTF-16 в UTF-8.

Не говоря уже о том, что ядро "юникодное", и когда ты вызываешь "анси" версии апи-функций ты по сути два раза конвертируешь эти строки на входе и на выходе из апи.
На майсах есть статья где с 2019 года char может быть в юникоде, т.е с 10 винды. Если все хотят писать кросс винды для старых, то им это нужно. А так юникод строки почти не нужны. Даже exception выводит в char. Каждый понимает под что он пишет.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
На майсах есть статья где с 2019 года char может быть в юникоде, т.е с 10 винды. Если все хотят писать кросс винды для старых, то им это нужно. А так юникод строки почти не нужны. Даже exception выводит в char. Каждый понимает под что он пишет.
Че ты несешь? Дружище, не позорься
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Дружище, не позорься
К сожалению, уже поздно, прецеденты такие уже были ни один раз))
 
Че ты несешь? Дружище, не позорься
Посмотри документацию, и проверь сам и сравни. Char начиная с 10 винды уже нормально работает с разными языками. Сделай арабское имя юзера папки и тд, сравни различия при этом конвертируя char в wstr, wstr в char, или просто выведи их, разницы не будет. Я сравнивал смотрел вчера, разница была в wine онли где винда на уровне хп / 7. Там кол-во символов отличалось.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Посмотри документацию, и проверь сам и сравни. Char начиная с 10 винды уже нормально работает с разными языками. Сделай арабское имя юзера папки и тд, сравни различия при этом конвертируя char в wstr, wstr в char, или просто выведи их, разницы не будет. Я сравнивал смотрел вчера, разница была в wine онли где винда на уровне хп / 7. Там кол-во символов отличалось.
Вот ты прочитал то, что я написал, и типа нихера не понял штоле? Вся твоя проблема с отсутствием опыта в принципе. После того, как ты в достаточной степени прострадаешь с анси кодировками на венде, ты сам дойдешь до того, что надо было utf-16 использовать изначально.

Как бы то, что ты там и как у себя пишешь, особо никого не волнует, пиши там своими драгоценными char'ами свои арабские стиллеры. Но когда ты начинаешь давать вредные советы, еще и доказывать всем очевидно ошибочные мнения, придется смириться, что тебя будут в них ткать носом и писать сообщения из серии "не позорься". Это неизбежно.
 
Вот ты прочитал то, что я написал, и типа нихера не понял штоле? Вся твоя проблема с отсутствием опыта в принципе. После того, как ты в достаточной степени прострадаешь с анси кодировками на венде, ты сам дойдешь до того, что надо было utf-16 использовать изначально.

Как бы то, что ты там и как у себя пишешь, особо никого не волнует, пиши там своими драгоценными char'ами свои арабские стиллеры. Но когда ты начинаешь давать вредные советы, еще и доказывать всем очевидно ошибочные мнения, придется смириться, что тебя будут в них ткать носом и писать сообщения из серии "не позорься". Это неизбежно.
Я TCHAR юзаю который легко в юникод переделывается для такого ,при компиляции. А так реал не разу не страдал от этого. Буду иметь в виду.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вот ты прочитал то, что я написал, и типа нихера не понял штоле? Вся твоя проблема с отсутствием опыта в принципе. После того, как ты в достаточной степени прострадаешь с анси кодировками на венде, ты сам дойдешь до того, что надо было utf-16 использовать изначально.

Как бы то, что ты там и как у себя пишешь, особо никого не волнует, пиши там своими драгоценными char'ами свои арабские стиллеры. Но когда ты начинаешь давать вредные советы, еще и доказывать всем очевидно ошибочные мнения, придется смириться, что тебя будут в них ткать носом и писать сообщения из серии "не позорься". Это неизбежно.
А всё потому, что надо не крипты за 40 баксов продавать, а умные книжки читать. Меня крайне удивляет этот человек, почти в каждой технической теме даёт вредительские советы и спорит с другими без понимания предмета, спорит до посинения вместо того чтобы провести собственный ресерч или почитать, что пишут в интернете по этоу поводу
 
А всё потому, что надо не крипты за 40 баксов продавать, а умные книжки читать. Меня крайне удивляет этот человек, почти в каждой технической теме даёт вредительские советы и спорит с другими без понимания предмета, спорит до посинения вместо того чтобы провести собственный ресерч или почитать, что пишут в интернете по этоу поводу
Книжки читать, или делать на практике сразу. Если ты сразу читал книгу то ты будешь знать с чем сталкивались другие, а я нихочу знать, хочу сам столкнутся, сам исправить. Советы далеко не вредные, смотря как на них посмотреть.
 
Скорее всего файл уже открыт другим приложением без флагов FILE_SHARE_READ и FILE_SHARE_WRITE. Тебе нужно убить это приложение, найди PID через Restart Manager
Стилю токен у системы через процесс winlogon.exe, запускаю компию проги от системы. Пытаюсь получить доступ к то же директории C:/Program Files/Internet Explorer - в нем изменить содержимое файлов, не изменяется и GetLastError говорит ошибку 5 - отказ в доступе. Собственно, Internet Explorer ни где не открыт проверял.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Стилю токен у системы через процесс winlogon.exe, запускаю компию проги от системы. Пытаюсь получить доступ к то же директории C:/Program Files/Internet Explorer - в нем изменить содержимое файлов, не изменяется и GetLastError говорит ошибку 5 - отказ в доступе. Собственно, Internet Explorer ни где не открыт проверял.
Тебе нужен не токен системы, а токен Trusted Installer в этом случае, это же файлы системного компонента. Попробуй заспавнить цмд под токеном Trusted Installer с помощью этой проги https://github.com/Raymai97/SuperCMD и попробуй как то изменить файл из под цмд, перезаписать или удалить. Если сработало, ставь мой ответ как решение =)

P.S: И слеши неправильные у тебя, в винде пути разделяются \ а не /
 
Тебе нужен не токен системы, а токен Trusted Installer в этом случае, это же файлы системного компонента. Попробуй заспавнить цмд под токеном Trusted Installer с помощью этой проги https://github.com/Raymai97/SuperCMD и попробуй как то изменить файл из под цмд, перезаписать или удалить. Если сработало, ставь мой ответ как решение =)

P.S: И слеши неправильные у тебя, в винде пути разделяются \ а не /
Окей, попробуйю, сенкс)
 
P.S: И слеши неправильные у тебя, в винде пути разделяются \ а не /
я знаю, просто тут удобнее мне так писать на рабочем месте
 
Приветствую. Столкнулся с проблемой, что с помощью WinApi пытаюсь открыть файл на чтение и запись, чтобы прочитать эти данные и записать в файл. Проблема заключается в том, что если директория находится в Program Files, то GetLastError() дает значение 5 при попытке открыть файл и записать, собственно, отказано в доступе. Запускаюсь от имени админа, даже от системы пробовал, но все четно. Как можно фиксануть это через код или никак не пофиксить эту проблему через код, а только вручную назначать файлам привеилегии?
С твоих слов выходит какая-то ерунда, что при записи любого файла в Program Files программой с правами админа у тебя получается отказ в доступе. Такого явно быть не может. Значит у тебя либо ошибка в описании того, что ты делаешь, либо ошибка в твоём коде, либо ты какой-то особо охраняемый файл пытаешься ковырнуть. В любом случае, отладка по переписке это тупиковый путь. Напиши свой код и какой файл ты пытаешься читать-писать. Попробуй открывать и записывать нужный файл какой-то прогой, типа Фара. Если работает, то явно ошибка в твоём коде, который ты не хочешь показать.
 
С твоих слов выходит какая-то ерунда, что при записи любого файла в Program Files программой с правами админа у тебя получается отказ в доступе. Такого явно быть не может. Значит у тебя либо ошибка в описании того, что ты делаешь, либо ошибка в твоём коде, либо ты какой-то особо охраняемый файл пытаешься ковырнуть. В любом случае, отладка по переписке это тупиковый путь. Напиши свой код и какой файл ты пытаешься читать-писать. Попробуй открывать и записывать нужный файл какой-то прогой, типа Фара. Если работает, то явно ошибка в твоём коде, который ты не хочешь показать.
Пытаюсь изменять с помощью моей проги файлы в том же Internet Explorer - отказ в доступе. Вручную пытаюсь - отказ в доступе. Прогу запускаю с токеном системы, попробую с токеном как сказли выше запуститься и отписать
 
Вручную пытаюсь - отказ в доступе.
С этого и надо было начинать. Файл скорей всего открыт кем-то с эксклюзивными правами, ничего кроме как закрыть процесс владельца файла не поможет.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх