Пишу в Dev C++ этот кривой код Code: #include <stdio.h> int main () { FILE * pFile; pFile = fopen ("C:/WINDOWS/system32/drivers/etc/hosts","w"); if (pFile!=NULL) { fputs ("hi",pFile); fclose (pFile); } return 0; } если запускаю из под среды то срабатывает. если просто как екзешник, то не пашет. В чем дело? Думаю что если запускаю как экзешник, то уже не от имени администратора. Как решить данный вопрос? ps хотя я и есть админ компа=)
Вроде как-то можно программно получить права администратора попробовать (могу ошибаться, апи не помню). Можно сделать для приложения манифест, который сообщит системе, что оно должно от админа запускаться: http://msdn.microsoft.com/en-us/library/bb756929.aspx Самое простое - правой кнопкой на иконке приложения и "Run as administrator"
можно с помощью ShellExecuteEx() запросить привилегии для твоего приложения записав в структуру SHELLEXECUTEINFO в поле lpVerb "runs", а в поле lpFile - путь к исполняемому файлу. ну или же с помощью манифеста в секции trustInfo поменять значение атрибута level. p.s.: у Рихтера это описано.
Без прав админа даже не пробуй. а под Vista/W7 еще потребуются права UAC По другому только сплоиты повышения прав.
slesh=) ты же по любому другой вариант знаешь=) не просто тупая подмена, как делаю я=) может что-то там в реестре поправить. подскажи пожалуйста
лучше так char windir[MAX_PATH]; GetWindowsDirectory(windir,sizeof(windir));//определяем где //находится папка винды strcar(windir,"system32\\drivers\\etc\\host");//сложение строк fopen(windir,"a"); //добавить библиотеку <windows.h> не забудь //"a"- добавляет в файл а "w" начинает в него запись... //имхо "a" менее палевно ps поправьте если что, я в этом деле новичек
2 Apathy, Code: TCHAR buf[MAX_PATH]; ExpandEnvironmentStrings(_TEXT("%windir%\\system32\\drivers\\etc\\host"),buf,sizeof(buf));