Click here to Skip to main content
15,893,814 members
Articles / Programming Languages / C++

Driver to Hide Processes and Files. Second Edition: Splicing

,
Rate me:
Please Sign up or sign in to vote.
4.93/5 (33 votes)
11 Mar 2011CPOL9 min read 69.5K   8.8K   115  
This article describes a driver that hides processes and files using the method of splicing.
/*
 * Copyright (c) 1999
 * Silicon Graphics Computer Systems, Inc.
 *
 * Copyright (c) 1999 
 * Boris Fomitchev
 *
 * This material is provided "as is", with absolutely no warranty expressed
 * or implied. Any use is at your own risk.
 *
 * Permission to use or copy this software for any purpose is hereby granted 
 * without fee, provided the above notices are retained on all copies.
 * Permission to modify the code and to distribute modified code is granted,
 * provided the above notices are retained, and a notice that the code was
 * modified is included with the above copyright notice.
 *
 */ 


#ifndef _STLP_C_LOCALE_H
# define _STLP_C_LOCALE_H

/*
 * Implementation dependent definitions
 */
#ifdef __cplusplus
#  include <stl/_config.h>
#endif

#if defined(__sgi) 
# if defined(ROOT_65) /* IRIX 6.5.x */
#  include <sgidefs.h>
#  include <standards.h>
#  include <wchar.h>
#  include <ctype.h>

# else
                  /* IRIX pre-6.5 */
#  include <sgidefs.h>
#  include <standards.h>

#  if !defined(_SIZE_T) && !defined(_SIZE_T_)
#   define _SIZE_T
#    if (_MIPS_SZLONG == 32)
typedef unsigned int    size_t;
#    endif
#    if (_MIPS_SZLONG == 64)
typedef unsigned long   size_t;
#    endif
#   endif

#   ifndef _WCHAR_T
#    define _WCHAR_T
#     if (_MIPS_SZLONG == 32)
typedef long wchar_t;
#     endif
#     if (_MIPS_SZLONG == 64)
typedef __int32_t wchar_t;
#     endif
#    endif /* _WCHAR_T */

#    ifndef _WINT_T
#     define _WINT_T
#     if (_MIPS_SZLONG == 32)
        typedef long    wint_t;
#     endif
#     if (_MIPS_SZLONG == 64)
        typedef __int32_t wint_t;
#     endif
#    endif /* _WINT_T */

#    ifndef _MBSTATE_T
#    define _MBSTATE_T
#    ifdef _MSC_VER
		typedef int		mbstate_t;
#    else
        typedef char    mbstate_t;
#    endif
#    endif /* _MBSTATE_T */

#   endif /* ROOT65 */ 

#  else /* __sgi */

# ifdef __cplusplus
# ifndef _STLP_CSTDDEF
#  include <cstddef>
# endif
# ifndef _STLP_CWCHAR_H
#  include <stl/_cwchar.h>
# endif
# ifndef _STLP_CCTYPE
#  include <cctype>
# endif
# else
#  include <stddef.h>
#  include <wchar.h>
#  include <ctype.h>
# endif

#endif /* __sgi */

/*
 * GENERAL FRAMEWORK
 */

struct _Locale_ctype;
struct _Locale_numeric;
struct _Locale_time;
struct _Locale_collate;
struct _Locale_monetary;
struct _Locale_messages;

/*
  Bitmask macros.  
*/

/*
 * For narrow characters, we expose the lookup table interface.
 */

/* Internal bitmask macros, os-specific. */

#if defined(__sgi)              /* IRIX */

#define _Locale_S      0x00000008      /* Spacing character */
#define _Locale_A      0x00004000      /* Alphabetical characters only */
#define _Locale_B      0x00000040      /* Obsolete: was space char only */
#define _Locale_PR     0x00008000      /* Printable characters only */
#define _Locale_G      0x40000000      /* Graphic characters only */
#define _Locale_BL     0x80000000      /* The blank character class */

/* Public bitmask macros, must be defined for every OS. These values, of
 * course, are specific to IRIX. */

#define _Locale_CNTRL  0x00000020      /* Control character */
#define _Locale_UPPER  0x00000001      /* Upper case */
#define _Locale_LOWER  0x00000002      /* Lower case */
#define _Locale_DIGIT  0x00000004      /* Numeral (digit) */
#define _Locale_XDIGIT 0x00000080      /* heXadecimal digit */
#define _Locale_PUNCT  0x00000010      /* Punctuation */
#define _Locale_SPACE  (_Locale_S | _Locale_BL)
#define _Locale_PRINT  (_Locale_PUNCT | _Locale_UPPER | _Locale_LOWER | \
                        _Locale_DIGIT | _Locale_A | _Locale_XDIGIT | \
                        _Locale_PR)
#define _Locale_ALPHA  _Locale_A

/*
* All of these except for graph and blank are from the C standard;
* graph and blank are XPG4.  (graph in XPG4 doesn't mean quite the
* same thing as graph in the C++ library)
*/

#endif /* IRIX */


#if defined( __Lynx__ )
 /* azov: On Lynx isalpha defined as (_U | _L), which gives us a mask 
  * unusable in ctype_table. So we have to redefine it and use hard-coded 
  * numbers (to avoid potential clashes if system headers change).
  *
  * P.S. Actually, I see no reason in using platform-specific masks - 
  * having just one set of masks for all platforms should work just as
  * well - we only use them internally and they don't have to be equal 
  * to whatever defined in local ctype.h
  *
  */ 
#   define _Locale_CNTRL  040     /* _C, Control character */
#   define _Locale_UPPER  01      /* _U, Upper case */
#   define _Locale_LOWER  02      /* _L, Lower case */
#   define _Locale_DIGIT  04      /* _N, Numeral (digit) */
#   define _Locale_XDIGIT 0200    /* _X, heXadecimal digit */
#   define _Locale_PUNCT  020     /* _P, Punctuation */
#   define _Locale_SPACE  010     /* _S, Spacing */
#   define _Locale_ALPHA  040000  /* none, Alphanumerical */
#   define _Locale_PRINT  (_Locale_PUNCT | _Locale_UPPER | _Locale_LOWER | \
                           _Locale_DIGIT | _Locale_ALPHA | _Locale_XDIGIT |\
                           _Locale_SPACE ) /* Printable */
# endif /* __Lynx__ */

#if defined(__GNUC__) || defined (__BORLANDC__) || defined (__COMO__)

# if defined (__CYGWIN__)

#  define _Locale_CNTRL  040
#  define _Locale_UPPER  02
#  define _Locale_LOWER  01
#  define _Locale_DIGIT  04
#  define _Locale_XDIGIT ( 0100 | _Locale_DIGIT )
#  define _Locale_PUNCT  020
#  define _Locale_SPACE  010
#  define _Locale_ALPHA  (_Locale_UPPER | _Locale_LOWER)
#  define _Locale_PRINT  (_Locale_ALPHA | _Locale_DIGIT | _Locale_PUNCT | 0200 )

# elif defined (__FreeBSD__)

# define _Locale_CNTRL _CTYPE_C
# define _Locale_UPPER _CTYPE_U
# define _Locale_LOWER _CTYPE_L
# define _Locale_DIGIT _CTYPE_D
# define _Locale_XDIGIT _CTYPE_X
# define _Locale_PUNCT _CTYPE_P
# define _Locale_SPACE _CTYPE_S
# define _Locale_PRINT _CTYPE_R
# define _Locale_ALPHA _CTYPE_A

# elif defined (__NetBSD__) || defined (__amigaos__)
 
#  define _Locale_CNTRL _C
#  define _Locale_UPPER _U
#  define _Locale_LOWER _L
#  define _Locale_DIGIT _N
#  define _Locale_XDIGIT (_N|_X)
#  define _Locale_PUNCT _P
#  define _Locale_SPACE _S
#  define _Locale_PRINT (_P|_U|_L|_N|_B)
#  define _Locale_ALPHA (_U|_L)
# elif defined(__EMX__) /* OS/2 with emx runtime */
#  define _Locale_CNTRL _CNTRL
#  define _Locale_UPPER _UPPER
#  define _Locale_LOWER _LOWER
#  define _Locale_DIGIT _DIGIT
#  define _Locale_XDIGIT _XDIGIT
#  define _Locale_PUNCT _PUNCT
#  define _Locale_SPACE _SPACE
#  define _Locale_PRINT _PRINT
#  define _Locale_ALPHA (_UPPER|_LOWER)

# elif defined(_STLP_USE_GLIBC) /* linux, using the gnu compiler */

/* This section uses macros defined in the gnu libc ctype.h header */

#  define _Locale_CNTRL  _IScntrl
#  define _Locale_UPPER  _ISupper
#  define _Locale_LOWER  _ISlower
#  define _Locale_DIGIT  _ISdigit
#  define _Locale_XDIGIT _ISxdigit
#  define _Locale_PUNCT  _ISpunct
#  define _Locale_SPACE  _ISspace
#  define _Locale_PRINT  _ISprint
#  define _Locale_ALPHA  _ISalpha

#  endif /* GLIBC */

#endif /* gnu */

#if ( defined(__sun) && defined (__SVR4) ) \
    || (defined (__digital__) && defined (__unix__)) \
    || defined(_AIX)
/* fbp : condition from AT&T code*/
#if !(defined(__XPG4_CHAR_CLASS__) || defined(_XPG4_2) || \
    (defined(_XOPEN_SOURCE) && (_XOPEN_VERSION - 0 == 4))) && ! defined (_ISCNTRL)
  /* fbp : on 2.5.1, the defines are different ;( */
  // # if ( defined (__sun) && defined (__SVR4) && ! defined (_ISCNTRL) )
#   define _ISCNTRL _C
#   define _ISUPPER _U
#   define _ISLOWER _L
#   define _ISDIGIT _N
#   define _ISXDIGIT _X
#   define _ISPUNCT _P
#   define _ISSPACE _S
#   define _ISPRINT (_P | _U | _L | _N | _B)
#   define _ISALPHA (_U | _L)
#  endif 

#  define _Locale_CNTRL  _ISCNTRL
#  define _Locale_UPPER  _ISUPPER
#  define _Locale_LOWER  _ISLOWER
#  define _Locale_DIGIT  _ISDIGIT
#  define _Locale_XDIGIT _ISXDIGIT
#  define _Locale_PUNCT  _ISPUNCT
#  define _Locale_SPACE  _ISSPACE
#  define _Locale_PRINT  _ISPRINT
#  define _Locale_ALPHA  _ISALPHA
#elif defined (__MWERKS__)
#  define _Locale_CNTRL  __control_char
#  define _Locale_UPPER  __upper_case
#  define _Locale_LOWER  __lower_case
#  define _Locale_DIGIT  __digit
#  define _Locale_XDIGIT __hex_digit
#  define _Locale_PUNCT  __punctuation
#  define _Locale_SPACE  __space_char
#  define _Locale_PRINT  __printable
#  define _Locale_ALPHA  __alphanumeric
#elif defined (__BORLANDC__)
#  define _Locale_CNTRL  _IS_CTL
#  define _Locale_UPPER  _IS_UPP
#  define _Locale_LOWER  _IS_LOW
#  define _Locale_DIGIT  _IS_DIG
#  define _Locale_XDIGIT _IS_HEX
#  define _Locale_PUNCT  _IS_PUN
#  define _Locale_SPACE  _IS_SP
#  define _Locale_PRINT  (_IS_SP|_IS_PUN|_IS_UPP|_IS_LOW|_IS_DIG)
#  define _Locale_ALPHA  _IS_ALPHA
#elif defined (_MSC_VER) || defined (__MINGW32__)
#  define _Locale_CNTRL  _CONTROL
#  define _Locale_UPPER  _UPPER
#  define _Locale_LOWER  _LOWER
#  define _Locale_DIGIT  _DIGIT
#  define _Locale_XDIGIT _HEX
#  define _Locale_PUNCT  _PUNCT
#  define _Locale_SPACE  _SPACE
#  define _Locale_PRINT  (_ALPHA | _DIGIT | _BLANK | _PUNCT)
// is this one has to be so complex ?  
#  define _Locale_ALPHA  ( _ALPHA & ~ (_UPPER | _LOWER )) 
#elif defined (__DMC__)
#  define _Locale_CNTRL  _CONTROL
#  define _Locale_UPPER  _UPPER
#  define _Locale_LOWER  _LOWER
#  define _Locale_DIGIT  _DIGIT
#  define _Locale_XDIGIT _HEX
#  define _Locale_PUNCT  _PUNCT
#  define _Locale_SPACE  _SPACE
#  define _Locale_PRINT  (_UPPER | _LOWER | _DIGIT | _PUNCT | _SPACE)
#  define _Locale_ALPHA  _ALPHA
#elif defined(__MRC__) || defined(__SC__)		//*TY 02/24/2000 - added support for MPW
#  define _Locale_CNTRL  _CTL
#  define _Locale_UPPER  _UPP
#  define _Locale_LOWER  _LOW
#  define _Locale_DIGIT  _DIG
#  define _Locale_XDIGIT _HEX
#  define _Locale_PUNCT  _PUN
#  define _Locale_SPACE  _BLA
#  define _Locale_PRINT  (_UPP | _LOW | _DIG | _PUN | _BLA)
#  define _Locale_ALPHA  (_UPP | _LOW)
#elif defined(__MLCCPP__)
#  define _Locale_CNTRL    1
#  define _Locale_UPPER    2
#  define _Locale_LOWER    4
#  define _Locale_DIGIT    8
#  define _Locale_XDIGIT  16
#  define _Locale_PUNCT   32
#  define _Locale_SPACE   64
#  define _Locale_PRINT  128
#  define _Locale_ALPHA  256

# elif defined (__GNUC__) && defined (__APPLE__)
 
# define _Locale_CNTRL _C
# define _Locale_UPPER _U
# define _Locale_LOWER _L
# define _Locale_DIGIT _D
# define _Locale_XDIGIT _X
# define _Locale_PUNCT _P
# define _Locale_SPACE _S
# define _Locale_PRINT _R
# define _Locale_ALPHA _A

# elif defined (__hpux) || defined (__osf__)
 
#   if defined(__HP_aCC) && !defined(_INCLUDE_HPUX_SOURCE)
#     define _ISALPHA      0x001
#     define _ISALNUM      0x002
#     define _ISBLANK      0x004
#     define _ISCNTRL      0x008
#     define _ISDIGIT      0x010
#     define _ISGRAPH      0x020
#     define _ISLOWER      0x040
#     define _ISPRINT      0x080
#     define _ISPUNCT      0x100
#     define _ISSPACE      0x200
#     define _ISUPPER      0x400
#     define _ISXDIGIT     0x800
#  endif
#  define _Locale_CNTRL  _ISCNTRL
#  define _Locale_UPPER  _ISUPPER
#  define _Locale_LOWER  _ISLOWER
#  define _Locale_DIGIT  _ISDIGIT
#  define _Locale_XDIGIT _ISXDIGIT
#  define _Locale_PUNCT  _ISPUNCT
#  define _Locale_SPACE  _ISSPACE
#  define _Locale_PRINT  _ISPRINT
#  define _Locale_ALPHA  _ISALPHA
# elif defined (__MVS__) || defined(__OS400__)
#  define _Locale_CNTRL __ISCNTRL
#  define _Locale_UPPER __ISUPPER
#  define _Locale_LOWER __ISLOWER
#  define _Locale_DIGIT __ISDIGIT
#  define _Locale_XDIGIT __ISXDIGIT
#  define _Locale_PUNCT __ISPUNCT
#  define _Locale_SPACE __ISSPACE
#  define _Locale_PRINT __ISPRINT
#  define _Locale_ALPHA __ISALPHA
# elif defined (__QNXNTO__)  || defined (__WATCOMC__)
# define _Locale_CNTRL _CNTRL
# define _Locale_UPPER _UPPER
# define _Locale_LOWER _LOWER
# define _Locale_DIGIT _DIGIT
# define _Locale_XDIGIT _XDIGT
# define _Locale_PUNCT _PUNCT
# define _Locale_SPACE _SPACE
# define _Locale_PRINT _PRINT
# define _Locale_ALPHA (_UPPER | _LOWER)
#elif defined (__DJGPP)
#  define _Locale_CNTRL  __dj_ISCNTRL
#  define _Locale_UPPER  __dj_ISUPPER
#  define _Locale_LOWER  __dj_ISLOWER
#  define _Locale_DIGIT  __dj_ISDIGIT
#  define _Locale_XDIGIT __dj_ISXDIGIT
#  define _Locale_PUNCT  __dj_ISPUNCT
#  define _Locale_SPACE  __dj_ISSPACE
#  define _Locale_PRINT  __dj_ISPRINT
#  define _Locale_ALPHA  __dj_ISALPHA
#elif defined (_STLP_SCO_OPENSERVER)
#  define _Locale_CNTRL _C
#  define _Locale_UPPER _U
#  define _Locale_LOWER _L
#  define _Locale_DIGIT _N
#  define _Locale_XDIGIT _X
#  define _Locale_PUNCT _P
#  define _Locale_SPACE _S
#  define _Locale_PRINT _R
#  define _Locale_ALPHA _A
#elif defined (__NCR_SVR)
#  define _Locale_CNTRL _C
#  define _Locale_UPPER _U
#  define _Locale_LOWER _L
#  define _Locale_DIGIT _N
#  define _Locale_XDIGIT _X
#  define _Locale_PUNCT _P
#  define _Locale_SPACE _S
#  define _Locale_PRINT (_P | _U | _L | _N | _B)
#  define _Locale_ALPHA (_U | _L)
#elif defined (_CRAY)
#  define _Locale_CNTRL  _CNTRL
#  define _Locale_UPPER  _UPPER
#  define _Locale_LOWER  _LOWER
#  define _Locale_DIGIT  _DIGIT
#  define _Locale_XDIGIT _XDIGIT
#  define _Locale_PUNCT  _PUNCT
#  define _Locale_SPACE  _SPACE
#  define _Locale_PRINT  _PRINT
#  define _Locale_ALPHA  _ALPHA
#endif

# endif /* _STLP_C_LOCALE_H */

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Chief Technology Officer Apriorit Inc.
United States United States
ApriorIT is a software research and development company specializing in cybersecurity and data management technology engineering. We work for a broad range of clients from Fortune 500 technology leaders to small innovative startups building unique solutions.

As Apriorit offers integrated research&development services for the software projects in such areas as endpoint security, network security, data security, embedded Systems, and virtualization, we have strong kernel and driver development skills, huge system programming expertise, and are reals fans of research projects.

Our specialty is reverse engineering, we apply it for security testing and security-related projects.

A separate department of Apriorit works on large-scale business SaaS solutions, handling tasks from business analysis, data architecture design, and web development to performance optimization and DevOps.

Official site: https://www.apriorit.com
Clutch profile: https://clutch.co/profile/apriorit
This is a Organisation

33 members

Written By
Technical Lead Apriorit Inc.
Ukraine Ukraine
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions