Merlin

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

19 сообщений в этой теме

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

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

Имею:

 

Игра: 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
Добавление названия среды разработки.
0

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


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

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

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

 

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

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


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

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

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

0

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


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

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

 

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

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

#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

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

0

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


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

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

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
0

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


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

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

6d1ad02b5cef.png

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

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

722987e87058.png

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

 

Не помогло :(

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

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


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

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

 

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

bool success = false;

success = MoveFile(ExistingFileName, NewFileName);

if (!success) {

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

}

 

 

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

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


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

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

0

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


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

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";

 

 

0

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


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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
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);

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

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

0

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


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

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


Wow64EnableWow64FsRedirection(false);

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

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

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

0

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


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

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

0

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


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

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

0

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


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

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

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

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

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


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

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

Tekkon

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

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

 

0

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


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

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

Tekkon

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

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

 

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

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 продолжить игру

0

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас