📄 workitem.cpp
字号:
//********************************************************************
// 日期: 2004/08/24 - 24:8:2004 20:05
// 名前: tiamo
// 描述: work item
//*********************************************************************
#include "Stdafx.h"
NPAGED_LOOKASIDE_LIST g_lookasideWorkItem;
#pragma alloc_text(PAGE,CommonWorkItemRoutine)
#pragma alloc_text("WORK",InitializeWorkItemSystem)
#pragma alloc_text("WORK",ShutdownWorkItemSystem)
#pragma alloc_text("WORK",AllocateWorkItem)
#pragma alloc_text("WORK",ScheduleWorkItem)
// init work item system
VOID InitializeWorkItemSystem()
{
NdisInitializeNPagedLookasideList(&g_lookasideWorkItem,0,0,0,sizeof(WORK_ITEM),WORK_ITEM_SIG,0);
}
// shut down
VOID ShutdownWorkItemSystem()
{
NdisDeleteNPagedLookasideList(&g_lookasideWorkItem);
}
// alloca work item
PWORK_ITEM AllocateWorkItem(WORK_ITEM_ROUTINE pRoutine,WORK_ITEM_DESTRUCTOR pDestructor)
{
ASSERT(pRoutine);
PWORK_ITEM pItem = static_cast<PWORK_ITEM>(NdisAllocateFromNPagedLookasideList(&g_lookasideWorkItem));
if(pItem)
{
pItem->m_pDestructor = pDestructor;
pItem->m_pRoutine = pRoutine;
pItem->m_ulSig = WORK_ITEM_SIG;
NdisZeroMemory(&pItem->m_param,sizeof(WORK_ITEM_PARAM));
pItem->m_param.m_ulSig = WORK_ITEM_PARAM_SIG;
NdisInitializeWorkItem(&pItem->m_ndisWorkItem,CommonWorkItemRoutine,pItem);
}
return pItem;
}
// schedule work item
VOID ScheduleWorkItem(PWORK_ITEM pItem)
{
ASSERT(pItem && pItem->m_pRoutine && pItem->m_ulSig == WORK_ITEM_SIG && pItem->m_param.m_ulSig == WORK_ITEM_PARAM_SIG);
NdisScheduleWorkItem(&pItem->m_ndisWorkItem);
}
// common routine
VOID CommonWorkItemRoutine(PNDIS_WORK_ITEM pNdisWorkItem,PVOID pContext)
{
PAGED_CODE();
ASSERT(pContext);
ASSERT(PASSIVE_LEVEL == KeGetCurrentIrql());
PWORK_ITEM pWorkItem = static_cast<PWORK_ITEM>(pContext);
ASSERT(pWorkItem->m_pRoutine && pWorkItem->m_ulSig == WORK_ITEM_SIG && pWorkItem->m_param.m_ulSig == WORK_ITEM_PARAM_SIG);
pWorkItem->m_pRoutine(pWorkItem,&pWorkItem->m_param);
if(pWorkItem->m_pDestructor)
pWorkItem->m_pDestructor(pWorkItem,&pWorkItem->m_param);
NdisFreeToNPagedLookasideList(&g_lookasideWorkItem,pWorkItem);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -