es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una manera fácil de llamar a la API nativa de NT?

Estoy trabajando con un código bastante antiguo que se conecta directamente a la API de NT ( NtQueryDirectoryFile (... FileBothDirectoryInformation) , etc).

Los métodos que permiten a la aplicación en el modo de usuario llamar a estas funciones son bien conocidos. En mi caso, alguien (hace mucho tiempo) copió y pegó las declaraciones DDK relacionadas (estructuras y funciones) en un archivo de encabezado separado y generó ntdll.lib manualmente para enlazarlo.

Esto funciona, pero:
– Tener que hacer este trabajo manual para cada nueva función no es ideal
– Es posible introducir un error sutil (por ejemplo, olvidar hacer cumplir la alineación correcta de los datos)
– (Bastante grande) ntdll.lib termina siendo almacenado con el código fuente

Me pregunto si hay una mejor manera de hacerlo con SDK/DDK más nuevos?

Notas:
– Entorno: VS2019 con 10.0.18362.0 Windows SDK
– Conozco winternl.h – lamentablemente, no contiene todas las funciones que necesito

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en winapi, visual-studio-2019, ntdll y nt-native-api, entiendo la cuestión en cuestión. La situación actual de tener que copiar y pegar manualmente las declaraciones de DDK para cada función y generar manualmente ntdll.lib para cada nueva función no es ideal. Es un proceso tedioso y además existe el potencial de introducir un error sutil, como olvidar hacer cumplir la alineación correcta de datos. Además, el gran archivo ntdll.lib acaba siendo almacenado junto con el código fuente, lo cual no es ideal.

    Afortunadamente, hay una forma mejor de resolver este problema con el nuevo SDK/DDK. Una posible solución es utilizar las bibliotecas del Windows Driver Kit (WDK). El WDK contiene encabezados y bibliotecas para el desarrollo de controladores y servicios en modo kernel para Windows. Estas bibliotecas incluyen las declaraciones y definiciones necesarias para las funciones de la NT API, que también se pueden utilizar en aplicaciones en modo de usuario.

    Para utilizar estas bibliotecas en una aplicación en modo de usuario, puedes instalar el WDK e incluir los encabezados necesarios en tu proyecto. A continuación, puedes enlazar contra las bibliotecas adecuadas, como “ntdll.lib”, para obtener la funcionalidad deseada. Esto elimina la necesidad de copiar y generar bibliotecas de forma manual y garantiza que se hace cumplir la alineación correcta de datos.

    En resumen, utilizar las bibliotecas del WDK es una forma mejor de acceder a las funciones de la NT API en aplicaciones en modo de usuario que la copia y generación manual de bibliotecas. Proporciona una solución más eficiente y fiable, mientras que también reduce el potencial de errores.

Comments are closed.