Ring0 打印log文件

#include "ntstrsafe.h"
VOID Dbg_add_log(char * log);
VOID MyGetCurrentTime(char * szTime);

VOID Dbg_add_log(char * log)
{
    HANDLE hFile;
    OBJECT_ATTRIBUTES obj_attr;
    UNICODE_STRING obj_attr_name;
    IO_STATUS_BLOCK io_status;
    LARGE_INTEGER number;
    RtlInitUnicodeString(&obj_attr_name,L"\\??\\c:\\kevin_add.log");
    InitializeObjectAttributes(&obj_attr,&obj_attr_name,OBJ_CASE_INSENSITIVE,
        NULL,NULL);
    
    NTSTATUS status = ZwCreateFile(&hFile,GENERIC_WRITE ,&obj_attr,&io_status,
        NULL,
        FILE_ATTRIBUTE_NORMAL,
        FILE_SHARE_WRITE,FILE_OPEN_IF,FILE_SYNCHRONOUS_IO_NONALERT,NULL,0
        );
    if (!NT_SUCCESS(status))
    {
        KdPrint(("文件创建失败\r\n"));
        return;
    }
    else
        KdPrint(("文件创建成功\r\n"));
    FILE_STANDARD_INFORMATION fsi;
    status = ZwQueryInformationFile(hFile, &io_status, &fsi, sizeof (FILE_STANDARD_INFORMATION), FileStandardInformation);
    if (NT_SUCCESS(status))
    {
        number.QuadPart = fsi.EndOfFile.QuadPart;
    }
    if(strlen(log)>(1023-32))
    {
        //KdPrint("单行日字符超过1024");
        return ;
    }
    char szTime[32] = {0};
    MyGetCurrentTime(szTime);
    char log_content[1024] = {0};
    sprintf(log_content,"%s %s\r\n",szTime,log);
    PCHAR pWritetofile = (PCHAR)ExAllocatePool(PagedPool,1024);
    ULONG len = strlen(log_content);
    RtlCopyMemory(pWritetofile,log_content,strlen(log_content));
    status = ZwWriteFile(hFile,NULL,NULL,NULL,&io_status,pWritetofile,len,&number,NULL);
    
    ZwClose(hFile);
    ExFreePool(pWritetofile);
}
void MyGetCurrentTime(char * szTime)
{
 //static CHAR  szTime[128];
 LARGE_INTEGER SystemTime;
 LARGE_INTEGER LocalTime;
 TIME_FIELDS  timeFiled;
 KeQuerySystemTime(&SystemTime);
 ExSystemTimeToLocalTime(&SystemTime, &LocalTime);
 RtlTimeToTimeFields(&LocalTime, &timeFiled);
 sprintf(szTime, "%d-%02d-%02d %02d:%02d:%02d"
  , timeFiled.Year
  , timeFiled.Month
  , timeFiled.Day
  , timeFiled.Hour
  , timeFiled.Minute
  , timeFiled.Second
  );
    //return szTime;
}




转载于:https://www.cnblogs.com/qinsuixin/p/d7d92f2eb2e5a60dd064abdc489e41f0.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值