Autor
|
Tema: Apagado completo (Leído 2,728 veces)
|
Hwagm
|
He desarrollado varios programas para el hacking wireless en Visual Basic y el problema lo tengo: Fuerzo un apagado del pc, pero este se queda en. Ahora puede apagar su ordenador con seguridad Como puedo evitar que se quede ahi y fuerze el apagado total. Me pasa con varios programas, hay va una muestra. Option Explicit
Private Type LUID LowPart As Long HighPart As Long End Type
Private Type TOKEN_PRIVILEGES PrivilegeCount As Long LuidUDT As LUID Attributes As Long End Type
Const TOKEN_ADJUST_PRIVILEGES = &H20 Const TOKEN_QUERY = &H8 Const SE_PRIVILEGE_ENABLED = &H2
Const EWX_SHUTDOWN = 1 Const EWX_REBOOT = 2 Const EWX_FORCE = 4
Private Declare Function GetVersion Lib "kernel32" () As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle _ As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias _ "LookupPrivilegeValueA" (ByVal lpSystemName As String, _ ByVal lpName As String, lpLuid As LUID) As Long Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal _ TokenHandle As Long, ByVal DisableAllPrivileges As Long, _ NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, _ PreviousState As Any, ReturnLength As Any) As Long Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, _ ByVal dwReserved As Long) As Long
Sub ShutDownWindows() Dim hToken As Long Dim tp As TOKEN_PRIVILEGES Dim flags As Long Dim reboot, force As Boolean reboot = False force = True If GetVersion() >= 0 Then ' Open this process for adjusting its privileges OpenProcessToken GetCurrentProcess(), (TOKEN_ADJUST_PRIVILEGES Or _ TOKEN_QUERY), hToken LookupPrivilegeValue "", "SeShutdownPrivilege", tp.LuidUDT tp.PrivilegeCount = 1 tp.Attributes = SE_PRIVILEGE_ENABLED AdjustTokenPrivileges hToken, False, tp, 0, ByVal 0&, ByVal 0& End If flags = EWX_SHUTDOWN If reboot Then flags = flags Or EWX_REBOOT If force Then flags = flags Or EWX_FORCE ExitWindowsEx flags, &HFFFF End Sub
Private Sub Command1_Click() ShutDownWindows End Sub
y ahi otra: Option Explicit
Private Const PROCESS_QUERY_INFORMATION = &H400 Private Const STILL_ACTIVE = &H103 Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess&, ByVal bInheritHandle&, ByVal dwProcessId&) _ As Long Private Declare Function GetExitCodeProcess Lib "kernel32" _ (ByVal hProcess As Long, lpExitCode As Long) _ As Long
Sub EsperarShell(sCmd As String)
Dim hShell As Long Dim hProc As Long Dim codExit As Long
' ejecutar comando hShell = Shell(Environ$("Comspec") & " /c " & sCmd, 2)
' esperar a que se complete el proceso hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
Do GetExitCodeProcess hProc, codExit DoEvents Loop While codExit = STILL_ACTIVE
End Sub
Private Sub Command1_Click() Dim a a "shutdown -s -f -t 60 -m \\wireless -c" EsperarShell (a)
End Sub
|
|
|
En línea
|
|
|
|
Hwagm
|
Parece ser como me temia que era un problema del propio xp. En cambio el reboot no aparece y lo hace correcto. Solucionar problemas de apagado en Windows XP Se a comprobado que en muchos equipos ATX, donde en anteriores versiones al Windows XP apagaban automáticamente el sistema, en Windows XP no lo hacen, mostrando el mensaje: "Ahora es seguro apagar el sistema" o incluso reiniciando en vez de apagarse.
Y este problema lo podemos solucionar mediante el registro de Windows. Para ello ejecutamos "regedit.exe" desde el menú "Inicio/Ejecutar".
Allí localizamos la siguiente clave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon.
Una vez localizada dicha clave, comprobamos si el contenido de los valores alfanuméricos PowerDownAfterShudown y ShutdownWithoutLogon es "1", pues de lo contrario, tendremos que ponerlo con ese valor.
Otra cosa, recomiendada es: revisar en la clave HKEY_CURRENT_USER\Control Panel\Desktop si existe el valor alfanumérico PowerOffActive, cuyo contenido deberá ser "1".
Si esto aun sigue sin causar ningún cambio, lo intentaremos de otro modo: Iniciamos la herramienta de administración del sistema, pulsando con botón derecho sobre el icono de Mi PC seleccionando "Administrar". Una vez dentro del administrador de dispositivos, comprobamos que el apartado Ordenador, indique lo siguiente: "Equipo ACPI compatible" o "PC Estándar APM".
En este último caso, dentro del menú Ver, seleccionamos Mostrar dispositivos ocultos y nos aseguramos que el elemento "NT ATM / Legacy Interfaz mode" no tenga un marca de color rojo, pues de suceder esto tenemos que hacer lo siguiente:
Accedemos a sus Propiedades y Habilitar el dispositivo.
Ccomprobar que en las Propiedades de energía, dentro del Panel de control, en la pestaña APM se encuentre activada la opción "Habilitar la compatibilidad con la administración avanzada de energía".
Supongo que tendre que modificar el programa para que cambie antes de nada estas variables, se como hacerlo De todas forma podeis darme alguna idea mas.
|
|
|
En línea
|
|
|
|
|
Hwagm
|
Que razón tienes, al final incluso probe con programación en c/c++ y mas de lo mismo.
Cierto el reboot lo hace bien, por eso entiendo que los virus en visual basic resetean el pc y no lo apagan.
Incluso he bajado algunos programas y siempre lo mismo.
Bueno gracias por confirmar, asi no perdere mas tiempo. Ahora es saber si en esa situación, como se queda el SO, pero eso corresponde a otro subforo.
Mil gracias.
|
|
|
En línea
|
|
|
|
Hwagm
|
Otra cosa y si puedes? Hay otra función en visual basic despues de generar un objeto shell que es. Private oShell As Shell32.Shell
oShell.ShutdownWindows en esta nos aparece la misma ventana que cuando damos en el menu inicio de windows "Apagar equipo" y sale la pantalla "Suspender" "Apagar" "Reiniciar", es posible dar argumentos ha esa función Bueno tambien probe lo de : C:\WINDOWS\system32\rundll32.exe user,ExitWindows En un icono en el escritorio y ejecutarlo desde VB. Solo funciono en win98. En xp daba error, error al cargar el modulo user Bueno perón, esto lo dejamos ya que pertenece al subforo de Sistema Operativos. Lo dicho: Permite argumentos. Private oShell As Shell32.Shell
oShell.ShutdownWindows Me parece que no verdad.
|
|
« Última modificación: 10 Septiembre 2005, 15:44 pm por Hwagm »
|
En línea
|
|
|
|
Ertai
|
No, creo que solo se puede suspender. Lo de la primera duda suele pasar en ordenadores viejos, porque no contaban con la fuente de alimentación ATX. Saludos, Ertai
|
|
|
En línea
|
Si la felicidad se comprara, entonces el dinero sería noble. void rotar_by_ref(int& a, int& b) { /* Quien dijo que no se podia sin una variable temporal? */ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }
|
|
|
Hwagm
|
Gracias ahora solo me falta comprobar como reaccionan las tarjetas wireless en ambos casos, es decir con apagado con el logo de "ya puede apagar el pc con seguridad" o cuando ejecutemos Pero esto ya lo probaran los compañeros de Hacking wireless. Yo no puedo porque mis hermanos me han quitado los pc que tenia. (Bueno no los han quitado, se los he dejado) Muchas gracias, ahora ya tengo el camino abierto. Incluso tengo una posiblidad más, aunque no toca aqui, y seria la de diseñar una pequeño circuito electronico para mediante Visual Basic manipular el puerto paraleo y actuar sobre un rele/contactor de bajo consumo y este corte la alimentación. Si ya hay tarjetas con salidas digitales, pero esto es mas satisfactorio. Perdonarme de antemano si hablo de cosas que no tocan en este subforo. Gracias por la orientación.PD: De paso aprovecho (ya que no lo hice en su momento) de dejar un enlace para si a alguien le interesa bajarse el codigo fuente de un pequeño programa que hice para Hacking Wireless donde se puede hacer un estudio horario de los equipos wifi que se conectan en la misma red, dicho esto, decir que es valido tambien para todo tipo de redes. Por ejemplo un administrador de red puede saber a que horas se conectan diferentes clientes, seguro que se puede modificar y hacer uno más completo, por eso dejo puesto el codigo. Y seguro que los hay comerciales pero me pareció en su momento una herramienta muy útil. Su enlace es: http://hwagm.elhacker.net/programacion.htmPerdonar por no haberlo puesto antes, y eso que me lo dijo Aironjack.
|
|
« Última modificación: 10 Septiembre 2005, 16:27 pm por Hwagm »
|
En línea
|
|
|
|
Ertai
|
y actuar sobre un rele/contactor Mejor sobre un microprocesador tipo ADuC 182, pero se tendria que programar en C, ademas no necesitan estar conectados al puerto paralelo, ya que pueden albergar programas y usar sus propios puertos paralelos.
|
|
|
En línea
|
Si la felicidad se comprara, entonces el dinero sería noble. void rotar_by_ref(int& a, int& b) { /* Quien dijo que no se podia sin una variable temporal? */ *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }
|
|
|
Hwagm
|
Bueno de nuevo gracias. Solo añadir que ya acabe el programa. Podeis descargarlo de aqui: http://hwagm.elhacker.net/descargas/Nuevo/poweroff.zipseguro que tiene errores ya que dispongo de poco tiempo. Es valido para cualquier tipo de rdes. Cuando pueda y lo haya corregido todo y comprobado con los compañeros de hacking wireless, ya pondre todo el codigo. De momento solo el programa de instalacion. http://hwagm.elhacker.net/descargas/Nuevo/poweroff.zipAñadir que aunque no haga el apagado fisico y total, si realmete se pierde la asociacion via IP y lo mejor de todo la autentificación por via wireless (lo mismo para cableadas, espero), por lo cual no agotaremos el ancho de bada de nuestro equipo victima.
|
|
« Última modificación: 14 Septiembre 2005, 19:43 pm por Hwagm »
|
En línea
|
|
|
|
Hwagm
|
Ya he colocado todo el proyecto. Por si a alguno le sirve. Lo he estado comprobando esta tarde y parece que esta bastante depurado, pero nunca se sabe Si lo quereis o lo necesitais hay lo dejo: http://hwagm.elhacker.net/programacion.htmse llama poweroff
|
|
« Última modificación: 15 Septiembre 2005, 01:44 am por Hwagm »
|
En línea
|
|
|
|
|
|