[SDK:NT] Improve ntdef.h and add guiddef.h

This commit is contained in:
Quinn Stephens 2024-08-09 08:32:31 -04:00
parent 7af18b7ac3
commit 0998d5c417
2 changed files with 124 additions and 48 deletions

29
SDK/INC/NT/guiddef.h Normal file
View File

@ -0,0 +1,29 @@
/*++
Copyright (c) 2024, Quinn Stephens.
Provided under the BSD 3-Clause license.
Module Name:
guiddef.h
Abstract:
Provides GUID definitions.
--*/
#ifndef _GUIDDEF_H
#define _GUIDDEF_H
#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID {
ULONG Data1;
USHORT Data2;
USHORT Data3;
UCHAR Data4[8];
} GUID;
#endif
#endif /* !_GUIDDEF_H */

View File

@ -30,14 +30,6 @@ Abstract:
#define OPTIONAL #define OPTIONAL
#endif #endif
#ifndef FASTCALL
#define FASTCALL
#endif
#ifndef NTAPI
#define NTAPI
#endif
#ifndef VOID #ifndef VOID
#define VOID void #define VOID void
#endif #endif
@ -50,19 +42,35 @@ Abstract:
#define ANYSIZE_ARRAY 1 #define ANYSIZE_ARRAY 1
#endif #endif
#ifndef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((VOID *)0)
#endif
#endif
#ifndef FORCEINLINE #ifndef FORCEINLINE
#if defined(_MSC_EXTENSIONS) #if defined(_MSC_EXTENSIONS)
#define FORCEINLINE __inline #define FORCEINLINE __forceinline
#else #else
#define FORCEINLINE static inline #define FORCEINLINE static inline
#endif #endif
#endif #endif
#ifndef NULL #ifndef FASTCALL
#ifdef __cplusplus #if defined(_M_IX86)
#define NULL 0 #define FASTCALL __fastcall
#else #else
#define NULL ((VOID *)0) #define FASTCALL
#endif
#endif
#ifndef NTAPI
#if !defined(_M_AMD64)
#define NTAPI __stdcall
#else
#define NTAPI
#endif #endif
#endif #endif
@ -76,6 +84,19 @@ typedef unsigned char UCHAR;
typedef unsigned short USHORT; typedef unsigned short USHORT;
typedef unsigned long ULONG; typedef unsigned long ULONG;
//
// Minimum/maximum values of basic types.
//
#define MINCHAR 0x80
#define MAXCHAR 0x7f
#define MINSHORT 0x8000
#define MAXSHORT 0x7fff
#define MINLONG 0x80000000
#define MAXLONG 0x7fffffff
#define MAXUCHAR 0xff
#define MAXUSHORT 0xffff
#define MAXULONG 0xffffffff
// //
// Basic pointer types. // Basic pointer types.
// //
@ -86,27 +107,51 @@ typedef UCHAR *PUCHAR;
typedef USHORT *PUSHORT; typedef USHORT *PUSHORT;
typedef ULONG *PULONG; typedef ULONG *PULONG;
//
// Logical value types.
//
typedef ULONG LOGICAL;
typedef ULONG *PLOGICAL;
// //
// String types. // String types.
// //
typedef CHAR *LPSTR; typedef CHAR *PSTR, *LPSTR;
typedef CONST CHAR *LPCSTR; typedef CONST CHAR *PCSTR, *LPCSTR;
// //
// Wide character/string types. // Wide character/string types.
// //
typedef USHORT WCHAR; typedef USHORT WCHAR;
typedef WCHAR *PWCHAR, *LPWSTR; typedef WCHAR *PWCHAR, *PWSTR, *LPWSTR;
typedef CONST WCHAR *LPCWSTR; typedef CONST WCHAR *PCWSTR, *LPCWSTR;
// //
// Status codes. // Long long types.
//
#if defined(_MSC_EXTENSIONS)
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
#elif defined(UNIX_LP64)
typedef long LONGLONG;
typedef unsigned long ULONGLONG;
#else
typedef long long LONGLONG;
typedef unsigned long long ULONGLONG;
#endif
typedef LONGLONG *PLONGLONG;
typedef ULONGLONG *PULONGLONG;
#define MAXLONGLONG (0x7fffffffffffffff)
//
// Logical/boolean value types.
//
typedef ULONG LOGICAL;
typedef ULONG *PLOGICAL;
typedef UCHAR BOOLEAN;
typedef BOOLEAN *PBOOLEAN;
#define TRUE 1
#define FALSE 0
//
// Status code types.
// //
typedef LONG NTSTATUS; typedef LONG NTSTATUS;
typedef NTSTATUS *PNTSTATUS; typedef NTSTATUS *PNTSTATUS;
@ -120,19 +165,20 @@ typedef NTSTATUS *PNTSTATUS;
#define NT_ERROR(Status) ((ULONG)(Status) >> 30 == 3) #define NT_ERROR(Status) ((ULONG)(Status) >> 30 == 3)
// //
// Long long type definitions. // Struct field offset helper.
// //
#if defined(_MSC_EXTENSIONS) #if defined(__clang__) || defined(__GNUC__)
typedef unsigned __int64 ULONGLONG; #define FIELD_OFFSET(type, field) ((ULONG)__builtin_offsetof(type, field))
typedef __int64 LONGLONG;
#elif defined(UNIX_LP64)
typedef unsigned long ULONGLONG;
typedef long LONGLONG;
#else #else
typedef unsigned long long ULONGLONG; #define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
typedef long long LONGLONG;
#endif #endif
//
// Alignment helpers.
//
#define ALIGN_DOWN(x, a) ((x) & ~((a) - 1))
#define ALIGN_UP(x, a) ALIGN_DOWN((x) + (a) - 1, a)
// //
// Large (64-bit) integer value. // Large (64-bit) integer value.
// //
@ -157,21 +203,6 @@ typedef union ULARGE_INTEGER {
ULONGLONG QuadPart; ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER; } ULARGE_INTEGER, *PULARGE_INTEGER;
//
// Struct field offset helper.
//
#if !defined(__GNUC__) && !defined(__clang__)
#define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field))
#else
#define FIELD_OFFSET(type, field) ((ULONG)__builtin_offsetof(type, field))
#endif
//
// Alignment helpers.
//
#define ALIGN_DOWN(x, a) ((x) & ~((a) - 1))
#define ALIGN_UP(x, a) ALIGN_DOWN((x) + (a) - 1, a)
// //
// Doubly-linked list entry. // Doubly-linked list entry.
// //
@ -180,4 +211,20 @@ typedef struct _LIST_ENTRY {
struct _LIST_ENTRY *BackLink; struct _LIST_ENTRY *BackLink;
} LIST_ENTRY, *PLIST_ENTRY; } LIST_ENTRY, *PLIST_ENTRY;
//
// Unicode string.
//
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
typedef CONST UNICODE_STRING *PCUNICODE_STRING;
#define UNICODE_NULL ((WCHAR) 0)
#define MAX_USTRING ALIGN_DOWN(MAXUSHORT, sizeof(WCHAR))
#include <guiddef.h>
#endif /* !_NTDEF_H */ #endif /* !_NTDEF_H */