COMO DESLIGAR WIN2000 PELO AMOR DE DEUS!SERIO, TO PRESISANDO

Delphi

19/02/2003

tipo, essa função ñ funcionaprocedure DesligaMicro;

ExitWindowsEx(EWX_SHUTDOWN, 0) ;

AI ME RESPONDERAM AKI NESSE FORUM MESMO DIZENDO Q ESSA PROCEDURE FUNCIONAVA .... MAS NAUM FUNCIONA!

procedure DesligaMicro;
var
hToken : THandle;
tkp : TOKEN_PRIVILEGES;
zero : DWord;
begin
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken);
LookupPrivilegeValue(nil, ´SeShutdownPrivilege´, tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
zero := 0;
AdjustTokenPrivileges(htoken, FALSE, tkp ,zero ,nil, zero);
ExitWindowsEx(EWX_POWEROFF, 0) ;
end;


QUEM SOUBER, POR FAVOR, ME DA UM HELP ....


ABRAÇOS ....


Anonymous

Anonymous

Curtidas 0

Respostas

Carnette

Carnette

19/02/2003

function SairdoWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = ´SeShutdownPrivilege´;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;



Chmada da função


GOSTEI 0
Anonymous

Anonymous

19/02/2003

ESSA FUNÇÃO AI DE CIMA NAUM FUNCIONA ........





QUER SOUBER, PRO FAVOR ....


MEU ICQ EH 89606451 .....
procurei no help do delphi, mas ele ñ diz mta coisa ....


abraços ....


GOSTEI 0
Carnette

Carnette

19/02/2003

Funciona SIM...é que faltou o resto

Chmada da função


SairDoWindows(EWX_SHUTDOWN or EWX_POWEROFF);
SairDoWindows(EWX_REBOOT );



EWX_LOGOFF

Fecha todos os processos que funcionam no contexto da segurança do processo que se chamou
Função de ExitWindowsEx. Então registra o usuário fora.


EWX_POWEROFF

Fecha o sistema e desliga a força.
O sistema deve suportar a característica do POWEROF.
Windows NT/2000/XP:
O processo da chamada deve ter o privilégio de SE_SHUTDOWN_NAME.


EWX_REBOOT

Fecha o sistema e reinicia
Windows NT/2000/XP: O processo da chamada deve ter o privilégio de SE_SHUTDOWN_NAME.


EWX_SHUTDOWN

Fecha o sistema a um ponto em que é seguro desligar a força.
Todos os amortecedores da lima foram nivelados ao disco, e todos os processos running pararam.
Se o sistema suportar a característica do POWEROF,


GOSTEI 0
Anonymous

Anonymous

19/02/2003

EM WIN 2000 NAUM FUNCIONA, ACABEI DE FAZER UM PROGRAMINHA E NAUM FUNFA ....



SERIO, ACREDITE EM MIM ... EM WIN 9X FUNCIONA MAIS PLATAFORMA NT NAUM FUNFA ......


GOSTEI 0
Carnette

Carnette

19/02/2003

Voce LEU a parte que fala:
Windows NT/2000/XP: O processo da chamada deve ter o privilégio de SE_SHUTDOWN_NAME


GOSTEI 0
Anonymous

Anonymous

19/02/2003

EU BOTEI UM BOTÃO Q CHAMA A FUNÇÃO ASSIM:
SairDoWindows(EWX_SHUTDOWN or EWX_POWEROFF);

I A FUNÇÃO ESTA IGUAZINHA A Q VC POSTOU AKI, I PELO Q ENTENDI DELA, ELA ESTA COM O PRIVILÉGIOS DE SE_SHUTDOWN_NAME ....


DA UMA OLHADA NA FUNÇÃO E V C TAH CERTIM MESMO ....

BEM, ESPERO NAUM ESTAR ENXENDO, MAS EH Q ESTOU LOCO ATRAZ DISSO ....


GOSTEI 0
Carnette

Carnette

19/02/2003

então sinto muito....não sei o que está acontecenco aí....na rede que eu usei funcionou....e, eu tbm não sei lá grandes coisas de rede .... :oops:


GOSTEI 0
POSTAR