Es algo que tratare de explicar con el poco o nulo conocimiento que me cargo en el tema.
Cuando programamos en ring0, muchas de las APIs que los pogramadores, dan por sentadas, no existen.
Tal es el caso de "MessageBox", si en un driver es llamado puedes conseguir un bonito pantallazo azul :)
¿A que se debe esto? Bueno para esto necesitamos saber la arquitectura del SO en el que deseemos programar.
En windows:
Como vemos en la imagen existe una gran diferencia entre nivel usuario y nivel kernel.
Ahora con esa explicación gráfica, una API nivel usuario es una función que llama a otra función normalmente una en nivel kernel.
Pero previamente hace algunos procedimientos para llamar a la API, veamos un ejemplo.
La API "CreateProcess" en su definición en C es:
Ahora sudefinición a nivel kernel, igualemente en C:BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
Como vemos cambia, lo que hace la API a nivel usuario es traducir, convertir, hacer calculos.NTSYSAPI
NTSTATUS
NTAPI
NtCreateProcess(
OUT PHANDLE ProcessHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN HANDLE ParentProcess,
IN BOOLEAN InheritObjectTable,
IN HANDLE SectionHandle OPTIONAL,
IN HANDLE DebugPort OPTIONAL,
IN HANDLE ExceptionPort OPTIONAL );
Creo que me fui muy al pedo y no explique nada, pero bueno les repito es el poco o nulo conocimiento que tengo.
A lo que vamos, es un compendio en formato .chm (Compiled HTML)
La biblioteca Online esta dando click en el apartado "About" y posteriormente dando click en "undocumented.ntinternals.net"
Descarga: [Enlace externo eliminado para invitados]
Saludos! y una disculpa si solo los confundi