| Nome | Título Tópicos |
| Mauricio Junior |
Dúvida iniciada: 6/29/2005 10:56:58 AM
Desligando PC
Dúvida: O código abaixo desliga o pc\r\nbem legal\r\n\r\nVB.net:\r\n--------------------------------------------------------------------------------\r\n Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As IntPtr\r\n Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As IntPtr, ByVal DesiredAccess As Int32, ByRef TokenHandle As IntPtr) As Int32\r\n Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LUID) As Int32\r\n Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As IntPtr, ByVal DisableAllPrivileges As Int32, ByRef NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Int32, ByRef PreviousState As TOKEN_PRIVILEGES, ByRef ReturnLength As Int32) As Int32\r\n \r\n Private Declare Function ExitWindowsEx Lib "user32.dll" (ByVal uFlags As Int32, ByVal dwReserved As Int32) As Int32\r\n Private Const EWX_FORCE As Int32 = 4\r\n Private Const EWX_SHUTDOWN As Int32 = 1\r\n Private Const EWX_REBOOT As Int32 = 2\r\n Private Const EWX_LOGOFF As Int32 = 0\r\n \r\n Public Structure LUID\r\n Dim LowPart As Int32\r\n Dim HighPart As Int32\r\n End Structure\r\n \r\n Public Structure TOKEN_PRIVILEGES\r\n Public PrivilegeCount As Integer\r\n Public Privileges As LUID\r\n Public Attributes As Int32\r\n End Structure\r\n \r\n Private Sub btn_ShutDown_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_ShutDown.Click\r\n ShutDown()\r\n End Sub\r\n \r\n Private Sub btn_Restart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Restart.Click\r\n Restart()\r\n End Sub\r\n \r\n Private Sub Restart()\r\n If MessageBox.Show("Would you like to re-boot the system", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = DialogResult.OK Then\r\n Dim platform As New PlatformID\r\n Select Case Environment.OSVersion.Platform\r\n Case PlatformID.Win32NT\r\n Dim token As TOKEN_PRIVILEGES\r\n Dim blank_token As TOKEN_PRIVILEGES\r\n Dim token_handle As IntPtr\r\n Dim uid As LUID\r\n Dim ret_length As Integer\r\n Dim ptr As IntPtr = GetCurrentProcess() "/// get the process handle\r\n \r\n OpenProcessToken(ptr, &H20 Or &H8, token_handle)\r\n LookupPrivilegeValue("", "SeShutdownPrivilege", uid)\r\n token.PrivilegeCount = 1\r\n token.Privileges = uid\r\n token.Attributes = &H2\r\n \r\n AdjustTokenPrivileges(token_handle, False, token, System.Runtime.InteropServices.Marshal.SizeOf(blan k_token), blank_token, ret_length)\r\n \r\n ExitWindowsEx(EWX_LOGOFF Or EWX_FORCE Or EWX_REBOOT, &HFFFF)\r\n \r\n Case Else\r\n ExitWindowsEx(EWX_SHUTDOWN Or EWX_FORCE Or EWX_REBOOT, &HFFFF)\r\n End Select\r\n End If\r\n End Sub\r\n Private Sub ShutDown()\r\n If MessageBox.Show("Would you like to shut down the system", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = DialogResult.OK Then\r\n Dim platform As New PlatformID\r\n Select Case Environment.OSVersion.Platform\r\n Case PlatformID.Win32NT\r\n Dim token As TOKEN_PRIVILEGES\r\n Dim blank_token As TOKEN_PRIVILEGES\r\n Dim token_handle As IntPtr\r\n Dim uid As LUID\r\n Dim ret_length As Integer\r\n Dim ptr As IntPtr = GetCurrentProcess() "/// get the process handle\r\n \r\n OpenProcessToken(ptr, &H20 Or &H8, token_handle)\r\n LookupPrivilegeValue("", "SeShutdownPrivilege", uid)\r\n token.PrivilegeCount = 1\r\n token.Privileges = uid\r\n token.Attributes = &H2\r\n \r\n AdjustTokenPrivileges(token_handle, 0, token, System.Runtime.InteropServices.Marshal.SizeOf(blan k_token), blank_token, ret_length)\r\n \r\n ExitWindowsEx(EWX_SHUTDOWN Or EWX_FORCE, &HFFFF)\r\n \r\n Case Else\r\n ExitWindowsEx(EWX_SHUTDOWN Or EWX_FORCE, &HFFFF)\r\n End Select\r\n End If\r\n End Sub \r\n\r\n\r\n
|