#pragma once

#include <cstdint>

using NTSTATUS = std::uint32_t;

#ifndef OS_WINDOWS
#define STATUS_WAIT_0                 ((NTSTATUS)0x00000000L)
#define STATUS_USER_APC               ((NTSTATUS)0x000000C0L)
#define STATUS_TIMEOUT                ((NTSTATUS)0x00000102L)
#define STATUS_PENDING                ((NTSTATUS)0x00000103L)

#define STATUS_GUARD_PAGE_VIOLATION   ((NTSTATUS)0x80000001L)
#define STATUS_DATATYPE_MISALIGNMENT  ((NTSTATUS)0x80000002L)
#define STATUS_BREAKPOINT             ((NTSTATUS)0x80000003L)
#define STATUS_SINGLE_STEP            ((NTSTATUS)0x80000004L)

#define STATUS_ACCESS_VIOLATION       ((NTSTATUS)0xC0000005L)
#define STATUS_INVALID_HANDLE         ((NTSTATUS)0xC0000008L)
#define STATUS_INVALID_PARAMETER      ((NTSTATUS)0xC000000DL)
#define STATUS_ILLEGAL_INSTRUCTION    ((NTSTATUS)0xC000001DL)
#define STATUS_INTEGER_DIVIDE_BY_ZERO ((NTSTATUS)0xC0000094L)
#endif

#define STATUS_SUCCESS                    ((NTSTATUS)0x00000000L)
#define STATUS_WAIT_1                     ((NTSTATUS)0x00000001L)

#define STATUS_ALERTED                    ((NTSTATUS)0x00000101L)

#define STATUS_OBJECT_NAME_EXISTS         ((NTSTATUS)0x40000000L)

#define STATUS_NO_MORE_FILES              ((NTSTATUS)0x80000006L)
#define STATUS_NO_MORE_ENTRIES            ((NTSTATUS)0x8000001AL)

#define STATUS_UNSUCCESSFUL               ((NTSTATUS)0xC0000001L)
#define STATUS_INFO_LENGTH_MISMATCH       ((NTSTATUS)0xC0000004L)
#define STATUS_ACCESS_DENIED              ((NTSTATUS)0xC0000022L)
#define STATUS_BUFFER_TOO_SMALL           ((NTSTATUS)0xC0000023L)
#define STATUS_OBJECT_NAME_NOT_FOUND      ((NTSTATUS)0xC0000034L)
#define STATUS_INVALID_PAGE_PROTECTION    ((NTSTATUS)0xC0000045L)
#define STATUS_MUTANT_NOT_OWNED           ((NTSTATUS)0xC0000046L)
#define STATUS_SEMAPHORE_LIMIT_EXCEEDED   ((NTSTATUS)0xC0000047L)
#define STATUS_SECTION_NOT_IMAGE          ((NTSTATUS)0xC0000049L)
#define STATUS_NO_TOKEN                   ((NTSTATUS)0xC000007CL)
#define STATUS_FILE_INVALID               ((NTSTATUS)0xC0000098L)
#define STATUS_MEMORY_NOT_ALLOCATED       ((NTSTATUS)0xC00000A0L)
#define STATUS_FILE_IS_A_DIRECTORY        ((NTSTATUS)0xC00000BAL)
#define STATUS_NOT_SUPPORTED              ((NTSTATUS)0xC00000BBL)
#define STATUS_INTERNAL_ERROR             ((NTSTATUS)0xC00000E5L)
#define STATUS_PROCEDURE_NOT_FOUND        ((NTSTATUS)0xC000007AL)
#define STATUS_INVALID_ADDRESS            ((NTSTATUS)0xC0000141L)
#define STATUS_CONNECTION_RESET           ((NTSTATUS)0xC000020DL)
#define STATUS_NOT_FOUND                  ((NTSTATUS)0xC0000225L)
#define STATUS_CONNECTION_REFUSED         ((NTSTATUS)0xC0000236L)
#define STATUS_TIMER_RESOLUTION_NOT_SET   ((NTSTATUS)0xC0000245L)
#define STATUS_ADDRESS_ALREADY_ASSOCIATED ((NTSTATUS)0xC0000328L)
#define STATUS_PORT_NOT_SET               ((NTSTATUS)0xC0000353L)
#define STATUS_DEBUGGER_INACTIVE          ((NTSTATUS)0xC0000354L)
#define STATUS_PIPE_BROKEN                ((NTSTATUS)0xC000014BL)
#define STATUS_PIPE_EMPTY                 ((NTSTATUS)0xC00000D9L)
#define STATUS_PIPE_BUSY                  ((NTSTATUS)0xC00000AAL)
#define STATUS_PIPE_DISCONNECTED          ((NTSTATUS)0xC00000B0L)
#define STATUS_PIPE_LISTENING             ((NTSTATUS)0x00000105L)
#define STATUS_PIPE_CONNECTED             ((NTSTATUS)0x00000106L)
#define STATUS_PIPE_CLOSING               ((NTSTATUS)0xC00000B1L)
#define STATUS_PIPE_NOT_AVAILABLE         ((NTSTATUS)0xC00000ACL)
#define STATUS_INVALID_PIPE_STATE         ((NTSTATUS)0xC00000ADL)
#define STATUS_PIPE_NOT_CONNECTED         ((NTSTATUS)0xC00000BEL)

#define STATUS_BUFFER_OVERFLOW            ((NTSTATUS)0x80000005L)

#define STATUS_SERVICE_NOTIFICATION       ((NTSTATUS)0x40000018L)

#define FILE_DEVICE_NETWORK               0x00000012
#define FSCTL_AFD_BASE                    FILE_DEVICE_NETWORK
