Annotation of ntddk/inc/ntdef.h, revision 1.1.1.1

1.1       root        1: /*++ BUILD Version: 0001    // Increment this if a change has global effects
                      2: 
                      3: Copyright (c) 1989-1993  Microsoft Corporation
                      4: 
                      5: Module Name:
                      6: 
                      7:     ntdef.h
                      8: 
                      9: Abstract:
                     10: 
                     11:     Type definitions for the basic types.
                     12: 
                     13: Author:
                     14: 
                     15:     Mark Lucovsky (markl)   02-Feb-1989
                     16: 
                     17: Revision History:
                     18: 
                     19: --*/
                     20: 
                     21: #ifndef _NTDEF_
                     22: #define _NTDEF_
                     23: 
                     24: #include <ctype.h>  // winnt
                     25: 
                     26: // begin_ntminiport
                     27: 
                     28: #ifndef IN
                     29: #define IN
                     30: #endif
                     31: 
                     32: #ifndef OUT
                     33: #define OUT
                     34: #endif
                     35: 
                     36: #ifndef OPTIONAL
                     37: #define OPTIONAL
                     38: #endif
                     39: 
                     40: #ifndef NOTHING
                     41: #define NOTHING
                     42: #endif
                     43: 
                     44: #ifndef CRITICAL
                     45: #define CRITICAL
                     46: #endif
                     47: 
                     48: #ifndef ANYSIZE_ARRAY
                     49: #define ANYSIZE_ARRAY 1       // winnt
                     50: #endif
                     51: 
                     52: #if defined(_MIPS_) || defined(_ALPHA_)     // winnt
                     53: #define UNALIGNED __unaligned               // winnt
                     54: #else                                       // winnt
                     55: #define UNALIGNED                           // winnt
                     56: #endif                                      // winnt
                     57: 
                     58: #ifndef CONST
                     59: #define CONST               const
                     60: #endif
                     61: 
                     62: //
                     63: // Void
                     64: //
                     65: 
                     66: typedef void *PVOID;    // winnt
                     67: 
                     68: // end_ntminiport
                     69: 
                     70: #if (_MSC_VER >= 800)                                                    // winnt
                     71: #define NTAPI __stdcall                                                  // winnt
                     72: #else                                                                    // winnt
                     73: #define _cdecl                                                           // winnt
                     74: #define NTAPI                                                            // winnt
                     75: #endif                                                                   // winnt
                     76: 
                     77: // begin_winnt begin_ntminiport
                     78: 
                     79: //
                     80: // Basics
                     81: //
                     82: 
                     83: #ifndef VOID
                     84: #define VOID void
                     85: typedef char CHAR;
                     86: typedef short SHORT;
                     87: typedef long LONG;
                     88: #endif
                     89: 
                     90: //
                     91: // UNICODE (Wide Character) types
                     92: //
                     93: 
                     94: typedef wchar_t WCHAR;    // wc,   16-bit UNICODE character
                     95: 
                     96: typedef WCHAR *PWCHAR;
                     97: typedef WCHAR *LPWCH, *PWCH;
                     98: typedef CONST WCHAR *LPCWCH, *PCWCH;
                     99: typedef WCHAR *NWPSTR;
                    100: typedef WCHAR *LPWSTR, *PWSTR;
                    101: 
                    102: typedef CONST WCHAR *LPCWSTR, *PCWSTR;
                    103: 
                    104: //
                    105: // ANSI (Multi-byte Character) types
                    106: //
                    107: typedef CHAR *PCHAR;
                    108: typedef CHAR *LPCH, *PCH;
                    109: 
                    110: typedef CONST CHAR *LPCCH, *PCCH;
                    111: typedef CHAR *NPSTR;
                    112: typedef CHAR *LPSTR, *PSTR;
                    113: typedef CONST CHAR *LPCSTR, *PCSTR;
                    114: 
                    115: //
                    116: // Neutral ANSI/UNICODE types and macros
                    117: //
                    118: #ifdef  UNICODE
                    119: 
                    120: #ifndef _TCHAR_DEFINED
                    121: typedef WCHAR TCHAR, *PTCHAR;
                    122: typedef WCHAR TUCHAR, *PTUCHAR;
                    123: #define _TCHAR_DEFINED
                    124: #endif /* !_TCHAR_DEFINED */
                    125: 
                    126: typedef LPWSTR LPTCH, PTCH;
                    127: typedef LPWSTR PTSTR, LPTSTR;
                    128: typedef LPCWSTR LPCTSTR;
                    129: typedef LPWSTR LP;
                    130: #define __TEXT(quote) L##quote
                    131: 
                    132: #else   /* UNICODE */
                    133: 
                    134: #ifndef _TCHAR_DEFINED
                    135: typedef char TCHAR, *PTCHAR;
                    136: typedef unsigned char TUCHAR, *PTUCHAR;
                    137: #define _TCHAR_DEFINED
                    138: #endif /* !_TCHAR_DEFINED */
                    139: 
                    140: typedef LPSTR LPTCH, PTCH;
                    141: typedef LPSTR PTSTR, LPTSTR;
                    142: typedef LPCSTR LPCTSTR;
                    143: #define __TEXT(quote) quote
                    144: 
                    145: #endif /* UNICODE */
                    146: #define TEXT(quote) __TEXT(quote)
                    147: 
                    148: 
                    149: // end_winnt
                    150: 
                    151: typedef double DOUBLE;
                    152: 
                    153: typedef struct _QUAD {              // QUAD is for those times we want
                    154:     double  DoNotUseThisField;      // an 8 byte aligned 8 byte long structure
                    155: } QUAD;                             // which is NOT really a floating point
                    156:                                     // number.  Use DOUBLE if you want an FP
                    157:                                     // number.
                    158: 
                    159: //
                    160: // Pointer to Basics
                    161: //
                    162: 
                    163: typedef SHORT *PSHORT;  // winnt
                    164: typedef LONG *PLONG;    // winnt
                    165: typedef QUAD *PQUAD;
                    166: 
                    167: //
                    168: // Unsigned Basics
                    169: //
                    170: 
                    171: // Tell windef.h that some types are already defined.
                    172: #define BASETYPES
                    173: 
                    174: typedef unsigned char UCHAR;
                    175: typedef unsigned short USHORT;
                    176: typedef unsigned long ULONG;
                    177: typedef QUAD UQUAD;
                    178: 
                    179: //
                    180: // Pointer to Unsigned Basics
                    181: //
                    182: 
                    183: typedef UCHAR *PUCHAR;
                    184: typedef USHORT *PUSHORT;
                    185: typedef ULONG *PULONG;
                    186: typedef UQUAD *PUQUAD;
                    187: 
                    188: //
                    189: // Signed characters
                    190: //
                    191: 
                    192: typedef signed char SCHAR;
                    193: typedef SCHAR *PSCHAR;
                    194: 
                    195: #ifndef NO_STRICT
                    196: #define STRICT 1
                    197: #endif
                    198: 
                    199: //
                    200: // Handle to an Object
                    201: //
                    202: 
                    203: // begin_winnt
                    204: 
                    205: #ifdef STRICT
                    206: typedef void *HANDLE;
                    207: #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
                    208: #else
                    209: typedef PVOID HANDLE;
                    210: #define DECLARE_HANDLE(name) typedef HANDLE name
                    211: #endif
                    212: typedef HANDLE *PHANDLE;
                    213: 
                    214: // end_winnt
                    215: 
                    216: //
                    217: // Low order two bits of a handle are ignored by the system and available
                    218: // for use by application code as tag bits.  The remaining bits are opaque
                    219: // and used to store a serial number and table index.
                    220: //
                    221: 
                    222: #define OBJ_HANDLE_TAGBITS  0x00000003L
                    223: 
                    224: //
                    225: // Cardinal Data Types [0 - 2**N-2)
                    226: //
                    227: 
                    228: typedef char CCHAR;          // winnt
                    229: typedef short CSHORT;
                    230: typedef ULONG CLONG;
                    231: 
                    232: typedef CCHAR *PCCHAR;
                    233: typedef CSHORT *PCSHORT;
                    234: typedef CLONG *PCLONG;
                    235: 
                    236: // end_ntminiport
                    237: 
                    238: //
                    239: // NLS basics (Locale and Language Ids)
                    240: //
                    241: 
                    242: typedef ULONG LCID;         // winnt
                    243: typedef PULONG PLCID;       // winnt
                    244: typedef USHORT LANGID;      // winnt
                    245: 
                    246: //
                    247: // NTSTATUS
                    248: //
                    249: 
                    250: typedef LONG NTSTATUS;
                    251: /*lint -e624 */  // Don't complain about different typedefs.   // winnt
                    252: typedef NTSTATUS *PNTSTATUS;
                    253: /*lint +e624 */  // Resume checking for different typedefs.    // winnt
                    254: 
                    255: //
                    256: //  Status values are 32 bit values layed out as follows:
                    257: //
                    258: //   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
                    259: //   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
                    260: //  +---+-+-------------------------+-------------------------------+
                    261: //  |Sev|C|       Facility          |               Code            |
                    262: //  +---+-+-------------------------+-------------------------------+
                    263: //
                    264: //  where
                    265: //
                    266: //      Sev - is the severity code
                    267: //
                    268: //          00 - Success
                    269: //          01 - Informational
                    270: //          10 - Warning
                    271: //          11 - Error
                    272: //
                    273: //      C - is the Customer code flag
                    274: //
                    275: //      Facility - is the facility code
                    276: //
                    277: //      Code - is the facility's status code
                    278: //
                    279: 
                    280: //
                    281: // Generic test for success on any status value (non-negative numbers
                    282: // indicate success).
                    283: //
                    284: 
                    285: #define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
                    286: 
                    287: //
                    288: // Generic test for information on any status value.
                    289: //
                    290: 
                    291: #define NT_INFORMATION(Status) ((ULONG)(Status) >> 30 == 1)
                    292: 
                    293: //
                    294: // Generic test for warning on any status value.
                    295: //
                    296: 
                    297: #define NT_WARNING(Status) ((ULONG)(Status) >> 30 == 2)
                    298: 
                    299: //
                    300: // Generic test for error on any status value.
                    301: //
                    302: 
                    303: #define NT_ERROR(Status) ((ULONG)(Status) >> 30 == 3)
                    304: 
                    305: // begin_winnt
                    306: #define APPLICATION_ERROR_MASK       0x20000000
                    307: #define ERROR_SEVERITY_SUCCESS       0x00000000
                    308: #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
                    309: #define ERROR_SEVERITY_WARNING       0x80000000
                    310: #define ERROR_SEVERITY_ERROR         0xC0000000
                    311: // end_winnt
                    312: 
                    313: //
                    314: // Large (64-bit) integer types and operations
                    315: //
                    316: 
                    317: #define TIME LARGE_INTEGER
                    318: #define _TIME _LARGE_INTEGER
                    319: #define PTIME PLARGE_INTEGER
                    320: #define LowTime LowPart
                    321: #define HighTime HighPart
                    322: 
                    323: 
                    324: // begin_winnt begin_ntminiport
                    325: 
                    326: #if defined(MIDL_PASS) || defined(_CFRONT_PASS_)
                    327: typedef double LONGLONG;
                    328: typedef double ULONGLONG;
                    329: #else
                    330: #if defined(_M_IX86)
                    331: typedef double LONGLONG;
                    332: typedef double ULONGLONG;
                    333: #elif defined(_M_MRX000)
                    334: typedef double LONGLONG;
                    335: typedef double ULONGLONG;
                    336: #elif defined(_ALPHA_)
                    337: typedef __int64 LONGLONG;
                    338: typedef unsigned __int64 ULONGLONG;
                    339: #else
                    340: typedef double LONGLONG;
                    341: typedef double ULONGLONG;
                    342: #endif
                    343: #endif
                    344: 
                    345: typedef LONGLONG *PLONGLONG;
                    346: typedef ULONGLONG *PULONGLONG;
                    347: 
                    348: #if defined(MIDL_PASS)
                    349: typedef struct _LARGE_INTEGER {
                    350: #else // MIDL_PASS
                    351: typedef union _LARGE_INTEGER {
                    352: #if defined(_CFRONT_PASS_)
                    353:     struct {
                    354:         ULONG LowPart;
                    355:         LONG HighPart;
                    356:     } u;
                    357: #else
                    358:     struct {
                    359:         ULONG LowPart;
                    360:         LONG HighPart;
                    361:     };
                    362: #endif
                    363: #endif //MIDL_PASS
                    364:     LONGLONG QuadPart;
                    365: } LARGE_INTEGER, *PLARGE_INTEGER;
                    366: 
                    367: 
                    368: #if defined(MIDL_PASS)
                    369: typedef struct _ULARGE_INTEGER {
                    370: #else // MIDL_PASS
                    371: typedef union _ULARGE_INTEGER {
                    372: #if defined(_CFRONT_PASS_)
                    373:     struct {
                    374:         ULONG LowPart;
                    375:         ULONG HighPart;
                    376:     } u;
                    377: #else
                    378:     struct {
                    379:         ULONG LowPart;
                    380:         ULONG HighPart;
                    381:     };
                    382: #endif
                    383: #endif //MIDL_PASS
                    384:     ULONGLONG QuadPart;
                    385: } ULARGE_INTEGER, *PULARGE_INTEGER;
                    386: 
                    387: // end_ntminiport
                    388: 
                    389: //
                    390: // Locally Unique Identifier
                    391: //
                    392: 
                    393: typedef LARGE_INTEGER LUID, *PLUID;
                    394: 
                    395: // end_winnt
                    396: // begin_ntminiport
                    397: 
                    398: //
                    399: // Physical address.
                    400: //
                    401: 
                    402: typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS; // windbgkd
                    403: 
                    404: // end_ntminiport
                    405: 
                    406: #ifdef LARGE_INTEGER_INTRINICS
                    407: 
                    408: #define I64Neg( a ) (-(a))
                    409: #define I64Add( a, b ) ((a) + (b))
                    410: #define I64Sub( a, b ) ((a) - (b))
                    411: #define I64Mul( a, b ) ((a) * (b))
                    412: #define I64Div( a, b ) ((a) / (b))
                    413: #define I64Mod( a, b ) ((a) % (b))
                    414: #define I64Gtr( a, b ) ((a) > (b))
                    415: #define I64Geq( a, b ) ((a) >= (b))
                    416: #define I64Eql( a, b ) ((a) == (b))
                    417: #define I64Neq( a, b ) ((a) != (b))
                    418: #define I64Leq( a, b ) ((a) <= (b))
                    419: #define I64Ltr( a, b ) ((a) < (b))
                    420: #define I64Shr( a, b ) ((a) >> (b))
                    421: #define I64Shl( a, b ) ((a) << (b))
                    422: #define I64Sar( a, b ) ((LARGE_INTEGER)(a) >> (b))
                    423: #define I64Not( a ) (~(a))
                    424: #define I64And( a, b ) ((a) & (b))
                    425: #define I64Or( a, b ) ((a) | (b))
                    426: #define I64Xor( a, b ) ((a) ^ (b))
                    427: 
                    428: #define LiNeg(a)       (-(a))
                    429: #define LiAdd(a,b)     ((a) + (b))
                    430: #define LiSub(a,b)     ((a) - (b))
                    431: #define LiNMul(a,b)    ((a) * (b))
                    432: #define LiXMul(a,b)    ((a) * (b))
                    433: #define LiDiv(a,b)     ((a) / (b))
                    434: #define LiXDiv(a,b)    ((a) / (b))
                    435: #define LiMod(a,b)     ((a) % (b))
                    436: #define LiShr(a,b)     ((a) >> (b))
                    437: #define LiShl(a,b)     ((a) << (b))
                    438: #define LiGtr(a,b)     ((a) > (b))
                    439: #define LiGeq(a,b)     ((a) >= (b))
                    440: #define LiEql(a,b)     ((a) == (b))
                    441: #define LiNeq(a,b)     ((a) != (b))
                    442: #define LiLtr(a,b)     ((a) < (b))
                    443: #define LiLeq(a,b)     ((a) <= (b))
                    444: #define LiGtrZero(a)   ((a) > 0)
                    445: #define LiGeqZero(a)   ((a) >= 0)
                    446: #define LiEqlZero(a)   ((a) == 0)
                    447: #define LiNeqZero(a)   ((a) != 0)
                    448: #define LiLtrZero(a)   ((a) < (0)
                    449: #define LiLeqZero(a)   ((a) <= (0)
                    450: #define LiFromLong(a)  (a)
                    451: #define LiFromUlong(a) (a)
                    452: 
                    453: #define LiTemps        {;}
                    454: #define LiGtrT_(a,b)   ((a) > (b))
                    455: #define LiGtr_T(a,b)   ((a) > (b))
                    456: #define LiGtrTT(a,b)   ((a) > (b))
                    457: #define LiGeqT_(a,b)   ((a) >= (b))
                    458: #define LiGeq_T(a,b)   ((a) >= (b))
                    459: #define LiGeqTT(a,b)   ((a) >= (b))
                    460: #define LiEqlT_(a,b)   ((a) == (b))
                    461: #define LiEql_T(a,b)   ((a) == (b))
                    462: #define LiEqlTT(a,b)   ((a) == (b))
                    463: #define LiNeqT_(a,b)   ((a) != (b))
                    464: #define LiNeq_T(a,b)   ((a) != (b))
                    465: #define LiNeqTT(a,b)   ((a) != (b))
                    466: #define LiLtrT_(a,b)   ((a) < (b))
                    467: #define LiLtr_T(a,b)   ((a) < (b))
                    468: #define LiLtrTT(a,b)   ((a) < (b))
                    469: #define LiLeqT_(a,b)   ((a) <= (b))
                    470: #define LiLeq_T(a,b)   ((a) <= (b))
                    471: #define LiLeqTT(a,b)   ((a) <= (b))
                    472: #define LiGtrZeroT(a)  ((a) > 0)
                    473: #define LiGeqZeroT(a)  ((a) >= 0)
                    474: #define LiEqlZeroT(a)  ((a) == 0)
                    475: #define LiNeqZeroT(a)  ((a) != 0)
                    476: #define LiLtrZeroT(a)  ((a) < 0)
                    477: #define LiLeqZeroT(a)  ((a) <= 0)
                    478: 
                    479: #else
                    480: 
                    481: #define I64Neg( a ) (RtlLargeIntegerNegate((a)))
                    482: #define I64Add( a, b ) (RtlLargeIntegerAdd((a), (b)))
                    483: #define I64Sub( a, b ) (RtlLargeIntegerSubtract((a), (b)))
                    484: #define I64Mul( a, b ) (RtlLargeIntegerMultiply((a), (b)))
                    485: #define I64Div( a, b ) (RtlLargeIntegerDivide((a), (b), NULL))
                    486: #define I64Mod( a, b ) (RtlLargeIntegerModulo((a), (b)))
                    487: #define I64Gtr( a, b ) (RtlLargeIntegerGreaterThan((a), (b)))
                    488: #define I64Geq( a, b ) (RtlLargeIntegerGreaterThanOrEqualTo((a), (b)))
                    489: #define I64Eql( a, b ) (RtlLargeIntegerEqualTo((a), (b)))
                    490: #define I64Neq( a, b ) (!RtlLargeIntegerEqualTo((a), (b)))
                    491: #define I64Ltr( a, b ) (RtlLargeIntegerLessThan((a), (b)))
                    492: #define I64Leq( a, b ) (!RtlLargeIntegerGreaterThan((a), (b)))
                    493: #define I64Shr( a, b ) (RtlLargeIntegerShiftRight((a), (b)))
                    494: #define I64Shl( a, b ) (RtlLargeIntegerShiftLeft((a), (b)))
                    495: #define I64Sar( a, b ) (RtlLargeIntegerArithmeticShift((a), (b)))
                    496: #define I64Not( a ) (RtlLargeIntegerNegate((a)))
                    497: #define I64And( a, b ) (RtlLargeIntegerAnd((a), (b)))
                    498: #define I64Or( a, b ) (RtlLargeIntegerOr((a), (b)))
                    499: #define I64Xor( a, b ) (RtlLargeIntegerXor((a), (b)))
                    500: 
                    501: #define LiNeg(a)       (RtlLargeIntegerNegate((a)))                   // -a
                    502: #define LiAdd(a,b)     (RtlLargeIntegerAdd((a),(b)))                  // a + b
                    503: #define LiSub(a,b)     (RtlLargeIntegerSubtract((a),(b)))             // a - b
                    504: #define LiNMul(a,b)    (RtlEnlargedIntegerMultiply((a),(b)))          // a * b (Long * Long)
                    505: #define LiXMul(a,b)    (RtlExtendedIntegerMultiply((a),(b)))          // a * b (Large * Long)
                    506: #define LiDiv(a,b)     (RtlLargeIntegerDivide((a),(b),NULL))          // a / b (Large / Large)
                    507: #define LiXDiv(a,b)    (RtlExtendedLargeIntegerDivide((a),(b),NULL))  // a / b (Large / Long)
                    508: #define LiMod(a,b)     (RtlLargeIntegerModulo((a),(b)))               // a % b
                    509: #define LiShr(a,b)     (RtlLargeIntegerShiftRight((a),(CCHAR)(b)))    // a >> b
                    510: #define LiShl(a,b)     (RtlLargeIntegerShiftLeft((a),(CCHAR)(b)))     // a << b
                    511: #define LiGtr(a,b)     (RtlLargeIntegerGreaterThan((a),(b)))          // a > b
                    512: #define LiGeq(a,b)     (RtlLargeIntegerGreaterThanOrEqualTo((a),(b))) // a >= b
                    513: #define LiEql(a,b)     (RtlLargeIntegerEqualTo((a),(b)))              // a == b
                    514: #define LiNeq(a,b)     (RtlLargeIntegerNotEqualTo((a),(b)))           // a != b
                    515: #define LiLtr(a,b)     (RtlLargeIntegerLessThan((a),(b)))             // a < b
                    516: #define LiLeq(a,b)     (RtlLargeIntegerLessThanOrEqualTo((a),(b)))    // a <= b
                    517: #define LiGtrZero(a)   (RtlLargeIntegerGreaterThanZero((a)))          // a > 0
                    518: #define LiGeqZero(a)   (RtlLargeIntegerGreaterOrEqualToZero((a)))     // a >= 0
                    519: #define LiEqlZero(a)   (RtlLargeIntegerEqualToZero((a)))              // a == 0
                    520: #define LiNeqZero(a)   (RtlLargeIntegerNotEqualToZero((a)))           // a != 0
                    521: #define LiLtrZero(a)   (RtlLargeIntegerLessThanZero((a)))             // a < 0
                    522: #define LiLeqZero(a)   (RtlLargeIntegerLessOrEqualToZero((a)))        // a <= 0
                    523: #define LiFromLong(a)  (RtlConvertLongToLargeInteger((a)))
                    524: #define LiFromUlong(a) (RtlConvertUlongToLargeInteger((a)))
                    525: 
                    526: #define LiTemps        LARGE_INTEGER _LiT1,_LiT2
                    527: #define LiGtrT_(a,b)   ((_LiT1 = a,_LiT2),     LiGtr(_LiT1,(b)))
                    528: #define LiGtr_T(a,b)   ((_LiT1,_LiT2 = b),     LiGtr((a),_LiT2))
                    529: #define LiGtrTT(a,b)   ((_LiT1 = a, _LiT2 = b),LiGtr(_LiT1,_LiT2))
                    530: #define LiGeqT_(a,b)   ((_LiT1 = a,_LiT2),     LiGeq(_LiT1,(b)))
                    531: #define LiGeq_T(a,b)   ((_LiT1,_LiT2 = b),     LiGeq((a),_LiT2))
                    532: #define LiGeqTT(a,b)   ((_LiT1 = a, _LiT2 = b),LiGeq(_LiT1,_LiT2))
                    533: #define LiEqlT_(a,b)   ((_LiT1 = a,_LiT2),     LiEql(_LiT1,(b)))
                    534: #define LiEql_T(a,b)   ((_LiT1,_LiT2 = b),     LiEql((a),_LiT2))
                    535: #define LiEqlTT(a,b)   ((_LiT1 = a, _LiT2 = b),LiEql(_LiT1,_LiT2))
                    536: #define LiNeqT_(a,b)   ((_LiT1 = a,_LiT2),     LiNeq(_LiT1,(b)))
                    537: #define LiNeq_T(a,b)   ((_LiT1,_LiT2 = b),     LiNeq((a),_LiT2))
                    538: #define LiNeqTT(a,b)   ((_LiT1 = a, _LiT2 = b),LiNeq(_LiT1,_LiT2))
                    539: #define LiLtrT_(a,b)   ((_LiT1 = a,_LiT2),     LiLtr(_LiT1,(b)))
                    540: #define LiLtr_T(a,b)   ((_LiT1,_LiT2 = b),     LiLtr((a),_LiT2))
                    541: #define LiLtrTT(a,b)   ((_LiT1 = a, _LiT2 = b),LiLtr(_LiT1,_LiT2))
                    542: #define LiLeqT_(a,b)   ((_LiT1 = a,_LiT2),     LiLeq(_LiT1,(b)))
                    543: #define LiLeq_T(a,b)   ((_LiT1,_LiT2 = b),     LiLeq((a),_LiT2))
                    544: #define LiLeqTT(a,b)   ((_LiT1 = a, _LiT2 = b),LiLeq(_LiT1,_LiT2))
                    545: #define LiGtrZeroT(a)  ((_LiT1 = a,_LiT2),     LiGtrZero(_LiT1))
                    546: #define LiGeqZeroT(a)  ((_LiT1 = a,_LiT2),     LiGeqZero(_LiT1))
                    547: #define LiEqlZeroT(a)  ((_LiT1 = a,_LiT2),     LiEqlZero(_LiT1))
                    548: #define LiNeqZeroT(a)  ((_LiT1 = a,_LiT2),     LiNeqZero(_LiT1))
                    549: #define LiLtrZeroT(a)  ((_LiT1 = a,_LiT2),     LiLtrZero(_LiT1))
                    550: #define LiLeqZeroT(a)  ((_LiT1 = a,_LiT2),     LiLeqZero(_LiT1))
                    551: 
                    552: #endif
                    553: 
                    554: 
                    555: 
                    556: //
                    557: // Event type
                    558: //
                    559: 
                    560: typedef enum _EVENT_TYPE {
                    561:     NotificationEvent,
                    562:     SynchronizationEvent
                    563:     } EVENT_TYPE;
                    564: 
                    565: //
                    566: // Wait type
                    567: //
                    568: 
                    569: typedef enum _WAIT_TYPE {
                    570:     WaitAll,
                    571:     WaitAny
                    572:     } WAIT_TYPE;
                    573: 
                    574: //
                    575: // Pointer to an Asciiz string
                    576: //
                    577: 
                    578: typedef CHAR *PSZ;
                    579: typedef CONST char *PCSZ;
                    580: 
                    581: //
                    582: // Counted String
                    583: //
                    584: 
                    585: typedef struct _STRING {
                    586:     USHORT Length;
                    587:     USHORT MaximumLength;
                    588: #ifdef MIDL_PASS
                    589:     [size_is(MaximumLength), length_is(Length) ]
                    590: #endif // MIDL_PASS
                    591:     PCHAR Buffer;
                    592: } STRING;
                    593: typedef STRING *PSTRING;
                    594: 
                    595: typedef STRING ANSI_STRING;
                    596: typedef PSTRING PANSI_STRING;
                    597: 
                    598: typedef STRING OEM_STRING;
                    599: typedef PSTRING POEM_STRING;
                    600: 
                    601: //
                    602: // CONSTCounted String
                    603: //
                    604: 
                    605: typedef struct _CSTRING {
                    606:     USHORT Length;
                    607:     USHORT MaximumLength;
                    608:     CONST char *Buffer;
                    609: } CSTRING;
                    610: typedef CSTRING *PCSTRING;
                    611: 
                    612: typedef STRING CANSI_STRING;
                    613: typedef PSTRING PCANSI_STRING;
                    614: 
                    615: //
                    616: // Unicode strings are counted 16-bit character strings. If they are
                    617: // NULL terminated, Length does not include trailing NULL.
                    618: //
                    619: 
                    620: typedef struct _UNICODE_STRING {
                    621:     USHORT Length;
                    622:     USHORT MaximumLength;
                    623: #ifdef MIDL_PASS
                    624:     [size_is(MaximumLength / 2), length_is((Length) / 2) ] USHORT * Buffer;
                    625: #else // MIDL_PASS
                    626:     PWSTR  Buffer;
                    627: #endif // MIDL_PASS
                    628: } UNICODE_STRING;
                    629: typedef UNICODE_STRING *PUNICODE_STRING;
                    630: #define UNICODE_NULL ((WCHAR)0) // winnt
                    631: 
                    632: // begin_ntminiport
                    633: 
                    634: //
                    635: // Boolean
                    636: //
                    637: 
                    638: typedef UCHAR BOOLEAN;           // winnt
                    639: typedef BOOLEAN *PBOOLEAN;       // winnt
                    640: 
                    641: // end_ntminiport
                    642: 
                    643: // begin_winnt
                    644: //
                    645: //  Doubly linked list structure.  Can be used as either a list head, or
                    646: //  as link words.
                    647: //
                    648: 
                    649: typedef struct _LIST_ENTRY {
                    650:    struct _LIST_ENTRY *Flink;
                    651:    struct _LIST_ENTRY *Blink;
                    652: } LIST_ENTRY;
                    653: typedef LIST_ENTRY *PLIST_ENTRY;
                    654: 
                    655: //
                    656: //  Singly linked list structure. Can be used as either a list head, or
                    657: //  as link words.
                    658: //
                    659: 
                    660: typedef struct _SINGLE_LIST_ENTRY {
                    661:     struct _SINGLE_LIST_ENTRY *Next;
                    662: } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
                    663: // end_winnt
                    664: 
                    665: 
                    666: //
                    667: // Valid values for the Attributes field
                    668: //
                    669: 
                    670: #define OBJ_INHERIT             0x00000002L
                    671: #define OBJ_PERMANENT           0x00000010L
                    672: #define OBJ_EXCLUSIVE           0x00000020L
                    673: #define OBJ_CASE_INSENSITIVE    0x00000040L
                    674: #define OBJ_OPENIF              0x00000080L
                    675: #define OBJ_VALID_ATTRIBUTES    0x000000F2L
                    676: 
                    677: //
                    678: // Object Attributes structure
                    679: //
                    680: 
                    681: typedef struct _OBJECT_ATTRIBUTES {
                    682:     ULONG Length;
                    683:     HANDLE RootDirectory;
                    684:     PUNICODE_STRING ObjectName;
                    685:     ULONG Attributes;
                    686:     PVOID SecurityDescriptor;        // Points to type SECURITY_DESCRIPTOR
                    687:     PVOID SecurityQualityOfService;  // Points to type SECURITY_QUALITY_OF_SERVICE
                    688: } OBJECT_ATTRIBUTES;
                    689: typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;
                    690: 
                    691: //++
                    692: //
                    693: // VOID
                    694: // InitializeObjectAttributes(
                    695: //     OUT POBJECT_ATTRIBUTES p,
                    696: //     IN PUNICODE_STRING n,
                    697: //     IN ULONG a,
                    698: //     IN HANDLE r,
                    699: //     IN PSECURITY_DESCRIPTOR s
                    700: //     )
                    701: //
                    702: //--
                    703: 
                    704: #define InitializeObjectAttributes( p, n, a, r, s ) { \
                    705:     (p)->Length = sizeof( OBJECT_ATTRIBUTES );          \
                    706:     (p)->RootDirectory = r;                             \
                    707:     (p)->Attributes = a;                                \
                    708:     (p)->ObjectName = n;                                \
                    709:     (p)->SecurityDescriptor = s;                        \
                    710:     (p)->SecurityQualityOfService = NULL;               \
                    711:     }
                    712: 
                    713: // begin_ntminiport
                    714: 
                    715: //
                    716: // Constants
                    717: //
                    718: 
                    719: #define FALSE   0
                    720: #define TRUE    1
                    721: 
                    722: #ifndef NULL
                    723: #ifdef __cplusplus
                    724: #define NULL    0
                    725: #else
                    726: #define NULL    ((void *)0)
                    727: #endif
                    728: #endif // NULL
                    729: 
                    730: // end_ntminiport
                    731: 
                    732: #define MINCHAR     0x80        // winnt
                    733: #define MAXCHAR     0x7f        // winnt
                    734: #define MINSHORT    0x8000      // winnt
                    735: #define MAXSHORT    0x7fff      // winnt
                    736: #define MINLONG     0x80000000  // winnt
                    737: #define MAXLONG     0x7fffffff  // winnt
                    738: #define MAXUCHAR    0xff        // winnt
                    739: #define MAXUSHORT   0xffff      // winnt
                    740: #define MAXULONG    0xffffffff  // winnt
                    741: 
                    742: //
                    743: // Useful Helper Macros
                    744: //
                    745: 
                    746: //
                    747: // Determine if an argument is present by testing the value of the pointer
                    748: // to the argument value.
                    749: //
                    750: 
                    751: #define ARGUMENT_PRESENT(ArgumentPointer)    (\
                    752:     (CHAR *)(ArgumentPointer) != (CHAR *)(NULL) )
                    753: 
                    754: // begin_winnt begin_ntminiport
                    755: //
                    756: // Calculate the byte offset of a field in a structure of type type.
                    757: //
                    758: 
                    759: #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
                    760: 
                    761: 
                    762: //
                    763: // Calculate the address of the base of the structure given its type, and an
                    764: // address of a field within the structure.
                    765: //
                    766: 
                    767: #define CONTAINING_RECORD(address, type, field) ((type *)( \
                    768:                                                   (PCHAR)(address) - \
                    769:                                                   (PCHAR)(&((type *)0)->field)))
                    770: // end_winnt end_ntminiport
                    771: 
                    772: //
                    773: // Exception handler routine definition.
                    774: //
                    775: 
                    776: struct _CONTEXT;
                    777: struct _EXCEPTION_RECORD;
                    778: 
                    779: typedef
                    780: EXCEPTION_DISPOSITION
                    781: (*PEXCEPTION_ROUTINE) (
                    782:     IN struct _EXCEPTION_RECORD *ExceptionRecord,
                    783:     IN PVOID EstablisherFrame,
                    784:     IN OUT struct _CONTEXT *ContextRecord,
                    785:     IN OUT PVOID DispatcherContext
                    786:     );
                    787: 
                    788: // begin_ntminiport
                    789: 
                    790: //
                    791: // Interrupt Request Level (IRQL)
                    792: //
                    793: 
                    794: typedef UCHAR KIRQL;
                    795: 
                    796: typedef KIRQL *PKIRQL;
                    797: 
                    798: // end_ntminiport
                    799: 
                    800: //
                    801: // Product types
                    802: //
                    803: 
                    804: typedef enum _NT_PRODUCT_TYPE {
                    805:     NtProductWinNt = 1,
                    806:     NtProductLanManNt
                    807: } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
                    808: 
                    809: 
                    810: 
                    811: 
                    812: // begin_winnt
                    813: 
                    814: /*
                    815:  *  Language IDs.
                    816:  *
                    817:  *  The following two combinations of primary language ID and
                    818:  *  sublanguage ID have special semantics:
                    819:  *
                    820:  *    Primary Language ID   Sublanguage ID      Result
                    821:  *    -------------------   ---------------     ------------------------
                    822:  *    LANG_NEUTRAL          SUBLANG_NEUTRAL     Language neutral
                    823:  *    LANG_NEUTRAL          SUBLANG_DEFAULT     User default language
                    824:  *    LANG_NEUTRAL          SUBLANG_SYS_DEFAULT System default language
                    825:  */
                    826: 
                    827: /*
                    828:  *  Primary language IDs.
                    829:  */
                    830: #define LANG_NEUTRAL                     0x00
                    831: 
                    832: #define LANG_ALBANIAN                    0x1c
                    833: #define LANG_ARABIC                      0x01
                    834: #define LANG_BAHASA                      0x21
                    835: #define LANG_BULGARIAN                   0x02
                    836: #define LANG_CATALAN                     0x03
                    837: #define LANG_CHINESE                     0x04
                    838: #define LANG_CZECH                       0x05
                    839: #define LANG_DANISH                      0x06
                    840: #define LANG_DUTCH                       0x13
                    841: #define LANG_ENGLISH                     0x09
                    842: #define LANG_FINNISH                     0x0b
                    843: #define LANG_FRENCH                      0x0c
                    844: #define LANG_GERMAN                      0x07
                    845: #define LANG_GREEK                       0x08
                    846: #define LANG_HEBREW                      0x0d
                    847: #define LANG_HUNGARIAN                   0x0e
                    848: #define LANG_ICELANDIC                   0x0f
                    849: #define LANG_ITALIAN                     0x10
                    850: #define LANG_JAPANESE                    0x11
                    851: #define LANG_KOREAN                      0x12
                    852: #define LANG_NORWEGIAN                   0x14
                    853: #define LANG_POLISH                      0x15
                    854: #define LANG_PORTUGUESE                  0x16
                    855: #define LANG_RHAETO_ROMAN                0x17
                    856: #define LANG_ROMANIAN                    0x18
                    857: #define LANG_RUSSIAN                     0x19
                    858: #define LANG_SERBO_CROATIAN              0x1a
                    859: #define LANG_SLOVAK                      0x1b
                    860: #define LANG_SPANISH                     0x0a
                    861: #define LANG_SWEDISH                     0x1d
                    862: #define LANG_THAI                        0x1e
                    863: #define LANG_TURKISH                     0x1f
                    864: #define LANG_URDU                        0x20
                    865: 
                    866: /*
                    867:  *  Sublanguage IDs.
                    868:  *
                    869:  *  The name immediately following SUBLANG_ dictates which primary
                    870:  *  language ID that sublanguage ID can be combined with to form a
                    871:  *  valid language ID.
                    872:  */
                    873: #define SUBLANG_NEUTRAL                  0x00    /* language neutral */
                    874: #define SUBLANG_DEFAULT                  0x01    /* user default */
                    875: #define SUBLANG_SYS_DEFAULT              0x02    /* system default */
                    876: 
                    877: #define SUBLANG_CHINESE_SIMPLIFIED       0x02    /* Chinese (Simplified) */
                    878: #define SUBLANG_CHINESE_TRADITIONAL      0x01    /* Chinese (Traditional) */
                    879: #define SUBLANG_DUTCH                    0x01    /* Dutch */
                    880: #define SUBLANG_DUTCH_BELGIAN            0x02    /* Dutch (Belgian) */
                    881: #define SUBLANG_ENGLISH_US               0x01    /* English (USA) */
                    882: #define SUBLANG_ENGLISH_UK               0x02    /* English (UK) */
                    883: #define SUBLANG_ENGLISH_AUS              0x03    /* English (Australian) */
                    884: #define SUBLANG_ENGLISH_CAN              0x04    /* English (Canadian) */
                    885: #define SUBLANG_ENGLISH_NZ               0x05    /* English (New Zealand) */
                    886: #define SUBLANG_ENGLISH_EIRE             0x06    /* English (Irish) */
                    887: #define SUBLANG_FRENCH                   0x01    /* French */
                    888: #define SUBLANG_FRENCH_BELGIAN           0x02    /* French (Belgian) */
                    889: #define SUBLANG_FRENCH_CANADIAN          0x03    /* French (Canadian) */
                    890: #define SUBLANG_FRENCH_SWISS             0x04    /* French (Swiss) */
                    891: #define SUBLANG_GERMAN                   0x01    /* German */
                    892: #define SUBLANG_GERMAN_SWISS             0x02    /* German (Swiss) */
                    893: #define SUBLANG_GERMAN_AUSTRIAN          0x03    /* German (Austrian) */
                    894: #define SUBLANG_ITALIAN                  0x01    /* Italian */
                    895: #define SUBLANG_ITALIAN_SWISS            0x02    /* Italian (Swiss) */
                    896: #define SUBLANG_NORWEGIAN_BOKMAL         0x01    /* Norwegian (Bokmal) */
                    897: #define SUBLANG_NORWEGIAN_NYNORSK        0x02    /* Norwegian (Nynorsk) */
                    898: #define SUBLANG_PORTUGUESE               0x02    /* Portuguese */
                    899: #define SUBLANG_PORTUGUESE_BRAZILIAN     0x01    /* Portuguese (Brazilian) */
                    900: #define SUBLANG_SERBO_CROATIAN_CYRILLIC  0x02    /* Serbo-Croatian (Cyrillic) */
                    901: #define SUBLANG_SERBO_CROATIAN_LATIN     0x01    /* Croato-Serbian (Latin) */
                    902: #define SUBLANG_SPANISH                  0x01    /* Spanish (Castilian) */
                    903: #define SUBLANG_SPANISH_MEXICAN          0x02    /* Spanish (Mexican) */
                    904: #define SUBLANG_SPANISH_MODERN           0x03    /* Spanish (Modern) */
                    905: 
                    906: /*
                    907:  *  Sorting IDs.
                    908:  *
                    909:  */
                    910: #define SORT_DEFAULT                     0x0     /* sorting default */
                    911: 
                    912: 
                    913: /*
                    914:  *  A language ID is a 16 bit value which is the combination of a
                    915:  *  primary language ID and a secondary language ID.  The bits are
                    916:  *  allocated as follows:
                    917:  *
                    918:  *       +-----------------------+-------------------------+
                    919:  *       |     Sublanguage ID    |   Primary Language ID   |
                    920:  *       +-----------------------+-------------------------+
                    921:  *        15                   10 9                       0   bit
                    922:  *
                    923:  *
                    924:  *  Language ID creation/extraction macros:
                    925:  *
                    926:  *    MAKELANGID    - construct language id from a primary language id and
                    927:  *                    a sublanguage id.
                    928:  *    PRIMARYLANGID - extract primary language id from a language id.
                    929:  *    SUBLANGID     - extract sublanguage id from a language id.
                    930:  */
                    931: #define MAKELANGID(p, s)       ((((USHORT)(s)) << 10) | (USHORT)(p))
                    932: #define PRIMARYLANGID(lgid)    ((USHORT)(lgid) & 0x3ff)
                    933: #define SUBLANGID(lgid)        ((USHORT)(lgid) >> 10)
                    934: 
                    935: 
                    936: /*
                    937:  *  A locale ID is a 32 bit value which is the combination of a
                    938:  *  language ID, a sort ID, and a reserved area.  The bits are
                    939:  *  allocated as follows:
                    940:  *
                    941:  *       +-------------+---------+-------------------------+
                    942:  *       |   Reserved  | Sort ID |      Language ID        |
                    943:  *       +-------------+---------+-------------------------+
                    944:  *        31         20 19     16 15                      0   bit
                    945:  *
                    946:  *
                    947:  *  Locale ID creation/extraction macros:
                    948:  *
                    949:  *    MAKELCID       - construct locale id from a language id and a sort id.
                    950:  *    LANGIDFROMLCID - extract language id from a locale id.
                    951:  *    SORTIDFROMLCID - extract sort id from a locale id.
                    952:  */
                    953: #define NLS_VALID_LOCALE_MASK  0x000fffff
                    954: 
                    955: #define MAKELCID(lgid, srtid)  ((ULONG)((((ULONG)((USHORT)(srtid))) << 16) |  \
                    956:                                          ((ULONG)((USHORT)(lgid)))))
                    957: #define LANGIDFROMLCID(lcid)   ((USHORT)(lcid))
                    958: #define SORTIDFROMLCID(lcid)   ((USHORT)((((ULONG)(lcid)) & NLS_VALID_LOCALE_MASK) >> 16))
                    959: 
                    960: 
                    961: /*
                    962:  *  Default System and User IDs for language and locale.
                    963:  */
                    964: #define LANG_SYSTEM_DEFAULT    (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
                    965: #define LANG_USER_DEFAULT      (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
                    966: 
                    967: #define LOCALE_SYSTEM_DEFAULT  (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
                    968: #define LOCALE_USER_DEFAULT    (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
                    969: 
                    970: 
                    971: 
                    972: // begin_ntminiport
                    973: 
                    974: //
                    975: // Macros used to eliminate compiler warning generated when formal
                    976: // parameters or local variables are not declared.
                    977: //
                    978: // Use DBG_UNREFERENCED_PARAMETER() when a parameter is not yet
                    979: // referenced but will be once the module is completely developed.
                    980: //
                    981: // Use DBG_UNREFERENCED_LOCAL_VARIABLE() when a local variable is not yet
                    982: // referenced but will be once the module is completely developed.
                    983: //
                    984: // Use UNREFERENCED_PARAMETER() if a parameter will never be referenced.
                    985: //
                    986: // DBG_UNREFERENCED_PARAMETER and DBG_UNREFERENCED_LOCAL_VARIABLE will
                    987: // eventually be made into a null macro to help determine whether there
                    988: // is unfinished work.
                    989: //
                    990: 
                    991: #if ! (defined(lint) || defined(_lint))
                    992: #define UNREFERENCED_PARAMETER(P)          (P)
                    993: #define DBG_UNREFERENCED_PARAMETER(P)      (P)
                    994: #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
                    995: 
                    996: #else // lint or _lint
                    997: 
                    998: // Note: lint -e530 says don't complain about uninitialized variables for
                    999: // this.  line +e530 turns that checking back on.  Error 527 has to do with
                   1000: // unreachable code.
                   1001: 
                   1002: #define UNREFERENCED_PARAMETER(P)          \
                   1003:     /*lint -e527 -e530 */ \
                   1004:     { \
                   1005:         (P) = (P); \
                   1006:     } \
                   1007:     /*lint +e527 +e530 */
                   1008: #define DBG_UNREFERENCED_PARAMETER(P)      \
                   1009:     /*lint -e527 -e530 */ \
                   1010:     { \
                   1011:         (P) = (P); \
                   1012:     } \
                   1013:     /*lint +e527 +e530 */
                   1014: #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) \
                   1015:     /*lint -e527 -e530 */ \
                   1016:     { \
                   1017:         (V) = (V); \
                   1018:     } \
                   1019:     /*lint +e527 +e530 */
                   1020: 
                   1021: #endif // lint or _lint
                   1022: 
                   1023: 
                   1024: // end_winnt end_ntminiport
                   1025: 
                   1026: #endif // _NTDEF_

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.