Ребята, понимаю что для многих это смешно, а для меня не очень, мне нужен примерчик(участок кода), который бы создавал файл для записи данных из буфера, эта информация мне нужна для отладки.
смотря какая операционка. под Linux можно обойтись и printk, на NT IoAllocateErrorLogEntry на 9x SetupLogError ты хоть скажи что за операционка у тебя
Код (Text): DriverEntry .... // Ініціалізація файлу логу RtlInitUnicodeString( &fullFileName, L"\\??\\C:\\MouseDrv.txt" ); InitializeObjectAttributes( &oa, &fullFileName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL ); status = ZwCreateFile( &fileHandle, GENERIC_READ | GENERIC_WRITE |SYNCHRONIZE, &oa, &iosb, 0, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); .... #if LOG log("MouseDrv: DriverEntry started.\n"); #endif .... void log(const char *s) { FILE_STANDARD_INFORMATION fileInfo; NTSTATUS status; LARGE_INTEGER ByteOffset; status = ZwQueryInformationFile( fileHandle, &iosb, &fileInfo, sizeof(FILE_STANDARD_INFORMATION), FileStandardInformation ); if (!NT_SUCCESS(status)) { return; } ByteOffset = fileInfo.EndOfFile; status = ZwWriteFile(fileHandle, NULL, NULL, NULL, &iosb, s, strlen(s), &ByteOffset, NULL); if (!NT_SUCCESS(status)) { DbgPrint("Error on writing. status = %x.", status); } } .... //TODO Протестувати MouDrv_Err void MouDrv_Err(char *s, const NTSTATUS status) { char buffer[256]; sprintf(buffer, "%s;\t status = %x;\n", s, status); DbgPrint(buffer); log(buffer); } .... Он далеко не идеальный. Например можешь еще добавить уровни логирования. Код (Text): ... #define LL_INIT 0 #define LL_ERR 10 void log(const char *s, int LogLevel) { if(LogLevel < CurrentLogLevel) { return; } } Потом, если все ок, переделай это на макрос, додай __LINE__.
Еще один момент: если из кода с IRQL<=DISPATCH_LEVEL ты станешь вызывать какие-то функции, например ZwCreateFile/ZwWriteFile, то это есть некорошо, - смотри в ddk описание функций.
> aspersky, OS w2k/xp тогда юзай стандартный логгер > вопрос это твои статьи на www.insidepro.com? мои
kaspersky, материал очень интересный, не думал, что вот так вот легко можно будет пообщаться с тобой в форуме. Жду нового с интересом )))).
LuckyDevil такой механизм уже давно существует, но, насколько мне не изменяет память, начиная с winXP, имя ему WPP. Искать на osr. Примеры там тоже есть.