Ядро Windows поддерживает только часть стандартной среды выполнения C.В частности, высокоуровневая функциональность, такая как файловые потоки, консольный ввод-вывод и работа в сети, не поддерживается.Вместо этого вам нужно использовать собственные API ядра для аналогичной функциональности.
Причина, по которой stdio.h включен в WDK, заключается в том, что некоторые части среды выполнения C предоставлены для вашего удобства.Например, вы можете использовать memcmp
(хотя нативный RtlCompareMemory
предпочтительнее).Microsoft не выбрала заголовки CRT, чтобы #ifdef вывести кусочки, которые недоступны в режиме ядра.Как только вы приобретете некоторый опыт написания драйверов для ядра, вы поймете, что в ядре возможно, а что, вероятно, не будет работать.некоторый механизм отладки / регистрации.У вас действительно есть два варианта:
DbgPrintEx
- самый простой в использовании.Это в основном вставка для printf (хотя вам нужно быть осторожным с некоторыми типами вставок строк при запуске> = DISPATCH_LEVEL).Выходные данные отправляются в отладчик или, если хотите, DbgView . - WPP - это опция промышленного уровня.Начальная кривая обучения довольно крутая (хотя в WDK есть примеры).Однако он очень гибкий (например, вы можете создавать свои собственные крики, например
Print("My IP address is: %!IPV4!", ip);
), и он очень быстрый (Microsoft поставляет трассировку WPP в неотлаженных сборках большинства компонентов Windows).