Título: ErrorInvalidParameter en CreateProcessW con EXTENDED_STARTUPINFO_PRESENT Publicado por: nts94 en 4 Junio 2012, 19:21 pm Bueeeno, he intentado ser lo más explícito posible con el tema de este post. Primero una introducción (para los que no lo sepan ya):
<INTRO> A partir de Windows Vista se puede "elegir" el proceso padre para un nuevo proceso (siempre que se tenga permisos para abrir el proceso). </INTRO> Corta,ehh? xD El caso es que lo he estado probando en Windows 7 x64 y me funciona con la versión ANSI (CreateProcessA) pero no con CreateProcessW. El código que uso es éste: Código: /* ... */ Nota: supongo que debe de ser algo relacionado con la especificacion del tamaño de las estructuras, pero como todavía no hay un ollydbg para x64 y no me aclaro con el windbg (y se cuelga mucho, no se si solo me pasa a mi), no he podido debuggearlo Título: Re: ErrorInvalidParameter en CreateProcessW con EXTENDED_STARTUPINFO_PRESENT Publicado por: Karcrack en 4 Junio 2012, 20:04 pm Para evitar problemas con los cambios de UNICODE a ANSI y viceversa no deberías especificar ninguna y luego definir la directiva correspondiente para el compilador. Ej:
Código Esto te generará una versión ANSI funcional, y si en lugar de desdefinir "UNICODE" lo defines (por defecto está ya definido) te generará la versión UNICODE. Igual con las estructuras, si no defines A/W el compilador automáticamente hará el trabajo. Título: Re: ErrorInvalidParameter en CreateProcessW con EXTENDED_STARTUPINFO_PRESENT Publicado por: nts94 en 4 Junio 2012, 20:09 pm Ya, el problema es que no se trata de un ejecutable sino de una DLL, y quiero poder usar ambas versiones (como la api de windows) de manera que exporto dos funciones tal que:
Código: extern "C" { La version anterior era la UNICODE. La versión ANSI solo convierte los parametros a UNICODE y llama a la version UNICODE. De todas formas, gracias :D Título: Re: ErrorInvalidParameter en CreateProcessW con EXTENDED_STARTUPINFO_PRESENT Publicado por: Karcrack en 4 Junio 2012, 20:32 pm Yo en el código no veo nada raro, pero siempre puedes compilar a 32bits y debuggear con el Olly si te aclaras con éste mejor.
Saludos Título: Re: ErrorInvalidParameter en CreateProcessW con EXTENDED_STARTUPINFO_PRESENT Publicado por: nts94 en 5 Junio 2012, 01:14 am Ok, después de unas cuantas (muchas) horas lo encontré: resulta que los de Microsoft todavía no han solucionado el famoso bug de CreateProcessW, y al intentar escribir sobre mi string directamente (es decir, sin buffer intermedio, el string estaría en una pagina de solo lectura) el programa petaba (por eso CreateProcessA sí que iba), y a veces petaba y a veces daba error porque al intentarlo en la de x86, no me dejaba inyectarme en sysprep.exe, saltarme el UAC, conseguir el SeDebugPrivilege y claro, el handle a winlogon.exe era inválido (por algo lo he puesto en la sección de malware) xD
En fin, gracias Karcrack por la ayuda. TEMA SOLUCIONADO |