workitem.cpp

来自「pppoe client」· C++ 代码 · 共 52 行

CPP
52
字号

//********************************************************************
//	日期:	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 + =
减小字号Ctrl + -
显示快捷键?