⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workitem.cpp

📁 pppoe client
💻 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 + -