Sistemas Operativos > Windows
Campaña Contra Windows Vista
Eternal Idol:
--- Cita de: "jojojorge" ---con eso de las funciones documentadas y no documentadas no creo que exista lo que dicen pero no pueden negar que hay muchas cosas turbias. :scream:
--- Fin de la cita ---
Lo que existen son funciones indocumentadas, muchas de ellas desensambladas por los usuarios y la mayoria exportadas lo que quiere decir que en la practica son usadas. ¿Son mas rapidas? NO. ¿Son mas directas? Si, pero la documentada llama a la indocumentada que finalmente llama al Kernel. Lo mas divertido es que las funciones indocumentadas suelen tener apenas unas lineas.¿Son mas complejas? SI.
ZwCreateFile en mi Windows 2000:
--- Código: Text --- MOV EAX,20LEA EDX,DWORD PTR SS:[ESP+4]INT 2E
Como ven las funciones documentadas son en su mayoria meros "stubs" que pasan a modo Kernel donde esta implementado el funcionamiento real.
--- Cita de: "Geo" ---¿Para qué quiere el usuario final una API bien documentada?
--- Fin de la cita ---
Touché, yo tambien creo que para nada.
shadow_rev:
--- Cita de: "Geo" ---¿Para qué quiere el usuario final una API bien documentada?
--- Fin de la cita ---
¿El usuario final sabe acaso lo que es una API?
--- Cita de: "Last Dragon" ---No se tu edad, pero tal vez tuviste acceso a computadoras entre el 90 y 94
--- Fin de la cita ---
No soy tan viejo, apenas tengo 23 :P
Amilius:
--- Cita de: "Eternal Idol" --- Que no esten documentadas no significa que hagan lo mismo que otras pero mas lento. Por lo tanto sigo esperando UN ejemplo de dos funciones, una no documentada y otra que si, en el cual una de las mismas sea mas rapida.
--- Fin de la cita ---
Existe un caso donde podría ser un poco más rápido llamar a la funcion "directa":
Si sabes que en determinado estado del sistema puedes llamar directamente a la función "x", la "directa no documentada" por que sabes que no ocurrirá nada anormal. Por que generalmente una función que será de uso público pues tiene que tener una buena protección para evitar que haga alguna barbaridad por que recibió datos que no estaban en el estado esperado.... o peor por que la máquina no estaba en el estado esperado. Eso implica muchas validaciones de estado, control de errores, etc. Lo cual inevitablemente tendrá algún impacto en rendimiento pero es necesario para garantizar que la función no haga algún destrozo.
Pero al mismo tiempo recurrir a esos "atajos" puede convertirse en un criadero de bugs si no conoces, si no tienes toda la documentacion de lo que puede pasar si pasas por alto las "protecciones" de la función documentada y usas el "atajo".
Para mi en lo personal si microsoft hiciera o por lo menos debiera hacer algo sin "fallar" o "más rápido" es por que debería tener a mano mayor documentación y más detallada (me refiero a todo lo "malo" que puede pasar si ocurre x condición o lo haces de z forma) para no hacerlo de la forma que se supone que no se debería hacer... :P
Eternal Idol:
--- Cita de: "Amilius" --- Existe un caso donde podría ser un poco más rápido llamar a la funcion "directa"
--- Fin de la cita ---
Cabe destacar que citas un texto donde pido un ejemplo real (me refiero a los dos funciones X e Y) y el caso que presentas es HIPOTETICO.
Bien, pese a ser hipotetico te aclaro que es despreciable cualquier comprobacion que se pueda hacer, si es que hay alguna ya que generalmente no hay y lo que si hay es transformacion de algunos parametros como por ejemplo cadenas ANSI a Wide y finalmente a UNICODE_STRING para llamar al Kernel que es donde se hacen las comprobaciones y se hacen SIEMPRE vengan los datos desde donde vengan (siempre que sea desde modo Usuario).
En el caso de la NTDLL.dll existe para poder proveer a diferentes subsystems de unas cuantas funciones y mas que nada para pasar a modo Kernel. Esta DLL es usada tanto por Win32 (Kernel32, User32, Gdi32, etc) como por el subsystem POSIX, el subsystem OS/2 y cualquier otro que Microsoft se inventara. Es una de las pautas de diseño que decidieron usar en su momento, asi es que podes usar fork en el subsystem POSIX (esta implementado con funciones de la NTDLL.dll) y no desde el subsystem Win32.
Navegación
[*] Página Anterior
Ir a la versión completa