Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: C ja shutdown komennolla xp:n sammutus

Ville [11.11.2009 16:35:08]

#

Eli kuten otsikko sanoo, oli tarkoitus tehdä ajastin jolla saisin koneen jossa xp käyttis sammutettua.
Meinasin käyttää system() funktiota ja shutdown komentoa.

Mutta koska en ole pääkäyttäjän oikeuksilla kirjautunut en saa komentoa C ohjelmasta toimimaan. Saan ainoastaan, Käyttö estetty viestin.

Saanko millään "toimitettua" pääkäyttäjän tunnuksia sulkemisen yhteydessä?

Ville [12.11.2009 09:10:36]

#

Pengoin tuota asiaa lisää googlen avustuksella ja tulin siihen tulokseen ettei tuo homma kyllä suoraan shutdown komennolla onnistu.

Löysin runas komennon jolla tavis käyttäjä voi suorittaa jonkin ohjelman korotetuin oikeuksin, olisikohan tuosta apua? Kokeilin, mutta en saanut toimimaan.
Piti siinäkin syöttää käsin salasana.

Mietin vain että miten netistä ladattavat ajastimet jotka hoitavat tuon sammutuksen on oikein toteutettu ja että onko tuon toteutus edes mahdollista C-kielellä.

goala [12.11.2009 09:16:16]

#

Käytä WinAPIa. Esim.:

BOOL WINAPI ExitWindowsEx(
        __in  UINT uFlags,
        __in  DWORD dwReason
);

Tarkempaa infoa täältä ja täältä.

Tässä vielä suora esimerkki MSDNstä:

#include <windows.h>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "advapi32.lib")

BOOL MySystemShutdown()
{
        HANDLE hToken;
        TOKEN_PRIVILEGES tkp;

        // Get a token for this process.

        if (!OpenProcessToken(GetCurrentProcess(),
                              TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
                return( FALSE );

        // 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);

        if (GetLastError() != ERROR_SUCCESS)
                return FALSE;

        // Shut down the system and force all applications to close.

       if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,
                          SHTDN_REASON_MAJOR_OPERATINGSYSTEM |
                          SHTDN_REASON_MINOR_UPGRADE |
                          SHTDN_REASON_FLAG_PLANNED))
               return FALSE;

       //shutdown was successful

       return TRUE;
}

P.S. Tämäkin löytyi n. 3 minuutin Googlettelun ansiosta...

Ville [12.11.2009 10:38:42]

#

Niin varmasti. En näköjään oikeita "taikasanoja" googlelle osannut syöttää :(
Kiitos linkeistä ja vinkistä :)

goala [12.11.2009 10:58:15]

#

Ville kirjoitti:

Niin varmasti. En näköjään oikeita "taikasanoja" googlelle osannut syöttää :(
Kiitos linkeistä ja vinkistä :)

"c++ winapi shutdown" :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta