Hola buenas, desearia aprender a crear un nuevo proceso en vb.net.
He leido que se debe de utilizar la función CreateProcess de la API de Win32.

Código: Seleccionar todo

Private Function CreateProcess( _
    ByVal nombredelproceso As String, _
    ByVal cmdLine As String, _
    ByVal lpProcessAttributes As Integer, _
    ByVal lpThreadAttributes As Integer, _
    ByVal boolInheritHandles As Int32, _
    ByVal dwCreationFlags As Int32, _
    ByVal lpEnvironment As Integer, _
    ByVal lpszCurrentDir As Integer, _
    ByVal si As Integer, _
    ByVal pi As Integer) As Integer
   End Function
El argumento dwCreationFlags es para poner la clase de prioridad al servicio(normal, inactivo, alto), en este caso alto IDLE_PRIORITY_CLASS.

Por tanto abro un nuevo formulario y en pongo:

Código: Seleccionar todo

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim programaprueba As String = "programapueba"
        CreateProcess(programaprueba, "", 0, 0, 0, "IDLE_PRORITY_CLASS", 0, 0, 0, 0)
    End Sub
End Class
¿Con solo esto se debe de crear un proceso llamado programaprueba o tengo que reservar memoria asignando un tamaño, ...?
Te dejo un ejemplo em vb6 , espero te sirva , ay que reservar la memoria e en el momento de la creacion del processo, el sistema

cuenta el objeto luego adelante de retornar a CreateProcess, Passando la estrutura a Process_Information

se quieres un ejemplo mas completo donde lo saque

[Enlace externo eliminado para invitados]

Mostrar/Ocultar

Indetectables RAT v.0.9.5

@Indetectables Team
Antes de todo darte las gracias M3 por responder, pensaba que nadie responderia ya que tengo un lio en la cabeza.
Lo paso a vb.net ya que type no existe en .net y le pongo una excepcion ya que no me entra en la funcion.

Código: Seleccionar todo

  Private Structure PROCESS_INFORM
        Dim hProcess As Long
        Dim hThread As Long
        Dim dwProcessId As Long
        Dim dwThreadId As Long
    End Structure
    Private Structure STARTUPINFO
        Dim cb As Long
        Dim lpReserved As String
    End Structure
'------------------------------------------------------------------------
    Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Object, ByVal lpThreadAttributes As Object, _
    ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Object, ByVal lpCurrentDriectory As String, ByVal lpStartupInfo As STARTUPINFO, ByVal lpProcessInformation As PROCESS_INFORM) As Long
'---------------------------------------------------------------------------
    Const NORMAL_PRIORITY_CLASS = &H10
'---------------------------------------------------------------------------
    Sub Main()
        Dim pInfo As PROCESS_INFORM
        Dim sInfo As STARTUPINFO
        Dim sNull As String
        Dim lSuccess As Long
        sInfo.cb = Len(sInfo)
'-----------------------------------------------------
        Try
            lSuccess = CreateProcessA(sNull, "calc.exe", 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, sNull, sInfo, pInfo)
        Catch e As Exception
            MsgBox(e.Message)
        End Try
    End Sub
El fallo que me pega es "Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada." ¿Tiene algo que ver que haya puesto el tipo object en lugar de any ?
Y la otra duda que tengo es sobre la constante "Const NORMAL_PRIORITY_CLASS = &H10", ¿Porque &H10? me pone que se transforma en 16 pero no entiendo porque se le asigna &H10 y no &H40 o 16 o 64?
Se no me equivoco , "As any" no se puede tanbiem utilizar en .net , no se , pero creo el falo estea por ay , ya sobre el &H10 ( =16) o (&H40) = 64 solo canbiaria la manera de ejecucion en la memoria , ya que los datos quedariam = se &H10 o 16 0 &H40 e 64 se és que te ay entendido amigo
Indetectables RAT v.0.9.5

@Indetectables Team
Muchas gracias M3, ahora estoy con el movil y no tengo el codigo aqui pero antes de salir de casa he cambiado un poco los tipos y me ha saltado la calculadora.
Lo que no m ha quedado claro es que dependiendo de poner &H20 o cualquier cambie la forma de ejecucion en memoria.
¿Es que puede haber varias formas de ejecutarse en memoria?
Y para q no salte el proceso calc.exe y se quede suspendido?
¿Es que puede haber varias formas de ejecutarse en memoria?
creo me espresse malo o te ay entendido malo , se canbiaria la estrutura de ejecucion , velocidad ...
Y para q no salte el proceso calc.exe y se quede suspendido?
Probas asi
Const NORMAL_PRIORITY_CLASS = &H4

Se quedará suspendido , pero el processo activo

Indetectables RAT v.0.9.5

@Indetectables Team
Ok, muchas gracias M3.
Dejo el codigo en .net por si a alguien le hace falta:

Mostrar/Ocultar

Como podeis observar he intentado iniciar el proceso colocando lo siguiente:
Dim proceso As New Process
proceso.StartInfo.FileName = "calc.exe"
proceso.start()
Es la forma que he visto por google pero yo creo que vosotros no lo haceis asi ya que he probado 5 o 6 veces y falla muchisimo con
¿Para iniciar el proceso lo haceis de alguna otra forma o utilizais proceso.start()?
Responder

Volver a “VB/.NET”