Leaked source code of windows server 2003
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.
 
 
 
 
 
 

188 lines
3.1 KiB

#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