Título: Invoke WININET y CopyMemory Publicado por: STARZ en 29 Enero 2012, 00:17 am Hola, seguí investigando un poco con el Invoke (http://cobein.com/wp/?p=567) que ustedes me explicaron como usar ;-) (gracias por eso).
Me han surgido dos dudas y me gustaría que me enseñaran a resolverlas tras estar probando y probando posibles soluciones. 1 - (tratando con hooks): Código
¿Cómo hago Invoke CopyMemory teniendo declarado un type ahi arriba? 2 - Tratando con WININET (Ejemplo de FreeVBCode (http://www.freevbcode.com/ShowCode.asp?ID=1252)) Estoy usando este code para ver el source de una web y lo único que no pude transformar con Invoke fue lo siguiente: Código
Me leí TODO este thread, (http://foro.elhacker.net/programacion_visual_basic/help_invoke_internetreadfile_api-t343917.0.html) pero no me solucionó la duda Título: Re: Invoke WININET y CopyMemory Publicado por: BlackZeroX en 29 Enero 2012, 00:51 am .
Estos parametros son los que debes pasar en el API CopyMemory (en la liga que se supone que te leiste TODO hay ejemplos): Código
Más info: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366535%28v=vs.85%29.aspx Creo que no te lo leiste todo como has mencionado... http://foro.elhacker.net/programacion_visual_basic/help_invoke_internetreadfile_api-t343917.0.html;msg1681569#msg1681569 mas explicitamente... Código
Código
Más info de la api: http://msdn.microsoft.com/en-us/library/windows/desktop/aa385103%28v=vs.85%29.aspx NOTA: no es necesario que sepas C/C++ solo necesitas leer la MSDN y saber que pasar en dichos parametros... Te dejo un ejemplo más: GetCursorPos Código
lee la descripcion aqui en la MSDN http://msdn.microsoft.com/en-us/library/windows/desktop/ms648390%28v=vs.85%29.aspx para saber que invocar te vas al recuadro Requirements hay revisas la libreria... en este caso es User32.dll y no presenta nombre como GetCursosPosW o GetCursosPosA (), asi que llamamos por GetCursosPos... Código
Con esto ya podras crear los invoques del CopyMemory y de cualquier API... Dulces Lunas!¡. Título: Re: Invoke WININET y CopyMemory Publicado por: STARZ en 29 Enero 2012, 02:26 am ¿Se supone?, no, lo leí todo.
Quizás mi error esté en otro lado. Está marcada la línea que me falla: Código Gracias por los ejemplo, en serio, pero ya se (o por lo menos eso creo yo) arreglármelas con los Invokes. Lo único en lo que le pifio es en crear strings al vuelo, strptr() o los varptr(), etc. Todavía no me queda claro cuando ponerlos, estoy seguro que me salta error por eso [Estoy leyendo lo que me pusiste del retlCopyMemory y edito] Edito: Sí, creo que mi code del RtlCopymem ocurre porque yo no pongo nunca varPtr(). ¿Cuándo debo poner VarPtr(), StrPtr(), (no se si hay más) ? el StrPtr() lo pongo o lo saco, pruebo cuando anda y cuando no, y así se si dejarlo o no. Gracias por responder. :) Título: Re: Invoke WININET y CopyMemory Publicado por: STARZ en 29 Enero 2012, 23:30 pm Hola.
Solucioné el invoke con rtlmovememory, pero no el de InternetReadFile Código: Invoke "KERNEL32", "RtlMoveMemory", VarPtr(a), VarPtr(b), Len(a) me habían faltado poner los VarPtr, aunque igualmente no sé cuando ponerlos y cuando NO. Salduos Título: Re: Invoke WININET y CopyMemory Publicado por: BlackZeroX en 30 Enero 2012, 00:05 am Revisa bien el ejemplo que yo puse, de hecho puedes tomar 100% el ejemplo y cambiar algunas cosas para tu proposito.
Nota: pista Jamas use un array de string si no de bytes como lo dice claramente la MSDN... Dulces Lunas!¡. Título: Re: Invoke WININET y CopyMemory Publicado por: STARZ en 30 Enero 2012, 05:38 am Gracias Infrangelux!!!!!!
Lo pude solucionar; array de bytes =D Te hago una pregunta, cuando se que tengo que poner strPtr() o VarPtr? Título: Re: Invoke WININET y CopyMemory Publicado por: BlackZeroX en 30 Enero 2012, 08:56 am cuando veas parametros asi...
BOOL InternetReadFile( __in HINTERNET hFile, __out LPVOID lpBuffer, __in DWORD dwNumberOfBytesToRead, __out LPDWORD lpdwNumberOfBytesRead ); lp/LP = Long Pointer (Puntero...) pero debes leer las descripciones... tambien depende de como declares la API... strptr() es un puntero a el 1 elemento de una cadena de tipo string... varptr() es para obtener la dirrecion de una variable X (CUAL SEA: string UDT, retorno de funcion, long, integer, single, currency, etc...) OJO: Tambien debes leer las descripciones de los parametros en la MSDN... Dulces Lunas!¡. |