Une shell en C

Résolu
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012 - 19 juil. 2008 à 14:08
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012 - 19 juil. 2008 à 16:38
Bonjour à tous, voici un e question en C de débutants, je voulais la poser sur le chat mais  je n'arrivais pas à me connecter à l'irc...
J'aimerais en fait faire une application que j'implémenterais dans l'émulateur DOS de windows XP ; utilisant carrément shutdown, elle calculerait l'arrêt de mon PC a minuit pile par exemple quand je l'appelle à l'invite de commandes.
donc ça serait simple : je compile deux lignes de code, la première qui me calcule la différence d'heure (d'ailleurs pourriez-vous m'aider sur ce sujet je n'ai jamais manipulé des heures :s) et la seconde la shell "shutdown -s -t <mon temps>"
Pourriez-vous m'indiquer comment faire une shell? merci d'avance!

Comme quoi, vraiment rien n'est impossible...

2 réponses

Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
19 juil. 2008 à 15:29
Salut,
Tant qua faire un truc en C autant tout faire de A a Z..

Voici un code qui permettrait de faire ce que tu souhaites:

int __stdcall ShutDown(void)
{
HANDLE hToken;
TOKEN_PRIVILEGES tPrivs;
if(!OpenProcessToken(GetCurrentProcess(), (TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY), &hToken)) return 1;
LookupPrivilegeValue(0, SE_SHUTDOWN_NAME, &tPrivs.Privileges[0].Luid);
tPrivs.PrivilegeCount = 1;
tPrivs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tPrivs, 0, (PTOKEN_PRIVILEGES)0, 0);
if(GetLastError() != ERROR_SUCCESS) return 1;
if(!ExitWindowsEx((EWX_SHUTDOWN|EWX_FORCE), (SHTDN_REASON_MAJOR_OPERATINGSYSTEM|SHTDN_REASON_MINOR_UPGRADE|SHTDN_REASON_FLAG_PLANNED))) return 1;
return 0;
}

#pragma comment(linker, "/entry:_WinMain")
void _WinMain(void)
{
SYSTEMTIME stLocal;
while(1)
{
GetLocalTime(&stLocal);
if( (!stLocal.wHour)&&(!stLocal.wMinute) )
{
ShutDown();
break;
}
Sleep(1000);
}
ExitProcess(0);
}

Neo_Fr
3
moutonjr Messages postés 65 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 5 juin 2012
19 juil. 2008 à 16:38
Alors là je ne croyais vraiment pas que c'était aussi compliqué.. je ne serais jamais arrivé à faire un truc pareil!! il faut que je relise tout ça et que je me documente.. beaucoup ^^
En tout cas merci pour le code je vais tester ça tout de suite et essayer de le comprendre!

Comme quoi, vraiment rien n'est impossible...
0