PC instant power off

  • VB.NET

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Myrax.

    PC instant power off

    Hallo Comunity,

    mal wieder eine frage:

    wie bekomme ich mit vb den PC aus -> KEIN NORMALER SHUTDOWN!!! sondern ein "instant power off" - sprich der PC soll ausgehen ohne normales herunterfahren, und ungeachtet der laufenden Prozesse.

    Grund für ein solch radikales vorgehen ist meine grafikkarte, die bei so mancher gelegenheit stark überhitzt. ich habe von einem kumpel einen code bekommen, der die temperatur der grafikkarte ausliest 8| - fragt mich net wie das geht.

    jedenfalls soll der PC ohne vorwarnung ausgehen, sobald die temperatur einen kritischen wert erreicht. vor dem poweroff werde ich noch ein

    VB.NET-Quellcode

    1. Console.Beep()
    in verschiedenen Frequenzen einfügen, damit ich weiß, warum der PC aus ist, und ihn nicht gleich wieder einschalte.

    bei gelegenheit werde ich meinen PC zur reperatur bringen, wenn es meine finanziellen mittel erlauben. bis dahin würde ich mir gerne mit dieser übergangslösung helfen.


    Grüße KnifeHunter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KnifeHunter“ ()

    shutdown -f-s?!
    Das direkte Ausschalten würde einen tiefen Eingriff ins System benötigen, das ganze müsste im Ring 0 laufen, was glaube ich bei den Treibern auch bei Windows der Fall sein sollte, also müsstest du dir einen Treiber schreiben, aber zusätzlich würde das ganze natürlich einem Absturz gleich kommen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    hmm... dass das so schwer wird habe ich nicht gedacht. - da komme ich dann auch nicht um C oder assembler drum rum.
    und ja - ein gezielter systemabsturz - sowas in der art hatte ich geplant, da meine grafikkarte mir leider nicht viel zeit lässt - genaugenommen nicht einmal für das herunterfahren. - momentan mache ich es mit einem Kippschalter an der steckdosenleiste 8| aber ich will nicht immer meine griffel im PC haben bzw. auf das proggy schauem müssen und überlegen - hmm... vlt schafft er noch 10 min. ich brauche eine lösung!

    Die karte überhitzt in ca. 30 - 60 sec von ~23°C auf spitzenwertevon über 68°C O.O (älteres modell! vlt tue ich mir mal eine neuere her. - habe von meinem kumpel erfahren, dass bei seiner grafikkarte temperatuen von über 80°C normal sind O.O WOW - meine spinnt schon bei 68 - oder der code vom kumpel ist doch net so genau wie erwartet - WTF) wie die das schafft ist mir ein rätsel. - ich merke es frühestens dann, wenn mein Mauszeiger etc. schlieren zieht und sich der bildschirm langsam in einen verpixelten regenbogen verwandelt. aber dann ist es auch schon zu spät. und ich möchte nicht, dass die grafikkarte ernste schäden nimmt, da ich nicht das geld habe diese zu ersetzen. bisher war nach 20min cooldown soweit alles wieder in ordnung. allerdings habe ich nicht vor das auf die probe zu stellen.

    für tipps rund ums PC abschießen bin ich dankbar!


    KnifeHunter
    aka. EsTari
    das geht schon ein bis schen zu weit. die ganzen gewöhnlichen script-kiddy-scherzprogramme sind schon nervig genug, aber dein vorhaben könnte, wenn zu oft durchgeführt tatsächlichen schaden anrichten. (zerstörte dokumente (die offen waren), eine zerstörte system-registier-datenbank, oder gar ein kratzer auf der HDD (ich bin mir nicht sicher ob die heutzutage 100% dagegen abgesichtert sind, aber früher konnte man mit abruptem "steckerziehen" das teil in jenseits befördern...))

    das ganze ist viel zu riskant. lös doch vielleit lieber dein problem an der ursache anstatt nur die symptome zu unterdrücken ;) zumal der PC sich doch eh von allein killt wenn er es für notwendig erachtet. da solltest du echt nicht reinpfuschen ;)
    ok - das hatte ich nicht bedacht. jedenfalls - Lüfter ist sauber und wenn er noch schneller läuft hebt der PC ab 8| das teil läuft mit einer speed von 2800 u/min
    (laut programm) also der lüfter ist es net...
    jedenfalls muss mein PC zur reperatur. aber bis dahin habe ich keine ahnung, wie ich meine grafikkarte in schach halte ...

    ... und man kann NVIDIA Grafikkarten DOCH im Backofen reparieren!! :thumbsup:


    Shit - meine grafikkarte ist nicht von nvidia :S
    aber ich steck sie trd mal in backofen :D

    (muss ich da vorheizen oder net?!)
    Nicht getestet und sollte auch nicht angewendet werden!
    (evtl admin rechte notwendig)

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. Public Declare Function RtlAdjustPrivilege& Lib "ntdll" (ByVal Privilege&, ByVal NewValue&, ByVal NewThread&, ByVal OldValue&)
    4. Public Declare Function NtShutdownSystem& Lib "ntdll" (ByVal ShutdownAction&)
    5. Public Const SE_SHUTDOWN_PRIVILEGE& = 19
    6. ' // The Shutdown Actions
    7. Public Const SHUTDOWN& = 0
    8. Public Const RESTART& = 1
    9. Public Const POWEROFF& = 2
    10. Public Class Privileges
    11. 'This routine enables the Shutdown privilege for the current process,
    12. 'which is necessary if you want to call ExitWindowsEx.
    13. Private Const ANYSIZE_ARRAY As Integer = 1
    14. Private Const TOKEN_QUERY As Integer = &H8
    15. Private Const TOKEN_ADJUST_PRIVILEGES As Integer = &H20
    16. Private Const SE_PRIVILEGE_ENABLED = &H2
    17. Public Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
    18. Public Const SE_RESTORE_NAME = "SeRestorePrivilege"
    19. <StructLayout(LayoutKind.Sequential)> _
    20. Private Structure LUID
    21. Public LowPart As UInt32
    22. Public HighPart As UInt32
    23. End Structure
    24. <StructLayout(LayoutKind.Sequential)> _
    25. Private Structure LUID_AND_ATTRIBUTES
    26. Public Luid As LUID
    27. Public Attributes As UInt32
    28. End Structure
    29. <StructLayout(LayoutKind.Sequential)> _
    30. Private Structure TOKEN_PRIVILEGES
    31. Public PrivilegeCount As UInt32
    32. <MarshalAs(UnmanagedType.ByValArray, SizeConst:=ANYSIZE_ARRAY)> _
    33. Public Privileges() As LUID_AND_ATTRIBUTES
    34. End Structure
    35. <DllImport("advapi32.dll", SetLastError:=True)> _
    36. Private Shared Function LookupPrivilegeValue( _
    37. ByVal lpSystemName As String, _
    38. ByVal lpName As String, _
    39. ByRef lpLuid As LUID _
    40. ) As Boolean
    41. End Function
    42. <DllImport("advapi32.dll", SetLastError:=True)> _
    43. Private Shared Function OpenProcessToken( _
    44. ByVal ProcessHandle As IntPtr, _
    45. ByVal DesiredAccess As Integer, _
    46. ByRef TokenHandle As IntPtr _
    47. ) As Boolean
    48. End Function
    49. <DllImport("kernel32.dll", SetLastError:=True)> _
    50. Private Shared Function CloseHandle(ByVal hHandle As IntPtr) As Boolean
    51. End Function
    52. <DllImport("advapi32.dll", SetLastError:=True)> _
    53. Private Shared Function AdjustTokenPrivileges( _
    54. ByVal TokenHandle As IntPtr, _
    55. ByVal DisableAllPrivileges As Boolean, _
    56. ByRef NewState As TOKEN_PRIVILEGES, _
    57. ByVal BufferLength As Integer, _
    58. ByRef PreviousState As TOKEN_PRIVILEGES, _
    59. ByRef ReturnLength As IntPtr _
    60. ) As Boolean
    61. End Function
    62. Public Shared Sub AcquirePrivilege(ByVal privilege As String)
    63. Dim lastWin32Error As Integer = 0
    64. 'Get the LUID that corresponds to the Shutdown privilege, if it exists.
    65. Dim luid As LUID
    66. If Not LookupPrivilegeValue(Nothing, privilege, luid) Then
    67. lastWin32Error = Marshal.GetLastWin32Error()
    68. Throw New System.ComponentModel.Win32Exception(lastWin32Error, _
    69. "LookupPrivilegeValue failed with error " & lastWin32Error.ToString & ".")
    70. End If
    71. 'Get the current process's token.
    72. Dim hProc As IntPtr = Process.GetCurrentProcess().Handle
    73. Dim hToken As IntPtr
    74. If Not OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) Then
    75. lastWin32Error = Marshal.GetLastWin32Error()
    76. Throw New System.ComponentModel.Win32Exception(lastWin32Error, _
    77. "OpenProcessToken failed with error " & lastWin32Error.ToString & ".")
    78. End If
    79. Try
    80. 'Set up a LUID_AND_ATTRIBUTES structure containing the Shutdown privilege, marked as enabled.
    81. Dim luaAttr As New LUID_AND_ATTRIBUTES
    82. luaAttr.Luid = luid
    83. luaAttr.Attributes = SE_PRIVILEGE_ENABLED
    84. 'Set up a TOKEN_PRIVILEGES structure containing only the shutdown privilege.
    85. Dim newState As New TOKEN_PRIVILEGES
    86. newState.PrivilegeCount = 1
    87. newState.Privileges = New LUID_AND_ATTRIBUTES() {luaAttr}
    88. 'Set up a TOKEN_PRIVILEGES structure for the returned (modified) privileges.
    89. Dim prevState As TOKEN_PRIVILEGES = New TOKEN_PRIVILEGES
    90. ReDim prevState.Privileges(CInt(newState.PrivilegeCount))
    91. 'Apply the TOKEN_PRIVILEGES structure to the current process's token.
    92. Dim returnLength As IntPtr
    93. If Not AdjustTokenPrivileges(hToken, False, newState, Marshal.SizeOf(prevState), prevState, returnLength) Then
    94. lastWin32Error = Marshal.GetLastWin32Error()
    95. Throw New System.ComponentModel.Win32Exception(lastWin32Error, _
    96. "AdjustTokenPrivileges failed with error " & lastWin32Error.ToString & ".")
    97. End If
    98. Finally
    99. CloseHandle(hToken)
    100. End Try
    101. End Sub
    102. End Class
    103. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    104. End Sub
    105. End Class


    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Privileges.AcquirePrivilege("SeShutdownPrivilege")
    3. RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, 1, 0, 0) ' // Give us Shutdown Privileges
    4. NtShutdownSystem(SHUTDOWN)
    5. End Sub
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!
    @ Bla - hast du das gerade selbst gecodet - oder hattest du das noch irgendwo rumliegen?
    WOW - da muss können dahinterstecken 8|


    Ein Aufruf an die PInvoke-Funktion "Shotdown!WindowsApplication1.Form1::RtlAdjustPrivilege" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.

    in der zeile:

    VB.NET-Quellcode

    1. RtlAdjustPrivilege(SE_SHUTDOWN_PRIVILEGE, 1, 0, 0)


    bin mir nicht sicher aber ist 1 nicht restart? - poweroff wäre doch 2 oder sehe ich das etwa falsch?!

    ansonsten passt alles - hoffe, dass ich den PC spätestens nächste woche zur reperatur bringen kann !

    Grafikkartentemperatur: 58°C

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KnifeHunter“ ()

    wie meinst du das?! - was ersetzen? - raff ich gerade net ganz


    o.O Grafikkarte bei 87°C - mache PC aus - schaue morgen wieder rein bye

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KnifeHunter“ ()

    *Post neu editiert*
    na ja du hast 60s, denke, dann brauchst der Code von bla nicht mehr, du hast nicht soviel zeit.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SystemUnknow“ ()

    lässt paar mal abstürzen, als nächstes kannst neue festplatte besorgen, und paar wochen/tage spähter ist motherboard soweit....
    Dann kannst gleich neuen PC kaufen.

    Damit dein Progi immer akt. Temperatur ermittelt, kannst mit Multithreading aktualisieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SystemUnknow“ ()

    Hi bin wieder da mit meinem iPod. Tippen ist da n bisschen scheisse. Und normaler shutdown geht desshalb nicht weil die grafikkarte wie oben beschrieben fuer eine ueberhitzung maximal 60sec braucht und dann spackt schon alles!
    fuer eine ueberhitzung maximal 60sec braucht

    Du hast zwei möglichkeiten:
    1. Lüfter einbauen (wenn möglichkeit besteht)
    2. PC nicht mehr einschalten

    Die Entscheidung liegt in deine Händen, du kannst Code von bla nehmen.
    Mehr malige abstürze macht dein PC nicht lange mit, nächste Haltestelle "PC Friedhof".
    hab noch ne vb6-Lösung gefunden
    (funktioniert viellt nur bei xp)

    VB.NET-Quellcode

    1. Public Declare Function RtlAdjustPrivilege& Lib "ntdll" (ByVal Privilege&, ByVal newValue&, ByVal NewThread&, OldValue&)
    2. Public Declare Function NtShutdownSystem& Lib "ntdll" (ByVal ShutdownAction&)
    3. Private Const SE_SHUTDOWN_PRIVILEGE& = 19
    4. Private Const SHUTDOWN& = 0
    5. Private Const RESTART& = 1
    6. Private Const POWEROFF& = 2
    7. Public Sub ShutdownXP()
    8. RtlAdjustPrivilege SE_SHUTDOWN_PRIVILEGE, 1, 0, 0
    9. NtShutdownSystem SHUTDOWN
    10. End Sub
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!
    Der code von bla geht leider nicht. Ausserdem habe ich nicht vor den pc unnoetig zu belasten. Aber ich kann auch nicht auf ihn verzichten(schule etc.) aber bis zur reperatur brauche ich einen funktionierenden code! Ich habe den fehler oben in einem anderen beitrag gepostet. Ich wuerde mich sehr darueber freuen wenn mir jmd den code zum laufen bekommen wuerde. Brauche ihn ja nur bis zur reperatur. Un spaetestens im herbst ist eh ein neuer pc faellig. Also moechte ich den, den ich jetzt habe noch irgendwie am leben halten. Wenn er dann in vier monaten verreckt dann drauf geschissen. Also bitte bitte ich brauch den code so dass er lauft(kein ae und laeuft klingt mist) brauche alo bitte dringen den code!!!
    In Windows ist ein Feature eingebaut, dass zwar für etwas anderes gedacht ist, dir aber auch weiterhelfen wird: msdn.microsoft.com/en-us/library/ff545499%28v=vs.85%29.aspx
    Dies ist die einzige Möglichkeit, eine saubere Sofortabschaltung zu initiieren. Die Erstellung des Speicherabbildes belastet deine Grafikkarte nicht, da sie sich zu diesem Zeitpunkt bereits im Textmodus befindet. Das Ausschalten der Speicherbilderstellung ist nicht empfehlenswert.
    In der MSDN gibt es keine Warnhinweise. Das hat den Grund, dass der Artikel für Leute geschrieben ist, die wissen, was sie tun. Sie ist vor allem zu Debugging-Zwecken implementiert worden und richtet sich nicht an den Endbenutzer.

    Hinweis an alle, die schon leuchtende Augen haben und den Lolli fast verschlucken: Das ist ein Kernel-Request. Den kann man nicht für Scherzprogramme verwenden. Wirklich nicht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Renati“ ()

    Versuch es doch mal mit Hibernate/Ruhezustand. Da wird die Grafik sofort abgeschaltet, und der PC Speichert den Ram auf der Festplatte ab, so, das man alles wieder so hat wie vorher.

    Da braucht man dann auch keine gefährlichen Sofortkiller mehr.