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 (http://www.codeproject.com/KB/winsdk/vs2008_and_drivers.aspx). 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
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!
Los archivos de cabecera se incluyen no se enlazan ... te veo un poco verde para este tema.
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!
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:
#include "ntddk.h"
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
DbgPrint("Ejemplo");
return STATUS_SUCCESSFUL;
}
Cita de: Horricreu en 17 Julio 2010, 12:01 PM
EDITO: pongo el código:
#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).
Bueno es igual. Mejor dejo el Kernel Mode para más adelante siguiendo los sabios consejos de Eternal Idol :)
Saludos :P
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.
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
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