253 lines
7.6 KiB
C
253 lines
7.6 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1998-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
misc.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module contains miscellaneous constants & declarations.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Keith Moore (keithmo) 10-Jun-1998
|
||
|
Henry Sanders (henrysa) 17-Jun-1998 Merge with old httputil.h
|
||
|
Paul McDaniel (paulmcd) 30-Mar-1999 added refcounted eresource
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
|
||
|
#ifndef _MISC_H_
|
||
|
#define _MISC_H_
|
||
|
|
||
|
|
||
|
extern ULONG HttpChars[256];
|
||
|
|
||
|
#define HTTP_CHAR 0x001
|
||
|
#define HTTP_UPCASE 0x002
|
||
|
#define HTTP_LOCASE 0x004
|
||
|
#define HTTP_ALPHA (HTTP_UPCASE | HTTP_LOCASE)
|
||
|
#define HTTP_DIGIT 0x008
|
||
|
#define HTTP_CTL 0x010
|
||
|
#define HTTP_LWS 0x020
|
||
|
#define HTTP_HEX 0x040
|
||
|
#define HTTP_SEPERATOR 0x080
|
||
|
#define HTTP_TOKEN 0x100
|
||
|
|
||
|
#define URL_LEGAL 0x200
|
||
|
#define URL_TOKEN (HTTP_ALPHA | HTTP_DIGIT | URL_LEGAL)
|
||
|
|
||
|
#define IS_HTTP_UPCASE(c) (HttpChars[(UCHAR)(c)] & HTTP_UPCASE)
|
||
|
#define IS_HTTP_LOCASE(c) (HttpChars[(UCHAR)(c)] & HTTP_UPCASE)
|
||
|
#define IS_HTTP_ALPHA(c) (HttpChars[(UCHAR)(c)] & HTTP_ALPHA)
|
||
|
#define IS_HTTP_DIGIT(c) (HttpChars[(UCHAR)(c)] & HTTP_DIGIT)
|
||
|
#define IS_HTTP_HEX(c) (HttpChars[(UCHAR)(c)] & HTTP_HEX)
|
||
|
#define IS_HTTP_CTL(c) (HttpChars[(UCHAR)(c)] & HTTP_CTL)
|
||
|
#define IS_HTTP_LWS(c) (HttpChars[(UCHAR)(c)] & HTTP_LWS)
|
||
|
#define IS_HTTP_SEPERATOR(c) (HttpChars[(UCHAR)(c)] & HTTP_SEPERATOR)
|
||
|
#define IS_HTTP_TOKEN(c) (HttpChars[(UCHAR)(c)] & HTTP_TOKEN)
|
||
|
#define IS_URL_TOKEN(c) (HttpChars[(UCHAR)(c)] & URL_TOKEN)
|
||
|
|
||
|
NTSTATUS
|
||
|
InitializeHttpUtil(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Our presumed cache-line size.
|
||
|
//
|
||
|
|
||
|
#define CACHE_LINE_SIZE 32
|
||
|
|
||
|
|
||
|
//
|
||
|
// Alignment macros.
|
||
|
//
|
||
|
|
||
|
#define ROUND_UP( val, pow2 ) \
|
||
|
( ( (ULONG_PTR)(val) + (pow2) - 1 ) & ~( (pow2) - 1 ) )
|
||
|
|
||
|
|
||
|
//
|
||
|
// Calculate the dimension of an array.
|
||
|
//
|
||
|
|
||
|
#define DIMENSION(x) ( sizeof(x) / sizeof(x[0]) )
|
||
|
|
||
|
//
|
||
|
// nice MIN/MAX macros
|
||
|
//
|
||
|
|
||
|
#define MIN(a,b) ( ((a) > (b)) ? (b) : (a) )
|
||
|
#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
|
||
|
|
||
|
//
|
||
|
// Macros for swapping the bytes in a long and a short.
|
||
|
//
|
||
|
|
||
|
#if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || ((defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
|
||
|
|
||
|
#define SWAP_LONG(l) _byteswap_ulong((unsigned long)l)
|
||
|
#define SWAP_SHORT(s) _byteswap_ushort((unsigned short)s)
|
||
|
#else
|
||
|
|
||
|
#define SWAP_LONG(l) \
|
||
|
( ( ((l) >> 24) & 0x000000FFL ) | \
|
||
|
( ((l) >> 8) & 0x0000FF00L ) | \
|
||
|
( ((l) << 8) & 0x00FF0000L ) | \
|
||
|
( ((l) << 24) & 0xFF000000L ) )
|
||
|
|
||
|
#define SWAP_SHORT(s) \
|
||
|
( ( ((s) >> 8) & 0x00FF ) | \
|
||
|
( ((s) << 8) & 0xFF00 ) )
|
||
|
|
||
|
#endif
|
||
|
//
|
||
|
// Context values stored in PFILE_OBJECT->FsContext2 to identify a handle
|
||
|
// as either a control channel or an app pool.
|
||
|
//
|
||
|
|
||
|
#define UL_CONTROL_CHANNEL_CONTEXT ((PVOID)'LRTC')
|
||
|
#define UL_CONTROL_CHANNEL_CONTEXT_X ((PVOID)'rtcX')
|
||
|
#define UL_APP_POOL_CONTEXT ((PVOID)'PPPA')
|
||
|
#define UL_APP_POOL_CONTEXT_X ((PVOID)'ppaX')
|
||
|
|
||
|
#define IS_CONTROL_CHANNEL( pFileObject ) \
|
||
|
( (pFileObject)->FsContext2 == UL_CONTROL_CHANNEL_CONTEXT )
|
||
|
|
||
|
#define MARK_VALID_CONTROL_CHANNEL( pFileObject ) \
|
||
|
( (pFileObject)->FsContext2 = UL_CONTROL_CHANNEL_CONTEXT )
|
||
|
|
||
|
#define MARK_INVALID_CONTROL_CHANNEL( pFileObject ) \
|
||
|
( (pFileObject)->FsContext2 = UL_CONTROL_CHANNEL_CONTEXT_X )
|
||
|
|
||
|
#define GET_CONTROL_CHANNEL( pFileObject ) \
|
||
|
((PUL_CONTROL_CHANNEL)((pFileObject)->FsContext))
|
||
|
|
||
|
#define GET_PP_CONTROL_CHANNEL( pFileObject ) \
|
||
|
((PUL_CONTROL_CHANNEL *)&((pFileObject)->FsContext))
|
||
|
|
||
|
#define IS_APP_POOL( pFileObject ) \
|
||
|
( (pFileObject)->FsContext2 == UL_APP_POOL_CONTEXT )
|
||
|
|
||
|
#define IS_EX_APP_POOL( pFileObject ) \
|
||
|
( (pFileObject)->FsContext2 == UL_APP_POOL_CONTEXT_X )
|
||
|
|
||
|
#define MARK_VALID_APP_POOL( pFileObject ) \
|
||
|
( (pFileObject)->FsContext2 = UL_APP_POOL_CONTEXT )
|
||
|
|
||
|
#define MARK_INVALID_APP_POOL( pFileObject ) \
|
||
|
( (pFileObject)->FsContext2 = UL_APP_POOL_CONTEXT_X )
|
||
|
|
||
|
#define GET_APP_POOL_PROCESS( pFileObject ) \
|
||
|
((PUL_APP_POOL_PROCESS)((pFileObject)->FsContext))
|
||
|
|
||
|
#define GET_PP_APP_POOL_PROCESS( pFileObject ) \
|
||
|
((PUL_APP_POOL_PROCESS *)&((pFileObject)->FsContext))
|
||
|
|
||
|
#define IS_VALID_UL_NONPAGED_RESOURCE(pResource) \
|
||
|
(((pResource) != NULL) && \
|
||
|
((pResource)->Signature == UL_NONPAGED_RESOURCE_SIGNATURE) && \
|
||
|
((pResource)->RefCount > 0))
|
||
|
|
||
|
typedef struct _UL_NONPAGED_RESOURCE
|
||
|
{
|
||
|
//
|
||
|
// NonPagedPool
|
||
|
//
|
||
|
|
||
|
SINGLE_LIST_ENTRY LookasideEntry; // must be first, links
|
||
|
// into the lookaside list
|
||
|
|
||
|
ULONG Signature; // UL_NONPAGED_RESOURCE_SIGNATURE
|
||
|
|
||
|
LONG RefCount; // the reference count
|
||
|
|
||
|
UL_ERESOURCE Resource; // the actual resource
|
||
|
|
||
|
} UL_NONPAGED_RESOURCE, * PUL_NONPAGED_RESOURCE;
|
||
|
|
||
|
#define UL_NONPAGED_RESOURCE_SIGNATURE ((ULONG)'RNLU')
|
||
|
#define UL_NONPAGED_RESOURCE_SIGNATURE_X MAKE_FREE_SIGNATURE(UL_NONPAGED_RESOURCE_SIGNATURE)
|
||
|
|
||
|
|
||
|
PUL_NONPAGED_RESOURCE
|
||
|
UlResourceNew(
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
UlReferenceResource(
|
||
|
PUL_NONPAGED_RESOURCE pResource
|
||
|
REFERENCE_DEBUG_FORMAL_PARAMS
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
UlDereferenceResource(
|
||
|
PUL_NONPAGED_RESOURCE pResource
|
||
|
REFERENCE_DEBUG_FORMAL_PARAMS
|
||
|
);
|
||
|
|
||
|
#define REFERENCE_RESOURCE( pres ) \
|
||
|
UlReferenceResource( \
|
||
|
(pres) \
|
||
|
REFERENCE_DEBUG_ACTUAL_PARAMS \
|
||
|
)
|
||
|
|
||
|
#define DEREFERENCE_RESOURCE( pres ) \
|
||
|
UlDereferenceResource( \
|
||
|
(pres) \
|
||
|
REFERENCE_DEBUG_ACTUAL_PARAMS \
|
||
|
)
|
||
|
|
||
|
PVOID
|
||
|
UlResourceAllocatePool(
|
||
|
IN POOL_TYPE PoolType,
|
||
|
IN SIZE_T ByteLength,
|
||
|
IN ULONG Tag
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
UlResourceFreePool(
|
||
|
IN PVOID pBuffer
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Miscellaneous validators.
|
||
|
//
|
||
|
|
||
|
#define IS_VALID_DEVICE_OBJECT( pDeviceObject ) \
|
||
|
( ((pDeviceObject) != NULL) && \
|
||
|
((pDeviceObject)->Type == IO_TYPE_DEVICE) && \
|
||
|
((pDeviceObject)->Size == sizeof(DEVICE_OBJECT)) )
|
||
|
|
||
|
#define IS_VALID_FILE_OBJECT( pFileObject ) \
|
||
|
( ((pFileObject) != NULL) && \
|
||
|
((pFileObject)->Type == IO_TYPE_FILE) && \
|
||
|
((pFileObject)->Size == sizeof(FILE_OBJECT)) )
|
||
|
|
||
|
#define IS_VALID_IRP( pIrp ) \
|
||
|
( ((pIrp) != NULL) && \
|
||
|
((pIrp)->Type == IO_TYPE_IRP) && \
|
||
|
((pIrp)->Size == IoSizeOfIrp((pIrp)->StackCount)) )
|
||
|
|
||
|
|
||
|
|
||
|
NTSTATUS
|
||
|
TimeFieldsToHttpDate(
|
||
|
IN PTIME_FIELDS pTime,
|
||
|
OUT PWSTR pBuffer,
|
||
|
IN ULONG BufferLength
|
||
|
);
|
||
|
|
||
|
|
||
|
#endif // _MISC_H_
|
||
|
|