Sandboxie/SandboxieTools/ImBox/dc/include/defines.h

170 lines
4.5 KiB
C

#ifndef _DEFINES_H_
#define _DEFINES_H_
#ifdef IS_DRIVER
#include <ntifs.h>
#endif
#ifdef _UEFI
#include <Uefi.h>
#endif
#if !defined(IS_DRIVER) && !defined(BOOT_LDR) && !defined(_UEFI)
#include <windows.h>
#include <stdio.h>
#endif
#ifndef _WCHAR_T_DEFINED
typedef short wchar_t;
#endif
typedef unsigned __int64 u64;
typedef unsigned long u32;
typedef unsigned short u16;
typedef unsigned char u8;
typedef __int64 s64;
typedef long s32;
typedef short s16;
typedef char s8;
//#ifndef size_t
//#define size_t UINTN
//#endif
#define d8(_x) ((u8)(_x))
#define d16(_x) ((u16)(_x))
#define d32(_x) ((u32)(_x))
#define d64(_x) ((u64)(_x))
#define dSZ(_x) ((size_t)(_x))
typedef void (*callback)(void*);
typedef void (*callback_ex)(void*,void*);
#define BE16(x) _byteswap_ushort(x)
#define BE32(x) _byteswap_ulong(x)
#define BE64(x) _byteswap_uint64(x)
#define ROR64(x,y) (_rotr64((x),(y)))
#define ROL64(x,y) (_rotl64((x),(y)))
#define ROL32(x,y) (_rotl((x), (y)))
#define ROR32(x,y) (_rotr((x), (y)))
#define bsf(x,y) (_BitScanForward((x),(y)))
#define bsr(x,y) (_BitScanReverse((x),(y)))
#define align16 __declspec(align(16))
#define naked __declspec(naked)
#define p8(_x) ((u8*)(_x))
#define p16(_x) ((u16*)(_x))
#define p32(_x) ((u32*)(_x))
#define p64(_x) ((u64*)(_x))
#define pv(_x) ((void*)(_x))
#define ppv(_x) ((void**)(_x))
#define in_reg(a,base,size) ( (a >= base) && (a < base+size) )
#define is_intersect(start1, size1, start2, size2) ( max(start1, start2) < min(start1 + size1, start2 + size2) )
#define addof(a,o) ( pv(p8(a)+o) )
#ifndef offsetof
#define offsetof(type,field) ( d32(&(((type *)0)->field)) )
#endif
#ifdef BOOT_LDR
#pragma warning(disable:4142)
typedef unsigned long size_t;
#pragma warning(default:4142)
#endif
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef _align
#define _align(size, align) (((size) + ((align) - 1)) & ~((align) - 1))
#endif
#ifndef PAGE_SIZE
#define PAGE_SIZE 0x1000
#endif
#ifndef bittest
#ifdef _M_IX86
#define bittest(a,b) ( _bittest(p32(&a),b) )
#else
#define bittest(a,b) ( sizeof(a) == sizeof(u32) ? _bittest(p32(&a),b):_bittest64(p64(&a),b) )
#endif /* _M_IX86 */
#endif /* bittest */
#ifndef NULL
#define NULL pv(0)
#endif
#ifndef MAX_PATH
#define MAX_PATH 260
#endif
#define sizeof_w(x) ( sizeof(x) / sizeof(wchar_t) ) /* return number of wide characters in array */
#define array_num(x) ( sizeof(x) / sizeof((x)[0]) ) /* return number of elements in array */
#if 0
#define zeromem(m,s) memset(m, 0, s)
/* size optimized intrinsics */
#define mincpy(a,b,c) __movsb(pv(a), pv(b), (size_t)(c))
#define memset(a,b,c) __stosb(pv(a), (char)(b), (size_t)(c))
/* zeromem for 4byte aligned blocks */
#define zerofast(m,s) __stosd(pv(m),0,(size_t)(s) / 4)
/* fast intrinsics for memory copying and zeroing */
#ifdef _M_IX86
#define fastcpy(a,b,c) __movsd(pv(a), pv(b), (size_t)(c) / 4)
#define autocpy(a,b,c) { \
if (!((c) % 4)) { __movsd(pv(a), pv(b), (size_t)(c) / 4); } else \
if (!((c) % 2)) { __movsw(pv(a), pv(b), (size_t)(c) / 2); } else \
{ __movsb(pv(a), pv(b), (size_t)(c)); } }
#define zeroauto(m,s) { \
if (!((s) % 4)) { __stosd(pv(m), 0, (size_t)(s) / 4); } else \
if (!((s) % 2)) { __stosw(pv(m), 0, (size_t)(s) / 2); } else \
{ __stosb(pv(m), 0, (size_t)(s)); } }
#define _disable() { __asm { cli }; }
#define _enable() { __asm { sti }; }
#else
#define fastcpy(a,b,c) __movsq(pv(a), pv(b), (size_t)(c) / 8)
#define autocpy(a,b,c) { \
if (!((c) % 8)) { __movsq(pv(a), pv(b), (size_t)(c) / 8); } else \
if (!((c) % 4)) { __movsd(pv(a), pv(b), (size_t)(c) / 4); } else \
if (!((c) % 2)) { __movsw(pv(a), pv(b), (size_t)(c) / 2); } else \
{ __movsb(pv(a), pv(b), (size_t)(c)); } }
#define zeroauto(m,s) { \
if (!((s) % 8)) { __stosq(pv(m), 0, (size_t)(s) / 8); } else \
if (!((s) % 4)) { __stosd(pv(m), 0, (size_t)(s) / 4); } else \
if (!((s) % 2)) { __stosw(pv(m), 0, (size_t)(s) / 2); } else \
{ __stosb(pv(m), 0, (size_t)(s)); } }
#endif
#endif
#define lock_inc(_x) ( _InterlockedIncrement(_x) )
#define lock_dec(_x) ( _InterlockedDecrement(_x) )
#define lock_xchg(_p, _v) ( _InterlockedExchange(_p, _v) )
#define lock_xchg_add(_p, _v) ( _InterlockedExchangeAdd(_p, _v) )
#ifndef _UEFI
#pragma warning(disable:4995)
#pragma intrinsic(memcpy,memset,memcmp)
#pragma intrinsic(strcpy,strcmp,strlen)
#pragma intrinsic(strcat)
#pragma warning(default:4995)
#endif
#endif