📄 workitem.cpp
字号:
//********************************************************************
// 日期: 2004/08/15 - 15:8:2004 7:05
// 名前: tiamo
// 描述: work item
//*********************************************************************
#include "Stdafx.h"
// allocate work item
PPPPOE_WORK_ITEM AllocateWorkItem(PNPAGED_LOOKASIDE_LIST pLookasideList,VOID (*pRoutine)(PPPPOE_WORK_ITEM,PPPPOE_WORK_ITEM_PARAM,PVOID),
PVOID pAdditionalParam,VOID (*pDestructor)(PPPPOE_WORK_ITEM))
{
PPPPOE_WORK_ITEM pItem = static_cast<PPPPOE_WORK_ITEM>(NdisAllocateFromNPagedLookasideList(pLookasideList));
if(pItem)
{
pItem->m_pAdditionalParam = pAdditionalParam;
pItem->m_pDestructor = pDestructor;
pItem->m_pRoutine = pRoutine;
pItem->m_pLookasideList = pLookasideList;
NdisInitializeWorkItem(&pItem->m_ndisWorkItem,GlobalExecWorkItem,pItem);
}
return pItem;
}
// schedule work item
VOID ScheduleWorkItem(PPPPOE_WORK_ITEM pWorkItem)
{
NdisScheduleWorkItem(&pWorkItem->m_ndisWorkItem);
pWorkItem->m_ulState = WORK_ITEM_LIVE;
}
// global exec routine
VOID GlobalExecWorkItem(PNDIS_WORK_ITEM pNdisWorkItem,PVOID pContext)
{
PPPPOE_WORK_ITEM pWorkItem = static_cast<PPPPOE_WORK_ITEM>(pContext);
if(pWorkItem->m_ulState != WORK_ITEM_DEAD)
{
pWorkItem->m_pRoutine(pWorkItem,&pWorkItem->m_param,pWorkItem->m_pAdditionalParam);
}
pWorkItem->m_ulState = WORK_ITEM_FREE;
if(pWorkItem->m_pDestructor)
pWorkItem->m_pDestructor(pWorkItem);
NdisFreeToNPagedLookasideList(pWorkItem->m_pLookasideList,pWorkItem);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -