diff --git a/SDK/INC/NT/guiddef.h b/SDK/INC/NT/guiddef.h new file mode 100644 index 0000000..01e8b99 --- /dev/null +++ b/SDK/INC/NT/guiddef.h @@ -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 */ diff --git a/SDK/INC/NT/ntdef.h b/SDK/INC/NT/ntdef.h index d0d1abe..602caac 100644 --- a/SDK/INC/NT/ntdef.h +++ b/SDK/INC/NT/ntdef.h @@ -30,14 +30,6 @@ Abstract: #define OPTIONAL #endif -#ifndef FASTCALL -#define FASTCALL -#endif - -#ifndef NTAPI -#define NTAPI -#endif - #ifndef VOID #define VOID void #endif @@ -50,19 +42,35 @@ Abstract: #define ANYSIZE_ARRAY 1 #endif +#ifndef NULL +#if defined(__cplusplus) +#define NULL 0 +#else +#define NULL ((VOID *)0) +#endif +#endif + #ifndef FORCEINLINE #if defined(_MSC_EXTENSIONS) -#define FORCEINLINE __inline +#define FORCEINLINE __forceinline #else #define FORCEINLINE static inline #endif #endif -#ifndef NULL -#ifdef __cplusplus -#define NULL 0 +#ifndef FASTCALL +#if defined(_M_IX86) +#define FASTCALL __fastcall #else -#define NULL ((VOID *)0) +#define FASTCALL +#endif +#endif + +#ifndef NTAPI +#if !defined(_M_AMD64) +#define NTAPI __stdcall +#else +#define NTAPI #endif #endif @@ -76,6 +84,19 @@ typedef unsigned char UCHAR; typedef unsigned short USHORT; 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. // @@ -86,27 +107,51 @@ typedef UCHAR *PUCHAR; typedef USHORT *PUSHORT; typedef ULONG *PULONG; -// -// Logical value types. -// -typedef ULONG LOGICAL; -typedef ULONG *PLOGICAL; - // // String types. // -typedef CHAR *LPSTR; -typedef CONST CHAR *LPCSTR; +typedef CHAR *PSTR, *LPSTR; +typedef CONST CHAR *PCSTR, *LPCSTR; // // Wide character/string types. // typedef USHORT WCHAR; -typedef WCHAR *PWCHAR, *LPWSTR; -typedef CONST WCHAR *LPCWSTR; +typedef WCHAR *PWCHAR, *PWSTR, *LPWSTR; +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 NTSTATUS *PNTSTATUS; @@ -120,19 +165,20 @@ typedef NTSTATUS *PNTSTATUS; #define NT_ERROR(Status) ((ULONG)(Status) >> 30 == 3) // -// Long long type definitions. +// Struct field offset helper. // -#if defined(_MSC_EXTENSIONS) -typedef unsigned __int64 ULONGLONG; -typedef __int64 LONGLONG; -#elif defined(UNIX_LP64) -typedef unsigned long ULONGLONG; -typedef long LONGLONG; +#if defined(__clang__) || defined(__GNUC__) +#define FIELD_OFFSET(type, field) ((ULONG)__builtin_offsetof(type, field)) #else -typedef unsigned long long ULONGLONG; -typedef long long LONGLONG; +#define FIELD_OFFSET(type, field) ((ULONG)&(((type *)0)->field)) #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. // @@ -157,21 +203,6 @@ typedef union ULARGE_INTEGER { ULONGLONG QuadPart; } 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. // @@ -180,4 +211,20 @@ typedef struct _LIST_ENTRY { struct _LIST_ENTRY *BackLink; } 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 + #endif /* !_NTDEF_H */