CodingUniversity Ответов: 2

Как я могу изменить файл имени на файл администратора ? \ СРР


Здравствуйте, я не могу изменить имя файла, владельцем которого является администратор.
Позвольте мне объяснить, я сделал программу, которая изменяет имя файлов, которые находятся на рабочем столе, моя программа работает хорошо, но программа не может изменить имя файла и его данные администратора файла.

Как я могу это сделать ?

https://prnt.sc/pruvek

Это ссылка на то, что я объяснил.

srand(time(0));
	string dirPath = "C:\\Users\\" + username() + "\\Desktop";
	auto path = fs::path(dirPath);
	auto dir = fs::recursive_directory_iterator(path);
	filesystem::path currPath = path;
	int fileName = rand() % 1920;

	for (auto& block : dir)
	{

		auto innerPaths = vector<fs::path>();
		innerPaths.push_back(currPath);
		auto currentDepthSize = dir.depth();

		if (currentDepthSize != dir.depth())
		{
			currentDepthSize = dir.depth();
			currPath = innerPaths[currentDepthSize];
		}
		if (block.is_directory())
		{
			currentDepthSize = dir.depth();
			currPath = dir->path();
			innerPaths.push_back(currPath);
		}
		else
		{
			string filedata = (currPath.string() + "\\" + to_string(fileName));
			fs::rename(block.path(), filedata);
			fileName++;
			fstream file_data(filedata);
			file_data << randomString();
			file_data.close();
		}
	}

Этот код изменяет имена файлов и данные на рабочем столе.

Как я могу сделать так, чтобы моя программа также изменяла файлы, которые имеют опцию владельца в качестве администратора ?

Что я уже пробовал:

Я еще ничего не пробовал.

phil.o

Не обижайтесь, но добавление случайной строки в любой файл, даже тот, который вам не принадлежит, кажется довольно злонамеренным.

[no name]

Почему?

Richard MacCutchan

Этот файл принадлежит "администраторам". Поэтому, если вы не являетесь этим пользователем, и у вас нет прав администратора, то вы не можете (очевидно) изменить его.

[no name]

Пожалуйста, прочтите мой комментарий раньше

Richard MacCutchan

Какой комментарий?

[no name]

В разделе "решение 1" я ответил Дейву.

Richard MacCutchan

Там много комментариев, и я понятия не имею, на какой из них вы ссылаетесь.

2 Ответов

Рейтинг:
1

RickZeeland

Попробуйте простой пример здесь и посмотрите, работает ли это: переименование, _wrename | Microsoft Docs[^]
При запуске из Visual Studio не забудьте запустить Visual Studio с помощью команды "Запуск от имени администратора".

Если это не сработает, прочитайте: Как Контроль учетных записей пользователей (UAC) влияет на ваше приложение | Microsoft Docs[^]


[no name]

Что? ты хоть прочитал мой вопрос ?

Плохой ответ!

RickZeeland

Да, я прочитал ваш вопрос и все комментарии, и мой вывод заключается в том, что существует слишком много путаницы и слишком много неизвестных факторов. Поэтому лучше всего сделать шаг назад и попробовать сначала что-нибудь простое.

[no name]

Те 2 ссылки, которые вы мне дали, я знаю очень хорошо.

Я построил программу, которая изменяет имя и данные всех файлов на ПК, и я уже настроил свою visual studio на "запуск от имени администратора", так что вы, пожалуйста, сделайте шаг назад и прочитайте мой вопрос еще раз, спасибо!

RickZeeland

Ладно, тогда я больше не буду тебя беспокоить :)

[no name]

Я попросил о помощи, не могли бы вы помочь мне, пожалуйста, с моим вопросом ?

Richard MacCutchan

Вы не получите людей, чтобы помочь вам, если вы грубы с ними. Пожалуйста, помните, что каждый здесь оказывает помощь в свое время и бесплатно для вас.

Stefan_Lang

В защиту Рикса, первоначальный вопрос, который вы опубликовали, не содержал никакой информации о том, что вы сделали, чтобы получить доступ к изменению этих файлов, и ваши комментарии несколько сбивают с толку.

Как я теперь понимаю, вы запускаете свое приложение в режиме администратора и все еще не можете изменить имена файлов, принадлежащих администратору. Я не знаю, как вам помочь, но, возможно, кто-то другой сможет, если вы добавите немного больше информации к своему первоначальному вопросу. Для этого нажмите на зеленую ссылку [улучшить вопрос] в правом нижнем углу вашего вопроса. Затем добавьте информацию о том, что вы установили для предоставления прав администратора вашему приложению в разделе "Что я пробовал". Потому что именно это ты и пытался сделать :-)

Рейтинг:
0

Dave Kreskowiak

Если учетная запись, выполняющая этот код, не является учетной записью, владеющей папкой пользователей, в которой вы пытаетесь изменить файлы, ваш код не может коснуться этих файлов.

Безопасность существует по определенной причине, и она будет препятствовать вам делать то, что вы хотите сделать.


Почему? Подумайте об этом. Если ваш код переименует файл во что угодно, вы можете серьезно испортить то, над чем работают люди, и даже испортить файлы, которые система должна запустить. Это считается угрозой безопасности.


[no name]

Моя программа изменяет файлы только на рабочем столе, я не трогаю никаких файлов безопасности.

Как вы думаете, что fs::perms будет работать в этом случае ?

Dave Kreskowiak

Там нет такого понятия, как "файлы безопасности".

Здесь нет ни одного "рабочего стола". У каждого пользователя есть своя папка на рабочем столе. Существует также общая папка рабочего стола, содержащая файлы, которые видны каждому пользователю, входящему в систему.

Если ваша учетная запись не является учетной записью, которая владеет или имеет права доступа к папке пользователей, в которой вы пытаетесь изменить файлы, ваш код не может коснуться этих файлов.

Вы бы хотели, чтобы некоторые другие пользователи в системе возились с вашими файлами, которые у вас есть на рабочем столе? Или в папке с документами? - Нет? Тогда почему система должна позволять вам делать это с кем-то другим?

[no name]

Но я не порчу никаких файлов на любом компьютере, я просто спрашиваю, я хочу знать, как я могу изменить завивку файла и получить завивку владельца.

Без этого моя программа не работает так , как я, за исключением, пожалуйста, помогите мне с этим.

RickZeeland

Он означает, что вы должны войти в Windows с правами администратора или использовать "Запуск от имени администратора".

Dave Kreskowiak

Если вы спрашиваете, как изменить файлы в общей папке, вы не можете этого сделать, если только учетная запись, выполняющая ваш код, не является администратором, а в версиях Windows с включенными UAC и UAC вы запускаете код с правами администратора. Щелкните правой кнопкой мыши файл .exe и выберите пункт "Запуск от имени администратора".

[no name]

Мой EXE - файл может открываться только с правами администратора, но файлы все равно не изменились.

Dave Kreskowiak

Для того чтобы ваше приложение открывалось только с правами администратора, ваше приложение должно быть скомпилировано с настройкой .manifest для этого. Ты это сделал?

Что это за ошибка, которая возвращается?

[no name]

В visual studio я делаю так, что мой exe-файл после отладки может открываться только с правами администратора, и я не получаю никаких ошибок, моя программа просто не изменяет файлы, имеющие права администратора, поэтому я спрашиваю, как я могу изменить файловую завивку ?

я пробовал вот так но это не сработало

https://prnt.sc/prv8h4[^]

Dave Kreskowiak

В твоих словах нет особого смысла, и, похоже, твой вопрос постоянно меняется. Ваш код тоже не помогает. Это тоже не имеет смысла. Я не могу сказать, что ты на самом деле пытаешься сделать.

Одна проблема, которую я действительно вижу, если вы не проверяете возвращаемые значения из большинства вызываемых функций, так как же узнать, что происходит сбой?

Если у вас нет прав на запись или переименование файлов, у вас также не будет прав на изменение прав доступа к файлам!

[no name]

Но exe - файл открывается с помощью завивки! так что я могу делать все, что захочу, но теперь я хочу изменить завивку файлов, как я могу это сделать ?

Dave Kreskowiak

Google для "как изменить ACL папки с C++".