Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#ifndef _UTIL_H_
#define _UTIL_H_
typedef enum _WORKSTATE { WS_NotScheduled = 0, WS_Scheduled, WS_Executing, WS_Executed } WORKSTATE;
typedef VOID (*WORKITEM_EXEC_ROUTINE)( IN PVOID Args[4], UINT workType ); typedef VOID (*WORKITEM_FREE_ROUTINE)( IN PVOID Args[4], IN UINT workType );
typedef struct _WORKITEM { //
// Indicates the state of the work item
//
WORKSTATE workState;
//
// Indicates the type of work to be done
//
UINT workType;
//
// Points to the lookaside list the item was allocated from
//
PNPAGED_LOOKASIDE_LIST pLookaside; //
// Context to be passed to scheduled item
//
PVOID Args[4];
//
// Routine to be called to execute the work item
//
WORKITEM_EXEC_ROUTINE pExecRoutine;
//
// Routine to be called to free the context for the work item
//
WORKITEM_FREE_ROUTINE pFreeRoutine; //
// Associated NdisWorkItem
//
NDIS_WORK_ITEM ndisWorkItem;
} WORKITEM;
VOID InitializeWorkItemLookasideList( IN PNPAGED_LOOKASIDE_LIST pLookaside, IN ULONG tagLookaside );
WORKITEM* AllocWorkItem( IN PNPAGED_LOOKASIDE_LIST pLookaside, IN WORKITEM_EXEC_ROUTINE pExecRoutine, IN WORKITEM_FREE_ROUTINE pFreeRoutine, IN PVOID Args[4], IN UINT workType );
VOID ScheduleWorkItem( IN WORKITEM *pWorkItem );
VOID FreeWorkItem( IN WORKITEM *pWorkItem );
VOID WorkItemExec( IN NDIS_WORK_ITEM* pNdisWorkItem, IN PVOID pvContext );
typedef struct _HANDLE_CB { //
// Indicates that the entry contains a valid context pointer
//
BOOLEAN fActive;
//
// Pointer to the context saved in this entry
//
PVOID pContext;
//
// Handle value to access this particular entry
//
NDIS_HANDLE Handle; } HANDLE_CB;
typedef struct _HANDLE_TABLE_CB { //
// Points to the table that holds the Handle control blocks.
//
HANDLE_CB* HandleTable;
//
// Size of the handle table
//
UINT nTableSize;
//
// Shows the number of active handles
//
UINT nActiveHandles;
//
// Keeps the unique part of the handle.
// This is incremented everytime a handle is generated and a context is inserted
// into the handle table.
//
USHORT usKeys; } HANDLE_TABLE_CB, *PHANDLE_TABLE_CB, *HANDLE_TABLE;
#define NO_PREFERED_INDEX (USHORT) -1
HANDLE_TABLE InitializeHandleTable( IN UINT nHandleTableSize );
VOID FreeHandleTable( IN OUT HANDLE_TABLE Table );
NDIS_HANDLE InsertToHandleTable( IN HANDLE_TABLE Table, IN USHORT usPreferedIndex, IN PVOID pContext );
PVOID RetrieveFromHandleTable( IN HANDLE_TABLE Table, IN NDIS_HANDLE Handle );
USHORT RetrieveIndexFromHandle( IN NDIS_HANDLE Handle ); PVOID RetrieveFromHandleTableByIndex( IN HANDLE_TABLE Table, IN USHORT usIndex );
PVOID RetrieveFromHandleTableBySessionId( IN HANDLE_TABLE Table, IN USHORT usSessionId ); VOID RemoveFromHandleTable( IN HANDLE_TABLE Table, IN NDIS_HANDLE Handle );
USHORT RetrieveSessionIdFromHandle( IN NDIS_HANDLE Handle );
#endif
|