#pragma once #define IS_PATH_SEPARATOR_U(ch) ((ch == L'\\') || (ch == L'/')) #if FUSION_WIN2000xxxx PSINGLE_LIST_ENTRY FirstEntrySList ( const SLIST_HEADER *ListHead ); VOID InitializeSListHead ( IN PSLIST_HEADER ListHead ); #define RtlInitializeSListHead InitializeSListHead #define RtlFirstEntrySList FirstEntrySList #define RtlInterlockedPopEntrySList InterlockedPopEntrySList #define RtlInterlockedPushEntrySList InterlockedPushEntrySList #define RtlInterlockedFlushSList InterlockedFlushSList #define RtlQueryDepthSList QueryDepthSList #endif inline BOOL SxspIsSListEmpty( IN const SLIST_HEADER* ListHead ) { #if _NTSLIST_DIRECT_ return FirstEntrySList(ListHead) == NULL; #else return RtlFirstEntrySList(ListHead) == NULL; #endif } inline VOID SxspInitializeSListHead( IN PSLIST_HEADER ListHead ) { RtlInitializeSListHead(ListHead); } inline PSINGLE_LIST_ENTRY SxspPopEntrySList( IN PSLIST_HEADER ListHead ) { return RtlInterlockedPopEntrySList(ListHead); } inline PSINGLE_LIST_ENTRY SxspInterlockedPopEntrySList( IN PSLIST_HEADER ListHead ) { return RtlInterlockedPopEntrySList(ListHead); } inline PSINGLE_LIST_ENTRY SxspInterlockedPushEntrySList( IN PSLIST_HEADER ListHead, IN PSINGLE_LIST_ENTRY ListEntry ) { return RtlInterlockedPushEntrySList(ListHead, ListEntry); } inline RTL_PATH_TYPE SxspDetermineDosPathNameType( PCWSTR DosFileName ) // RtlDetermineDosPathNameType_U is a bit wacky.. { if ( DosFileName[0] == '\\' && DosFileName[1] == '\\' && DosFileName[2] == '?' && DosFileName[3] == '\\' ) { if ( (DosFileName[4] == 'u' || DosFileName[4] == 'U') && (DosFileName[5] == 'n' || DosFileName[5] == 'N') && (DosFileName[6] == 'c' || DosFileName[6] == 'C') && DosFileName[7] == '\\' ) { return RtlPathTypeUncAbsolute; } if (DosFileName[4] != 0 && DosFileName[5] == ':' && DosFileName[6] == '\\' ) { return RtlPathTypeDriveAbsolute; } } #if FUSION_WIN return RtlDetermineDosPathNameType_U(DosFileName); #else return RtlPathTypeRelative; #endif }