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
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.
El reboot lo hace bien claro, pero la pc no se apagará si no tiene fuente ATX.
Saludos.
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.
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.
No, creo que solo se puede suspender.
oShell.Suspend
Lo de la primera duda suele pasar en ordenadores viejos, porque no contaban con la fuente de alimentación ATX.
Saludos,
Ertai
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
oShell.Suspend
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)
;D
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.htm
Perdonar por no haberlo puesto antes, y eso que me lo dijo Aironjack.
Citary 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.
Bueno de nuevo gracias. Solo añadir que ya acabe el programa.
Podeis descargarlo de aqui:
http://hwagm.elhacker.net/descargas/Nuevo/poweroff.zip
seguro 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.zip
Añ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.
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.htm
se llama poweroff