CCHAR buf[16]; где-то, например в обратной ф-ии считывая коды клавиш: sprintf(dev_ext->mass_zapis[ngran + i], "%x", KeyData.MakeCode) (аналогично DbgPrint) в другом месте: sprintf(buf, "%d", dev_ext->mass_zapis); status = ZwWriteFile(hfile, NULL, NULL, NULL, &io_status_block, buf, sizeof(CCHAR), NULL, NULL); в результате в файл записываются квадраты, а не буквы. Как сделать правильно? Может есть ссылка на статью по правилам работы со строками в ядре? Что за типы данных, из статей б-менее понятна только структура UNICODE_STRING. Спасибо!
иди сюда: http://four-f.narod.ru/ Хотя оттуда не качается По-крайней мере у меня. Так что ищите тут, на васме
Надо правой кнопкой Сэйв таргет аз и тогда качается КмдКит, по крайней мере. У меня*)) Только где сам Фоур-Ф, он прошлый раз мне помог наполовину, обещал ежели чего продолжить. Но не пишет...
Таких как ты, у него десятки и сотни Закачай DbgView и перед записью в файл проверяй при помощи DbgPrint, что находится в записываемом буфере.
DbgPrint пишет всё нормально, а в файле оказываются квадраты. Ладно, ещё попробую поискать исходники. Я ведь хотел вообще краткую теорию как работать со строками в ядре. Честно говоря, я даже в обычном режиме часто ошибки делаю со строками*))) sprintf(dev_ext->mass_zapis[ngran + i], "%x", KeyData.MakeCode) Здесь можно применять только %x, %s вызовет синий экран. значит в массив mass_zapis запишется число. Теперь как его преобразовать в строку. То есть я записываю символ, приходящий с клавиатуры в массив в обработчике, а потом его в файл записываю в другом месте, где можно вызвыть ф-ю записи в файл. В обычном коде я бы записал этот символ с %s как строку, а потом бы переписал как строку в файл.
Подожди, какое число ты хочешь преобразовать в строковое выражение и вывести через буфер в файл? sprintf(dev_ext->mass_zapis[ngran + i], "%x", KeyData.MakeCode) (аналогично DbgPrint) в другом месте: sprintf(buf, "%d", dev_ext->mass_zapis); Это не кажется странным? Число KeyData.MakeCode преобразуется в строку, а затем к строке применяется %d??? Какого рода переменные dev_ext->mass_zapis[ngran + i] и KeyData.MakeCode? Если dev_ext->mass_zapis[ngran + i] - это буфер достаточной длины, чтобы в нем поместилась строка типа "F0053ADC" (9 байт), то форматтер можно %s, в противном случае естественно будет синий экран. Возьми и попробуй так: Код (Text): char buf[128]; sprintf (buf, "%s", KeyData[i].MakeCode); status = ZwWriteFile(hfile, NULL, NULL, NULL, &io_status_block, buf, sizeof(CCHAR), NULL, NULL); Значение KeyData.MakeCode будет в виде строки записано в файл