Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [DELPHI] Utilizzo di NtShutdownSystem

    ciao a tutti!!!
    tempo fa chiesi sul forum come spegnere istantaneamente il computer, come nell'utility super fast shutdown.
    ora, disassemblan...(colpo di tosse) cercando su internet ho trovato che bisogna usare l'api NtShutdownSystem della libreria NTDLL.dll (che nome fantasioso ).
    ho trovato su un sito tedesco un'implementazione per un programma Delphi dos che non funziona.
    ecco hil shito:
    http://www.delphipraxis.net/post653129.html

    come posso farlo funzionare?

    ciau

    p.s. vi consiglio di leggere la versione tradotta in inglese:
    http://www.google.com/translate?u=ht...&hl=en&ie=UTF8

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da the programmer
    ora, disassemblan...(colpo di tosse) cercando su internet
    Non temere: considerando che non sai richiamare una funzione API, non mi sorge il dubbio che tu abbia disassemblato qualcosa.

    Originariamente inviato da the programmer
    ho trovato che bisogna usare l'api NtShutdownSystem della libreria NTDLL.dll (che nome fantasioso ).
    La chiamata a quella funzione dovrebbe essere effettuata dopo aver notificato (e atteso) da tutte le applicazioni attive che lo stato di "shutdown" sia stato gestito correttamente, pena la perdita di dati, quindi sostanzialmente mi risulta difficile comprendere l'utilità di seguire questa strada per spegnere banalmente un computer, a meno di non implementare tutto il resto.

    Originariamente inviato da the programmer
    ho trovato su un sito tedesco un'implementazione per un programma Delphi dos che non funziona.
    La solita frase: "non funziona". Mai che sia accompagnata dall'indicazione di un errore, di un qualsivoglia effetto diverso da quello aspettato o descrizione estesa del problema.

    Originariamente inviato da the programmer
    come posso farlo funzionare?
    Hai provato a seguire i consigli riportati nella stessa discussione?

    In ogni caso, senza indicare cosa non va, difficilmente è possibile fornirti un aiuto, a meno di non prendere il codice, compilarlo, testarlo e correggerlo interamente, al posto tuo.

    Solo che non ho molta voglia di fare uno shutdown improvviso della macchina su cui lavoro...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non capisco - sinceramente - quale sarebbe l'utilita' di uno shutdown "non sicuro" ...

    Un computer si puo' anche spegnere togliendo la spina, se si vuole farlo velocemente ...

    Se si fa in un certo modo, con una determinata sequenza di operazioni, ci sara' pure un motivo ? No ?

    So che non ti importera' molto di questo mio post ... l'unica cosa che mi lascia perplesso e' il fatto che (spero di no) il tuo programma potra' andare in giro su internet (come altri simili) e concorrere a danneggiare i sistemi di molti "sprovveduti dell'informatica" che crederanno ad un programma che spenga i computer immediatamente come per magia ...

    ... che stupidi quelli che lo fanno "perdendo tempo" ...

  4. #4
    no tutto quello che faccio lo faccio per divertimento personale (yumm!) e quindi non ho intenzione di diffonderlo via internet.
    al massimo diffondo una dll per altri che vorrebbero implementare la funzione, ma e' giusto per allargare le mie conoscenze )

    la traduzione in inglese fa schifo e quindi non capisco bene quello che intendono e poi una persona che scarica questo programma lo fa a suo rischio e pericolo!
    hai visto che le riviste di computer hanno tutte parlato di Super Fast Shutdown senza nemmeno citare i suoi danni???? (mi riferisco a Chip ed a PC World in particolare)

  5. #5
    come al solito, mi sono arrangiato da solo.
    codice:
    program InstantShutdown;
    
    {$APPTYPE CONSOLE}
    uses
      Windows;
    
    const
      SE_SHUTDOWN_PRIVILEGE = 19;
      SH_SHUTDOWN = 0;
      SH_RESTART = 1;
      SH_POWEROFF = 2;
    
    function  NtShutdownSystem(
        Action : DWORD
      ): DWORD; stdcall; external 'ntdll';
    
    function  RtlAdjustPrivilege(
        Privilege : ULONG;
        Enable : LONGBOOL;
        CurrentThread : LONGBOOL;
        Enabled : PBOOLEAN
      ): DWORD; stdcall; external 'ntdll';
    var b : boolean;
    begin
      RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, true, false, @b);
      NtShutdownSystem(SH_SHUTDOWN);
    end.
    ho cambiato la dichiarazione di RtlAdjustPrivilege dove c'era BOOLEAN ho messo LONGBOOL ed ho aggiunto la variabile b che prende il valore true se l'operazione ha avuto successo.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da the programmer
    ... al massimo diffondo una dll per altri ...
    Hai detto niente ...

    hai visto che le riviste di computer hanno tutte parlato di Super Fast Shutdown senza nemmeno citare i suoi danni???? (mi riferisco a Chip ed a PC World in particolare)
    Hai capito perche' non compro quelle "riviste"?

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da the programmer
    come al solito, mi sono arrangiato da solo.
    Allora non era così difficile, no?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.