首页
社区
课程
招聘
[原创]自己动手实现dbgprint
发表于: 2016-6-25 11:28 6902

[原创]自己动手实现dbgprint

2016-6-25 11:28
6902

内核编程刚刚入门,打算自己写点东西,正好书上提到dbgprint,就自己写一个吧,哪错了希望各位大神指出来批评~~~,好直接进入正题。
首先必须要导出一个供其他内核模块用的函数

__declspec(dllexport) NTSTATUS myDbgPrint(CHAR *data);
[CODE]typedef struct _DBGDATA
{
	TIME_FIELDS time;
	CHAR data[MAX_DATA_LENGTH];
}DBGDATA,*PDBGDATA;
typedef struct _DBGDATALIST
{
	LIST_ENTRY ListEntry;
	DBGDATA listData;
}DBGDATALIST, *PDBGDATALIST;
__declspec(dllexport) NTSTATUS myDbgPrint(CHAR *data)
{
//获取互斥锁
	KeWaitForSingleObject(&ListMutex, Executive, KernelMode, FALSE, NULL);
//为队列分配内存
	PDBGDATALIST temp = ExAllocatePool(PagedPool, sizeof(DBGDATALIST));
	if (temp == NULL)
	{
		KeReleaseMutex(&ListMutex, FALSE);
		return STATUS_UNSUCCESSFUL;
	}
	RtlCopyMemory(&temp->listData.data, data, MAX_DATA_LENGTH);
	LARGE_INTEGER snow, now;

	KeQuerySystemTime(&snow);
	//转换为当地时间
	
	ExSystemTimeToLocalTime(&snow, &now);
	//转换为人们可以理解的时间格式
	RtlTimeToTimeFields(&now, &temp->listData.time);
//如果需要唤醒工作者线程则唤醒
	if (needWakeUp);
	{
		KeSetEvent(&WorkThreadEvent, 0, FALSE);
	}
//将调试信息挂入队列
	InsertTailList(&dbgPrintHead, &temp->ListEntry);
//释放互斥锁
	KeReleaseMutex(&ListMutex, FALSE);
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (1)
雪    币: 207
活跃值: (26)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
不好意思不好意思,我以为直接传到看雪后台就能直接看到图片,于是就没管了,现在图片放出来了。好关键的东西~~~~
2016-6-28 23:41
0
游客
登录 | 注册 方可回帖
返回
//