Citat:
sstanko78: Pogledao sam gornji link. To sa c# je prilicno komplikovano,
mi smo api pozive radili u managed c++ to je bilo
tamo nesto jednostavnije. Sve funkcije
koje pozivaju WinAPI smo imali u jednom dll.
Vecina koda iz tog primera je podesavanje API poziva za PlatforInvoke, isto to u C++-u imas u .h fajlovima, samo sto ti je to neko vec pripremio unapred

. Ako ti bas izgleda pretrpano ti izdvoji te deklaracije u posebnu klasu...
Glavna igranka je u ovom kodu:
Code:
bool ok;
TokPriv1Luid tp;
IntPtr hproc = GetCurrentProcess();
IntPtr htok = IntPtr.Zero;
ok = OpenProcessToken( hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok );
tp.Count = 1;
tp.Luid = 0;
tp.Attr = SE_PRIVILEGE_ENABLED;
ok = LookupPrivilegeValue( null, SE_SHUTDOWN_NAME, ref tp.Luid );
ok = AdjustTokenPrivileges( htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero );
ok = ExitWindowsEx( flg, 0 );
Za Windows NT/XP/2000/2003/Vista postoji SE_SHUTDOWN privilegija. Za razliku od prava (rights), privilegije se ne vezuju za tvoj security token automatski vec moras sam da ih zatrazis ako i kad ti trebaju (to izmedju ostalog omogucava logovanje upotrebe privilegija u EventLog-u). Gornji primer uzima security token trenutne aplikacije (dakle tvoj token) sa namerom da ga promeni (TOKEN_ADJUST_PRIVILEGES); locira sistemsku vrednost za SE_SHUTDOWN_NAME, i na tvoj token veze SE_SHUTDOWN privilegiju kao enabled. Tek onda mozes da pozoves ExitWindowsEx...
Veruj mi, ne postoji jednostavniji nacin, alternativa je preko PowerManagment API-a, ali tu ustedis mozda liniju koda a rizikujes da PowerManagment servis bude ugasen i da ti kod prsne.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić