__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);
}