#ifndef _UTIL_H #define _UTIL_H NDIS_STATUS epvcAllocateTask( IN PRM_OBJECT_HEADER pParentObject, IN PFN_RM_TASK_HANDLER pfnHandler, IN UINT Timeout, IN const char * szDescription, OPTIONAL OUT PRM_TASK *ppTask, IN PRM_STACK_RECORD pSR ); VOID epvcSetPrimaryAdapterTask( PEPVC_ADAPTER pAdapter, // LOCKIN LOCKOUT PRM_TASK pTask, ULONG PrimaryState, PRM_STACK_RECORD pSR ); VOID epvcClearPrimaryAdapterTask( PEPVC_ADAPTER pAdapter, // LOCKIN LOCKOUT PRM_TASK pTask, ULONG PrimaryState, PRM_STACK_RECORD pSR ); VOID epvcSetSecondaryAdapterTask( PEPVC_ADAPTER pAdapter, // LOCKIN LOCKOUT PRM_TASK pTask, ULONG SecondaryState, PRM_STACK_RECORD pSR ); VOID epvcClearSecondaryAdapterTask( PEPVC_ADAPTER pAdapter, // LOCKIN LOCKOUT PRM_TASK pTask, ULONG SecondaryState, PRM_STACK_RECORD pSR ); VOID epvcTaskDelete ( PRM_OBJECT_HEADER pObj, PRM_STACK_RECORD psr ); NDIS_STATUS epvcCopyUnicodeString( OUT PNDIS_STRING pDest, IN PNDIS_STRING pSrc, BOOLEAN fUpCase ); VOID epvcSetFlags( IN OUT ULONG* pulFlags, IN ULONG ulMask ); VOID epvcClearFlags( IN OUT ULONG* pulFlags, IN ULONG ulMask ); ULONG epvcReadFlags( IN ULONG* pulFlags ); BOOLEAN epvcIsThisTaskPrimary ( PRM_TASK pTask, PRM_TASK* ppLocation ); VOID epvcClearPrimaryTask ( PRM_TASK* ppLocation ); #if DBG VOID Dump( IN CHAR* p, IN ULONG cb, IN BOOLEAN fAddress, IN ULONG ulGroup ); #else #define Dump(p,cb,fAddress,ulGroup ) #endif #if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || ((defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_FULL_VER > 13009175)) #define net_short(_x) _byteswap_ushort((USHORT)(_x)) #define net_long(_x) _byteswap_ulong(_x) #else __inline USHORT FASTCALL net_short( UINT NaturalData) { USHORT ShortData = (USHORT)NaturalData; return (ShortData << 8) | (ShortData >> 8); } // if x is aabbccdd (where aa, bb, cc, dd are hex bytes) // we want net_long(x) to be ddccbbaa. A small and fast way to do this is // to first byteswap it to get bbaaddcc and then swap high and low words. // __inline ULONG FASTCALL net_long( ULONG NaturalData) { ULONG ByteSwapped; ByteSwapped = ((NaturalData & 0x00ff00ff) << 8) | ((NaturalData & 0xff00ff00) >> 8); return (ByteSwapped << 16) | (ByteSwapped >> 16); } #endif NDIS_STATUS epvcAllocateTaskUsingLookasideList( IN PRM_OBJECT_HEADER pParentObject, IN PEPVC_NPAGED_LOOKASIDE_LIST pList, IN PFN_RM_TASK_HANDLER pfnHandler, IN UINT Timeout, IN const char * szDescription, OPTIONAL OUT PRM_TASK *ppTask, IN PRM_STACK_RECORD pSR ); VOID epvcInitializeLookasideList( IN OUT PEPVC_NPAGED_LOOKASIDE_LIST pLookasideList, ULONG Size, ULONG Tag, USHORT Depth ); VOID epvcDeleteLookasideList ( IN OUT PEPVC_NPAGED_LOOKASIDE_LIST pLookasideList ); PVOID epvcGetLookasideBuffer( IN PEPVC_NPAGED_LOOKASIDE_LIST pLookasideList ); VOID epvcFreeToNPagedLookasideList ( IN PEPVC_NPAGED_LOOKASIDE_LIST pLookasideList, IN PVOID pBuffer ); #endif