Это выполнимо, но вы должны быть в состоянии скрыть пароль администратора внутри скомпилированной программы (ни в коем случае не идеальная защита, но достаточно хорошая, чтобы ваш сын не мог выучить пароль администратора).
Сначала установите psexec
из пакета Sysinternals (доступен в виде ZIP-файла от Microsoft). psexec
позволяет запускать программы от имени других пользователей (если вы знаете пароль другого пользователя). В приведенном ниже коде предполагается, что вы установили его в C:\sysinternals\psexec.exe
. Убедитесь, что учетная запись вашего сына может запускать программу. Для этого потребуется изменить параметры безопасности на psexec.exe
чтобы предоставить права на чтение и выполнение учетной записи вашего сына.
Затем скомпилируйте приведенную ниже программу на C в исполняемый файл (назовем ее rungame.exe
), но измените код, чтобы иметь правильные пути к psexec
и игре, а также измените код, чтобы установить действительный пароль администратора по одному символу за раз ( смотрите комментарии в коде). Вот как мы запутываем пароль администратора внутри EXE-файла. Если вам не хватает компилятора Microsoft (например, Visual Studio), вы можете установить Cygwin с компилятором GCC.
Затем дайте rungame.exe
вашему сыну (но не исходный код, очевидно). Когда он хочет запустить игру, он запускает rungame.exe
, который запускает игру от имени администратора без запроса пароля.
#include <windows.h>
#include <stdlib.h>
// Be sure to use double-backslashes as path separators in this pathnames!
char * psexec = "C:\\sysinternals\\psexec.exe"; // <-- CHANGE THIS PATH AS NEEDED
char * game = "C:\\path\\to\\game\\program.exe"; // <-- CHANGE THIS PATH AS NEEDED
int main()
{
char cmd[1024] = { 0 };
char pw[128] = { 0 };
// Create the password ("hello" in this example) so that it does not appear as a string in the
// compiled version of this program.
pw[4] = 'o';
pw[3] = 'l';
pw[2] = 'l';
pw[1] = 'e';
pw[0] = 'h';
strcpy(cmd, "\"");
strcat(cmd, psexec);
strcat(cmd, "\" -d -u Administrator -p \"");
strcat(cmd, pw);
strcat(cmd, "\" \"");
strcat(cmd, game);
strcat(cmd "\"");
system(cmd);
return 0;
}