Нужно писать в журнал (txt файл) при старте ОС и при выключении. Запись идет в процедурах DiverEntry и MJ_SHUTDOWN. ZwWriteFile вызывается два раза (пишем данные из разных блоков памяти). Примерно с переодичностью 1/5 ZwWriteFile возвращает STATUS_PENDING и один из блоков не записывается. Перекомбинировал все параметры в ZwCreateFile, не помогло. Драйвер запускается как Service_auto_start.
я так понял ты пишешь в файл асинхронно, и никакую синхронизацию в блоках ты не делаешь? Исчо можно кодик положить
Эта процедура вызывается из DriverEntry. WRITE_PROC proc pTextWORD,SizeTextWORD local FileHandleWORD local InitStruct:OBJECT_ATTRIBUTES local My_Status:IO_STATUS_BLOCK ;int 3 lea eax,InitStruct assume eax:ptr OBJECT_ATTRIBUTES sub edx,edx mov [eax]._Length,sizeof OBJECT_ATTRIBUTES mov [eax].ObjectName,offset FilePath mov [eax].Attributes,edx mov [eax].RootDirectory,edx mov [eax].SecurityDescriptor,edx mov [eax].SecurityQualityOfService,edx assume eax:nothing sub edx,edx invoke ZwCreateFile,addr FileHandle,FILE_APPEND_DATA,addr InitStruct,addr My_Status,edx,FILE_ATTRIBUTE_NORMAL,\ edx,FILE_OPEN_IF,edx,edx,edx test eax,eax jnz FileError sub edx,edx invoke ZwWriteFile,FileHandle,edx,edx,edx,addr My_Status,offset SysCrashText,\ sizeof SysCrashText,edx,edx sub edx,edx invoke ZwWriteFile,FileHandle,edx,edx,edx,addr My_Status,pText,\ SizeText,edx,edx invoke ZwClose,FileHandle sub eax,eax ret FileError: mov eax,0fabcdeh ret WRITE_PROC endp