wylaczenie zasilania kompa

0

siema wszystkim programersom ;-) . mam pytanie. znalazlem na necie (konkretnie w projekcie livexp sciagnietym z neta) pewien program. nazywa sie toto shutoff.exe. prawdopodobnie napisanie w visual basic. kilka sekund po uruchomieniu programu komputer sie wylacza. ale nie normalnie w sesie ze wylogowanie, zapis ustawien i zamkniecie, tylko od razu. ciach i nie ma zasilania. program jest wrzucony na http://odsiebie.com/pokaz/290408---1c09.html. [!!!] przed uruchomieniem zapiszcie prace! [!!!] .

ale do rzeczy. da sie cos takiego zrobic w delphi? przydaloby sie, bo nieco dlugo trza czekac przed wylaczeniem normalnym.

0

funkcja NtShutdownSystem

0

takie wyłączenie jest "niezdrowe" =]

0
reichel napisał(a)

funkcja NtShutdownSystem

To czasem nie wymusza zamknięcia bez czekania na odpowiedź procesów?

Wydaje mi się, że taki kill bez niczego to zabawa w ASM... Ale głowy nie dam...

0

Ta funkcja wymusza zamkniecie/restart systemu bez czekania na odpowiedz (i nalezy do tajemniczych funkcji z ntdlll) uzywana najczesciej wraz z RtlAdjustPrivilege. Raczej asma nie potrzeba.

0

dzieki za pomoc @reichel. jutro dopiero sprawdze bo zasypiam juz nad klawiatura ;).

~potwoor_ - wez mi sie nie wcinaj w temat. poza tym wiem o czym pisze i wiem jakie to ma konsekwencje.
poza tym przestan pisac co slina na palce przyniesie. na forum bedzie czysciej i przyjemniej.

// gosciu ma chyba ambicje dorzucenia swoich trzech groszy do kazdego tematu - Ł

0

faktycznie fajna sprawa , a oto kod z googli:

function SetPrivilege(sPrivilegeName: String; bEnabled: Boolean): Boolean;
var
 TPPrev, TP : TTokenPrivileges;
 Token : Cardinal;
 dwRetLen : DWord;
begin
 Result:= False;
 OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
 TP.PrivilegeCount:= 1;
 if LookupPrivilegeValue(Nil, PChar(sPrivilegeName), TP.Privileges[0].LUID) then
  begin
   if bEnabled then
    TP.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
 else
   TP.Privileges[0].Attributes:= 0;
  dwRetLen:= 0;
  Result:= AdjustTokenPrivileges(Token, False, TP, SizeOf(TPPrev), TPPrev, dwRetLen);
  end;
 CloseHandle(Token);
end;

procedure PowerOff;
var
 NTShutDownSystemFunc: function(Action: DWord): dword; StdCall;
 DLLHandle: THandle;
begin
 SetPrivilege('SeShutdownPrivilege', true);
 DllHandle := LoadLibrary('NTDLL.DLL');
 @NTShutDownSystemFunc := GetProcAddress(DllHandle, 'NtShutdownSystem');
  if @NTShutDownSystemFunc<>Nil then
   NTShutDownSystemFunc(2);
   FreeLibrary(DllHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Poweroff ;
end;
0

SetPrivilege('SeShutdownPrivilege', true);
a czasem nie powinno być:
SetPrivilege('SetShutdownPrivilege', true);...?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0