[KERNEL MODE][?] No puedo incluir ntddk

Iniciado por Horricreu, 16 Julio 2010, 21:11 PM

0 Miembros y 2 Visitantes están viendo este tema.

Horricreu

Buenas, estoy empezando a programar en Kernel Mode y, tengo ya descargado y configurado el compilador del DDK sin Visual Studio 2008. El caso es que quería probar como configurarlo para Visual Studio 2008. Seguí todos los pasos y, también he enlazado la librería ntddk. Cuando compilo me dice que no existe esta librería y, también lo probé de hacerlo con pragma aunque es lo mismo :-\

¿Alguna sugerencia?

Muchas gracias y saludos :P

Littlehorse

Para responderte primero es necesario saber que hiciste, paso por paso.

  • Enumera los pasos que has hecho
Mas allá que estén en el link, es necesario saber específicamente lo que has hecho para poder encontrar el error

  • Como has intentado linkear? que has puesto en pragma?
Igualmente dudo que eso tenga que ver, un tema es una referencia indefinida y otra muy distinta es que la librería ni siquiera exista. Postea los errores.

Si el error es que la librería no existe, mi primer palpito es que no agregaste los directorios (inc,lib) correctamente a los paths del VS.

  • El WDK esta configurado correctamente?
Intenta generar un mínimo ejemplo sin utilizar Visual Studio para confirmar que todo lo relevante este instalado correctamente.

Saludos!

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Eternal Idol

Los archivos de cabecera se incluyen no se enlazan ... te veo un poco verde para este tema.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Littlehorse

Por eso le pregunte que es lo que había intentado enlazar, porque al principio creí que lo de linkear era solo un error de concepto y en realidad se refería a incluir, pero como no respondió, probablemente tengas razón y haya intentado enlazar el header con pragma lib u agregándola en las dependencias adicionales. Si fue así, supongo que el error ya le habrá quedado claro ;D.

Igualmente si con linkear se refería a incluir, el problema probablemente se deba a que los directorios de los archivos a incluir no están agregados correctamente.

Horricreu, no se si estas leyendo algún libro, pero te recomendaría que vayas a la par de algún libro introductorio del tema y de paso que revises bastante la documentación del ddk.

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Horricreu

#4
Vamos a ver, ya eliminé el DDK porque me daba problemas en el PC, no se instalaba... y, como se puede hacer directamente con el Visual Studio 2008 pues mejor.

A ver, seguí los pasos de aquella Web y, en el paso número 10 decía que se podrían poner las librerías deseadas. Como decía, me fui a: Linker/Input/Additional Dependencies y puse lo siguiente: ntoskrnl.lib hal.lib ntddk.lib $(NOINHERIT)

Puede que el problema esté aquí.

Cita de: Eternal Idol en 17 Julio 2010, 02:13 AM
Los archivos de cabecera se incluyen no se enlazan ... te veo un poco verde para este tema.

Hago lo que puedo, si me confundí de nombres ahora ya lo sé :)

Cita de: Littlehorse en 17 Julio 2010, 10:12 AM
Por eso le pregunte que es lo que había intentado enlazar, porque al principio creí que lo de linkear era solo un error de concepto y en realidad se refería a incluir, pero como no respondió, probablemente tengas razón y haya intentado enlazar el header con pragma lib u agregándola en las dependencias adicionales. Si fue así, supongo que el error ya le habrá quedado claro ;D.

Igualmente si con linkear se refería a incluir, el problema probablemente se deba a que los directorios de los archivos a incluir no están agregados correctamente.

Horricreu, no se si estas leyendo algún libro, pero te recomendaría que vayas a la par de algún libro introductorio del tema y de paso que revises bastante la documentación del ddk.

Saludos!


No respondí porque en España era un poco tarde y, estaba muy cansado :xD

Saludos :P

EDITO: pongo el código:

Código (cpp) [Seleccionar]
#include "ntddk.h"

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
DbgPrint("Ejemplo");

return STATUS_SUCCESSFUL;
}

Hendrix

Cita de: Horricreu en 17 Julio 2010, 12:01 PM
EDITO: pongo el código:

Código (cpp) [Seleccionar]
#include "ntddk.h"

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
DbgPrint("Ejemplo");

return STATUS_UNSUCCESSFUL;
}


Cuando descargues el driver te va a dar BSOD ya que te falta código (Rutina de salida, como mínimo).

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Horricreu

#6
Bueno es igual. Mejor dejo el Kernel Mode para más adelante siguiendo los sabios consejos de Eternal Idol :)

Saludos :P

Eternal Idol

Cita de: Hendrix en 17 Julio 2010, 15:49 PMCuando descargues el driver te va a dar BSOD ya que te falta código (Rutina de salida, como mínimo).

En realidad la rutina de descarga es opcional y este modulo se descarga automaticamente al retornar un error.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Hendrix

#8
Cita de: Eternal Idol en 17 Julio 2010, 17:52 PM
Cita de: Hendrix en 17 Julio 2010, 15:49 PMCuando descargues el driver te va a dar BSOD ya que te falta código (Rutina de salida, como mínimo).

En realidad la rutina de descarga es opcional y este modulo se descarga automaticamente al retornar un error.

Sin dar BSOD?? Sabia que se descargaba dando un error, y por lo tanto una BSOD... siempre creí que la rutina de descarga era obligatoria  :-\

Cita de: Horricreu en 17 Julio 2010, 17:43 PM
Bueno es igual. Mejor dejo el KM para más adelante siguiendo los sabios consejos de EI :)

Saludos :P


Creo que haces bien, sigue practicando en modo usuario para luego intentar entender y poder picar código para modo kernel.


Un Saludo
"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

Eternal Idol

Cita de: Hendrix en 18 Julio 2010, 13:54 PMSin dar BSOD?? Sabia que se descargaba dando un error, y por lo tanto una BSOD... siempre creí que la rutina de descarga era obligatoria  :-\

Claro, un BSOD se produce por una excepcion no controlada (en modo Kernel) y en este caso estamos hablando de un valor de retorno no exitoso, algo totalmente esperado y no una excepcion. Lo mejor es que lo pruebes, vas a ver el mensaje en el depurador, el modulo se descargara posteriormente y el S.O. seguira funcionando sin problemas (al menos no relacionados con el modulo  ;D).

PDRIVER_UNLOAD DriverUnload
The entry point for the driver's Unload routine, if any, which is set by the DriverEntry routine when the driver initializes. If a driver has no Unload routine, this member is NULL.

La mayoria de los modulos de seguridad no tienen una rutina de descarga, de otra manera con hacer "net stop modulo" ya te saltarias la proteccion :xD
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón