Перейти к содержанию
Merlin

Запуск Battlefield 1 на старых драйверах NVIDIA

Рекомендуемые сообщения

Доброго времени суток!

Для того, что бы не вдаваться в полемику всемирного заговора, предоставлю лишь своё скромное мнение и немного обращусь за помощью:

Имею:

 

Игра: Battlefield 1 (оф. приобретённая Delux Ed.)

Конфигурация компьютера: Intel Core i5-3570 CPU @ 3.4GHz, ОЗУ 8 Гб, NVIDIA GeForce GTX 660 Ti ,Windows 7x64

 

На последней версии драйверов от NVIDIA (обновление проводил через GeForce Experience ), игра значительно тормозит, откатился на старую версию драйверов "GeForce Game Ready Driver WHQL 359.00", -запускаться перестала!

Игра требует более новую версию драйверов!

Методом гугла открыл, что для запуска игры со старой версей драйверов, требуется на время запуска игры переименовать файл с C:\Windows\System32\nvapi64.dll ...во что-то иное.

После загрузки игры, что бы игра не "вылетела", необходимо вернуть название файлу.

Так, вот, (я учился C++ по урокам этого форума и БЛАГОДАРЕН за это! Быстро освоил самое необходимое!), далее написал простенький код:

https://www.dropbox.com/sh/580vhrcp3v9ev4d/AABvv5nZGBdXhvicuxSGAvyoa?dl=0

В котором функция переименование файла, выглядит так:

MoveFile(ExistingFileName, NewFileName);

Код замечательно компилируется в Visual Studio 2015 и работает везде, кроме папки "C:\Windows\System32", в том числе, при запуске с правами Администратора, файл nvapi64.dll в папке "C:\Windows\System32" не переименовывается.

Прошу Вашей помощи и консультаций в поиске причины "не переименования" файла nvapi64.dll.

Данный exe-шник может помочь владельцам прошлых линеек видеокарт.

Заранее благодарю за любой совет!

Изменено пользователем Merlin
Добавление названия среды разработки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
40 минуты назад, Merlin сказал:

при запуске с правами Администратора

Может нужно не справами Администратора, а войти под пользователем - администратором. Недавно для чего-то мне пришлось это сделать, но сперва нужно включить учётку Админа Ну например так: 

 

Изменено пользователем Garik66

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стартер (exe -файл) рассчитан на аудиторию более 2-х ПК, УЗ администратора может называться по разному, но каждый из пользователей и есть, -администратор.

На MSDN рекомендаций по этому поводу не обнаружил, функция MoveFile замечательно отрабатывает, за исключением паки C:\\Windows\\System32.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Учетная запись под названием "Администратор" присутствует всегда и везде. Это аксиома. Ее лишь нужно активировать, как Гарик выше писал.

 

И вот еще. Найдено на просторах интернета.

Скрытый текст

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

void main ()
{
    bool success = false;
    bool somethingWentWrong = false;
    PVOID OldValue = NULL;
    if( Wow64DisableWow64FsRedirection(&OldValue) ) 
    {
        success = MoveFile("C:\\Windows\\System32\\Drivers\\TabletFilter.sys", "C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old");
        if(success){
          puts("from .sys to .sys.old");
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat not found"); somethingWentWrong = true;}
        }else{
          puts("from .sys.old to .sys");
          success = MoveFile("C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old", "C:\\Windows\\System32\\Drivers\\TabletFilter.sys");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old not found"); somethingWentWrong = true;}
        }
        if(somethingWentWrong){
          puts ( "ERROR: File were set to standart!" );
          success = MoveFile("C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old", "C:\\Windows\\System32\\Drivers\\TabletFilter.sys");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\Drivers\\TabletFilter.sys.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.sys.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.inf.old not found"); somethingWentWrong = true;}
          success = MoveFile("C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old", "C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat");
          if(!success){ puts("ERROR: C:\\Windows\\System32\\DriverStore\\FileRepository\\tabletfilter.inf_amd64_e7d03235d8288d3b\\TabletFilter.cat.old not found"); somethingWentWrong = true;}
        }else
          puts ( "File successfully renamed" );
        Wow64RevertWow64FsRedirection(OldValue);
    }
    for(unsigned long tick = GetTickCount() / 1000;  tick + 2 > GetTickCount() / 1000;){
    }

Найдено ЗДЕСЬ

Там же написано

note: added "requireAdministrator" uiAccess="false" via VS2012 Settings

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у тебя ооооооочень странный подход... нО попробуй права на файло получить например:

takeown.exe /f "%WINDIR%\system32\nvapi64.dll" /a
icacls.exe "%WINDIR%\system32\nvapi64.dll" /grant "*S-1-5-32-544:F" /q

static WCHAR nvapi64_dll[] = L"cmd.exe /q /c takeown.exe /f \"%WINDIR%\\system32\\nvapi64.dll\" /a & icacls.exe \"%WINDIR%\\system32\\nvapi64.dll\" /grant \"*S-1-5-32-544:F\" /q";
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
RtlZeroMemory(&StartupInfo,sizeof(STARTUPINFO));
RtlZeroMemory(&ProcessInfo,sizeof(PROCESS_INFORMATION));
CreateProcessW(0,nvapi64_dll,0,0,0,HIGH_PRIORITY_CLASS,0,0,&StartupInfo,&ProcessInfo);

 

Изменено пользователем gmz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Выставил права на файл (теперь все пользователи имеют право на изменение, система и администратор имеют полные права):

6d1ad02b5cef.png

2. Активировал учётную запись Администратора.

3. Поставил в настройках проекта: requireAdministrator и uiAccess="false"

722987e87058.png

4. Visual Studio запустил от имени Администратора

 

Не помогло :(

Изменено пользователем Merlin
Добавление пункта 4 в комментарий

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавил проверку успешности MoveFile, пишет "Unsuccessfully!"

 

Скрытый текст

bool success = false;

success = MoveFile(ExistingFileName, NewFileName);

if (!success) {

  	cout << "Unsuccessfully!" << endl;
	system("pause");

}

 

 

Изменено пользователем Merlin
Ошибся с кодом, исправил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

GetLastError сразу после MoveFile и смотри, какая ошибка возвращается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

GetLastError показывает код завершения 2, согласно описанию MSDN "The system cannot find the file specified":

Скрытый текст

ERROR_FILE_NOT_FOUND

2 (0x2)

The system cannot find the file specified.

Нашёл по коду завершения похожую проблему здесь, но не понял, как её решить. :wacko:

Путь проверил, указываю верно, не в системной директории работает:

Скрытый текст

const wchar_t ExistingFileName[] = L"C:\\Windows\\System32\\nvapi64.dll";

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

const wchar_t ExistingFileName[] = L"C:\\Windows\\System32\\";
Изменено пользователем partoftheworlD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
54 минуты назад, Merlin сказал:

GetLastError показывает код завершения 2, согласно описанию MSDN "The system cannot find the file specified":

х64 билд? если х32 - над юзать Wow64EnableWow64FsRedirection 0

  • Плюс 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, gmz сказал:

х64 билд? если х32 - над юзать Wow64EnableWow64FsRedirection 0

gmz, -УРА! Спасибо! Помогло:

Wow64EnableWow64FsRedirection(false);

Благодарю, всех кто откликнулся, проблема решена!

Рабочие исходники можно взять здесь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 04.11.2016 в 21:01, Merlin сказал:

gmz, -УРА! Спасибо! Помогло:


Wow64EnableWow64FsRedirection(false);

Благодарю, всех кто откликнулся, проблема решена!

Рабочие исходники можно взять здесь

я так понял если скачать Рабочие исходники которые ты дал заменить файли и все? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не работает пишет все ровно обновите драйвера  правильно я сделал?  84d92a5aa10c.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эм, может я отстал от жизни :D Но APS это не исполняемый файл)) Я даже скажу больше, это вроде ресурс!))

судя по файлам, там проэкт для MSVC, не собраный, скомпиль, потом запускай уже)

Изменено пользователем temtriss

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не, ну что, ну бывает...

Tekkon

- попробуй готовый исполняемый файл, напиши, если вдруг не поможет:

https://www.dropbox.com/s/fs7yo0cdcee30sn/bf1_start.zip?dl=0

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 часов назад, Merlin сказал:

Не, ну что, ну бывает...

Tekkon

- попробуй готовый исполняемый файл, напиши, если вдруг не поможет:

https://www.dropbox.com/s/fs7yo0cdcee30sn/bf1_start.zip?dl=0

 

я его тока и пробовал не чего не прописывал  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Файл работает под Windows 7 x64, сначала запускаешь Origin, ждёшь, если ему надо обновиться, затем запускаешь bf1_start.exe из папки с игрой.

Если у тебя винда не x64, то надо поправить название библиотеки (nvapi64.dll) в файле main.h и пересобрать проект:

const wchar_t ExistingFileName[] = L"C:\\Windows\\System32\\nvapi64.dll";
const wchar_t NewFileName[] = L"C:\\Windows\\System32\\nvapi64_bak.dll";

Можно обойтись и без файла стартера, но каждый раз руками для запуска BF1 это делать не удобно:

 

1. Переименовать файл C:\Windows\System32\nvapi64.dll в nvapi64_bak.dll

2. Запустить игру, свернуть игру (Alt+Tab)

3. Обратно переименовать файл nvapi64_bak.dll в nvapi64.dll

4. Alt+Tab продолжить игру

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.