kako da napisem program normalno u jeziku C, koji ce kada se pokrene iz windowsa prikazati neku poruku i posle nekoliko sekundi restartovati racunar?
Program napisan u jeziku C za restart PC
Zaključano
Zakačeno
Wow, nisam znao da windows ima shutdown komandu. Ovo ce mi lepo doci. :)
Potpis
a koju bibliotecku funkciju da pozovem, da li moze neko da mi napise konkretno program kako bi trebalo da izgleda...
Funkcija je, kao što ti je NrmMyth rekao, "system" a da bi mogao da
je zoveš moraš include-ovati <process.h>. Inače kada se već govori
o shutdown komandi, pretpostavka je da je u pitanju windows pa
to možeš uraditi i preko WIN API-ja, samo u tom slučaju moraš da
se igraš sa menjanjem ring level-a da bi imao prava da resetuješ mašinu.
je zoveš moraš include-ovati <process.h>. Inače kada se već govori
o shutdown komandi, pretpostavka je da je u pitanju windows pa
to možeš uraditi i preko WIN API-ja, samo u tom slučaju moraš da
se igraš sa menjanjem ring level-a da bi imao prava da resetuješ mašinu.
Zasto bi morao da menja ring-level? Ako user koji pokrece program ima pravo da iskljuci racunar (a to ima cak i limited user), imace i program.
Postoji cela istorija 'načina' kako se može 'zagasiti' Windows, a postoji i istorija problem
koji su pratili te načine, u zavisnosti od toga koja su prava i privilegije postavljeni.
Pored pomenutog system( "shutdown -r -f -t 03" ), koji je univerzalni wrapper
koji bi trebalo da radi, Windows se gasi sa API-jem:
... pri čemu prethodno treba imati određene privilegije. Ukoliko me pamćenje dobro služi
(na osnovu prijava korisnika po raznoraznim forumima), nekad nije dovoljno biti korisnik sa
Admin pravima da bi se Windows ugasio, restartovao ili promenio User.
Prethodno je potrebno pozvati:
... jer ExitWindowsEx() zahteva da 'calling process' ima SE_SHUTDOWN_NAME
privilegije. Mislim da je to u suštini ovo (uvo uzeti sa rezervom):
Evo jedan primer (baziran na API-ju) koji sve to ima upakovano u jednu funkciju:
koji su pratili te načine, u zavisnosti od toga koja su prava i privilegije postavljeni.
Pored pomenutog system( "shutdown -r -f -t 03" ), koji je univerzalni wrapper
koji bi trebalo da radi, Windows se gasi sa API-jem:
Code:
ExitWindowsEx();
ExitWindowsEx();
... pri čemu prethodno treba imati određene privilegije. Ukoliko me pamćenje dobro služi
(na osnovu prijava korisnika po raznoraznim forumima), nekad nije dovoljno biti korisnik sa
Admin pravima da bi se Windows ugasio, restartovao ili promenio User.
Prethodno je potrebno pozvati:
Code:
AdjustTokenPrivileges()
AdjustTokenPrivileges()
... jer ExitWindowsEx() zahteva da 'calling process' ima SE_SHUTDOWN_NAME
privilegije. Mislim da je to u suštini ovo (uvo uzeti sa rezervom):
START: Control Panel > Administrative Tools > Local Security Settings
STABLO: Security Settings > Local Policies > User Rights Assignment
STAVKA: Shut down the system [Add user]
Evo jedan primer (baziran na API-ju) koji sve to ima upakovano u jednu funkciju:
Code:
void SystemShutDown( int mode )
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// AnsiString error;
string error;
// Get a token for this process.
if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
error = "OpenProcessToken";
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid );
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges( hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0 );
// Cannot test the return value of AdjustTokenPrivileges.
if ( GetLastError() != ERROR_SUCCESS )
error = "AdjustTokenPrivileges";
switch( mode )
{
// 0 = Forcefully close apps, shutdown and leave system at shutoff point
case 0: if ( !ExitWindowsEx( EWX_SHUTDOWN | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 1 = Forcefully close apps, shutdown and reboot
case 1: if ( !ExitWindowsEx( EWX_REBOOT | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 2 = Forcefully close apps, and logoff
case 2: if ( !ExitWindowsEx( EWX_LOGOFF | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 3 = Forcefully close apps, shutdown and poweroff
case 3: if ( !ExitWindowsEx( EWX_POWEROFF | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
}
}
void SystemShutDown( int mode )
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// AnsiString error;
string error;
// Get a token for this process.
if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
error = "OpenProcessToken";
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid );
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges( hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0 );
// Cannot test the return value of AdjustTokenPrivileges.
if ( GetLastError() != ERROR_SUCCESS )
error = "AdjustTokenPrivileges";
switch( mode )
{
// 0 = Forcefully close apps, shutdown and leave system at shutoff point
case 0: if ( !ExitWindowsEx( EWX_SHUTDOWN | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 1 = Forcefully close apps, shutdown and reboot
case 1: if ( !ExitWindowsEx( EWX_REBOOT | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 2 = Forcefully close apps, and logoff
case 2: if ( !ExitWindowsEx( EWX_LOGOFF | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
// 3 = Forcefully close apps, shutdown and poweroff
case 3: if ( !ExitWindowsEx( EWX_POWEROFF | EWX_FORCE, 0 ) )
error = "ExitWindowsEx";
break;
}
}
Citat:
tosa: Funkcija je, kao što ti je NrmMyth rekao, "system" a da bi mogao da
je zoveš moraš include-ovati <process.h>. Inače kada se već govori
o shutdown komandi, pretpostavka je da je u pitanju windows pa
to možeš uraditi i preko WIN API-ja, samo u tom slučaju moraš da
se igraš sa menjanjem ring level-a da bi imao prava da resetuješ mašinu.
je zoveš moraš include-ovati <process.h>. Inače kada se već govori
o shutdown komandi, pretpostavka je da je u pitanju windows pa
to možeš uraditi i preko WIN API-ja, samo u tom slučaju moraš da
se igraš sa menjanjem ring level-a da bi imao prava da resetuješ mašinu.
http://www.opengroup.org/onlin...09695399/functions/system.html
I nalazi se u <stdlib.h>.
Ovim putem bih se i predstavio kao novi član sam nekim iskustvom u C programiranju, C++-u, Asembleru, nešto malo C# i PHP. Nadam se da ču naučiti dosta ovdje. A sad back to topic (znam da je malo old, ali nije baš ni prahistorija so here it goes....)
Preuzeto sa gornjeg linka....
int system(const char *command);
Mislim da to nije ista stvar, nema iste argumente. Ovo je deklinacija cjelobrojne varijable, a ne system funkcije.
Ipak, sad sam se zainteresirao za ovu verziju koda sa system() u sebi. Dali bi to trebalo izgledati nekako ovako:
Ovo bi bila nekakva osnova. Ispravite me gdje griješim i pokažite mi kako da to izvedeme molim vas...
Preuzeto sa gornjeg linka....
Citat:
int system(const char *command);
Mislim da to nije ista stvar, nema iste argumente. Ovo je deklinacija cjelobrojne varijable, a ne system funkcije.
Ipak, sad sam se zainteresirao za ovu verziju koda sa system() u sebi. Dali bi to trebalo izgledati nekako ovako:
Code:
#include <proces.h>
int main (void)
{
system ( "shutdown -r -f -t 03" );
return 0;
}
#include <proces.h>
int main (void)
{
system ( "shutdown -r -f -t 03" );
return 0;
}
Ovo bi bila nekakva osnova. Ispravite me gdje griješim i pokažite mi kako da to izvedeme molim vas...
Potpis
O Hrvatskoj...
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
Code:
int system(const char *command);
int system(const char *command);
Citat:
TerrorsChild:
Mislim da to nije ista stvar, nema iste argumente. Ovo je deklinacija cjelobrojne varijable, a ne system funkcije.
Mislim da to nije ista stvar, nema iste argumente. Ovo je deklinacija cjelobrojne varijable, a ne system funkcije.
A ja bih rekao da je to prototip funkcije system celobrojne povratne vrednosti, koja ima jedan argument - const pointer na tip char.
Da, valjda si u pravu....
A jesi primjetio da imam jednu veliku grešku, napisao sam "DEKLINACIJA" cjelobrojne varijable, umjesto deklaracija. Kao da je imenica, lol
A kakav mi je onaj code gore, hoći li to raditi? Ispravci?
A jesi primjetio da imam jednu veliku grešku, napisao sam "DEKLINACIJA" cjelobrojne varijable, umjesto deklaracija. Kao da je imenica, lol
A kakav mi je onaj code gore, hoći li to raditi? Ispravci?
Potpis
O Hrvatskoj...
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
I? Dali ima tko kakve ideje?
Potpis
O Hrvatskoj...
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
Citat:
TerrorsChild: I? Dali ima tko kakve ideje?
A o kakvim ti idejama govoris?
Kompajliraj taj kode pa vidi da li ce raditi i ako nece zasto nece.
Hmmmmm....za početak proces.h izgleda ne includa funkciju system. Treba se includati <stdlib.h>, jedino na taj način komplajer nije prijavio grešku, ali aplikaciju svejdeno nije učinila ništa. Pomoć molim....
Code:
#include <stdlib.h>
int main (void)
{
system ( "shutdown -r -f -t 03" );
return 0;
}
#include <stdlib.h>
int main (void)
{
system ( "shutdown -r -f -t 03" );
return 0;
}
Potpis
O Hrvatskoj...
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
Hmmm....da nije možda stvar u argumentima funkcije system?
Potpis
O Hrvatskoj...
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
Zar nitko nema ideje :(
Potpis
O Hrvatskoj...
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
Šta se događa kada komandu shutdown -r -f -t 03 ukucaš direktno u Command Prompt?
P.S.
Probaj i shutdown -s -t 00
P.S.
Probaj i shutdown -s -t 00
U command promtu mi ga ugasi sa obje solucije, ali aplikacije ne napravi ništa. Samo se izvede, nešto se procesira, ali ništa...
Pomoć molim....
Pomoć molim....
Potpis
O Hrvatskoj...
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
Što sad?
Potpis
O Hrvatskoj...
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
"Te kad mi jednom se dušom po svemiru
se krene
Zaorit ču ko grom:
O, gledajte ju divnu, vi zvijezde udivljene,
To moj je, moj je dom!"
OK, evo upravo sam ukucao ovaj kod u Borland C++ Builder (konzolni tip aplikacije):
... i sistem se restartovao (pojavio se dijalog sa odbrojavanjem sekundi). Onaj drugi
bi najverovatnije odmah bez odbrojavanja restartovao sistem.
1. Koji kompajler si ti koristio?
2. Pogledaj da li ima uticaja Debug i Release verzija EXE-a.
3. Pogledaj da li ima uticaja kada EXE pokrenes uopste iz razvojnog okruzenja i onako kroz Explorer.
4. Probaj tvoj EXE na nekom drugom računaru, da vidiš da li se dešava isto.
5. U odnosu na ovo pod (4) treba videti sta dalje isproveravati. OS se nekad ne moze
restartovati.
Eto. Šta još može da se učini...
Code:
#include <stdlib.h>
int main (void)
{
system ( "shutdown -r -f -t 03" );
return 0;
}
#include <stdlib.h>
int main (void)
{
system ( "shutdown -r -f -t 03" );
return 0;
}
... i sistem se restartovao (pojavio se dijalog sa odbrojavanjem sekundi). Onaj drugi
bi najverovatnije odmah bez odbrojavanja restartovao sistem.
1. Koji kompajler si ti koristio?
2. Pogledaj da li ima uticaja Debug i Release verzija EXE-a.
3. Pogledaj da li ima uticaja kada EXE pokrenes uopste iz razvojnog okruzenja i onako kroz Explorer.
4. Probaj tvoj EXE na nekom drugom računaru, da vidiš da li se dešava isto.
5. U odnosu na ovo pod (4) treba videti sta dalje isproveravati. OS se nekad ne moze
restartovati.
Eto. Šta još može da se učini...
Tema je zaključana, nove poruke nisu moguće.