www.pudn.com > PPPOE.rar > workitem.h


 
//******************************************************************** 
//	ÈÕÆÚ:	2004/08/24 - 24:8:2004   19:55 
//	Ãûǰ:	tiamo 
//	ÃèÊö:	work item 
//********************************************************************* 
 
#pragma once 
 
#define WORK_ITEM_SIG								MAKE_SIG('W','O','R','K') 
#define WORK_ITEM_PARAM_SIG							MAKE_SIG('W','O','P','A') 
 
// forward declaration 
typedef struct __tagChannel *PCHANNEL; 
typedef struct __tagWorkItem *PWORK_ITEM; 
typedef struct __tagWorkItemParam *PWORK_ITEM_PARAM; 
 
// exec routine 
typedef VOID (*WORK_ITEM_ROUTINE)(PWORK_ITEM pItem,PWORK_ITEM_PARAM pParam); 
typedef VOID (*WORK_ITEM_DESTRUCTOR)(PWORK_ITEM pItem,PWORK_ITEM_PARAM pParam); 
 
// workitem param 
typedef struct __tagWorkItemParam 
{ 
	ULONG												m_ulSig; 
	union 
	{ 
		struct _COMMON 
		{ 
			PVOID										m_pParam[4]; 
		}COMMON; 
 
		struct _REBIND_FOR_MAKE_CALL 
		{ 
			PWORK_ITEM									m_pMakeCall; 
		}REBIND_FOR_MAKE_CALL; 
 
		struct _MAKE_CALL 
		{ 
			PCHANNEL									m_pChannel; 
		}MAKE_CALL; 
 
		struct _CLOSE_CALL 
		{ 
			PCHANNEL									m_pChannel; 
		}CLOSE_CALL; 
	}; 
}WORK_ITEM_PARAM,*PWORK_ITEM_PARAM; 
 
// work item 
typedef struct __tagWorkItem 
{ 
	ULONG												m_ulSig; 
	NDIS_WORK_ITEM										m_ndisWorkItem;				// ndis work item 
	WORK_ITEM_PARAM										m_param;					// param 
	WORK_ITEM_ROUTINE									m_pRoutine;					// routine 
	WORK_ITEM_DESTRUCTOR								m_pDestructor;				// destructor 
}WORK_ITEM,*PWORK_ITEM; 
 
// public 
extern "C" 
{ 
	// init work item system <= DISPATCH_LEVEL 
	VOID InitializeWorkItemSystem(); 
 
	// shut down <= DISPATCH_LEVEL 
	VOID ShutdownWorkItemSystem(); 
 
	// alloca work item <= DISPATCH_LEVEL 
	PWORK_ITEM AllocateWorkItem(WORK_ITEM_ROUTINE pRoutine,WORK_ITEM_DESTRUCTOR pDestructor = NULL); 
 
	// schedule work item <= DISPATCH_LEVEL 
	VOID ScheduleWorkItem(PWORK_ITEM pItem); 
} 
 
// private 
extern "C" 
{ 
	// common routine PASSIVE_LEVEL only 
	VOID CommonWorkItemRoutine(PNDIS_WORK_ITEM pNdisWorkItem,PVOID pContext); 
} 
 
// look aside list 
extern NPAGED_LOOKASIDE_LIST g_lookasideWorkItem;