Files

126 lines
4.6 KiB
C

// Public nt-lite capability handle declarations.
#pragma once
#include <stdint.h>
// Handle values are process-local monotonic identities. Zero is invalid, and
// an issued value is never reused during the lifetime of its owning process.
typedef uint32_t SYS_HANDLE;
typedef uint32_t SYS_RIGHTS;
#define SYS_HANDLE_INVALID ((SYS_HANDLE)0u)
#define SYS_STARTUP_CAPABILITY_NAME_MAX 63u
// Capability-management rights shared by every handle type. Rights may only attenuate during delegation.
#define SYS_RIGHT_DUPLICATE 0x00000001u
#define SYS_RIGHT_DERIVE 0x00000002u
#define SYS_RIGHT_REVOKE 0x00000004u
#define SYS_RIGHT_TRANSFER 0x00000008u
#define SYS_RIGHT_QUERY 0x00000010u
#define SYS_RIGHT_WAIT 0x00000020u
#define SYS_RIGHT_COMMON_MASK 0x0000003Fu
// Process-specific rights.
#define SYS_PROCESS_RIGHT_TERMINATE 0x00000100u
#define SYS_PROCESS_RIGHT_INSERT_HANDLE 0x00000200u
#define SYS_PROCESS_RIGHT_BUILD 0x00000400u
#define SYS_PROCESS_RIGHT_SECURITY_CONTEXT 0x00000800u
// Thread-specific rights.
#define SYS_THREAD_RIGHT_RESUME 0x00000100u
#define SYS_THREAD_RIGHT_SET_INFORMATION 0x00000200u
#define SYS_THREAD_RIGHT_NOTIFY 0x00000400u
// Mutex-specific rights.
#define SYS_MUTEX_RIGHT_RELEASE 0x00000100u
// Semaphore-specific rights.
#define SYS_SEMAPHORE_RIGHT_SIGNAL 0x00000100u
// Event-specific rights.
#define SYS_EVENT_RIGHT_SIGNAL 0x00000100u
// Queue-specific rights.
#define SYS_QUEUE_RIGHT_SEND 0x00000100u
#define SYS_QUEUE_RIGHT_RECEIVE 0x00000200u
// File-specific rights.
#define SYS_FILE_RIGHT_READ_DATA 0x00000100u
#define SYS_FILE_RIGHT_WRITE_DATA 0x00000200u
#define SYS_FILE_RIGHT_LOCK 0x00000400u
#define SYS_FILE_RIGHT_MAP_READ 0x00000800u
#define SYS_FILE_RIGHT_MAP_WRITE 0x00001000u
// Mounted-volume rights.
#define SYS_VOLUME_RIGHT_OPEN 0x00000100u
#define SYS_VOLUME_RIGHT_MODIFY 0x00000200u
// Volume-manager rights. The manager capability is delegated only to the userspace storage control plane.
#define SYS_VOLUME_MANAGER_RIGHT_ENUMERATE 0x00000100u
#define SYS_VOLUME_MANAGER_RIGHT_OPEN 0x00000200u
#define SYS_VOLUME_MANAGER_RIGHT_WAIT 0x00000400u
// Input-manager rights. The bootstrap manager capability is delegated to RSSRV.
#define SYS_INPUT_MANAGER_RIGHT_READ 0x00000100u
#define SYS_INPUT_MANAGER_RIGHT_CONFIGURE 0x00000200u
// Display-manager rights. The bootstrap manager capability is delegated to RSSRV.
#define SYS_DISPLAY_MANAGER_RIGHT_ENUMERATE 0x00000100u
#define SYS_DISPLAY_MANAGER_RIGHT_MODESET 0x00000200u
#define SYS_DISPLAY_MANAGER_RIGHT_PRESENT 0x00000400u
#define SYS_DISPLAY_MANAGER_RIGHT_CURSOR 0x00000800u
#define SYS_DISPLAY_MANAGER_RIGHT_CONSOLE 0x00001000u
// Directory-specific rights.
#define SYS_DIR_RIGHT_ENUMERATE 0x00000100u
#define SYS_DIR_RIGHT_OPEN 0x00000200u
#define SYS_DIR_RIGHT_MODIFY 0x00000400u
// Asynchronous I/O request rights.
#define SYS_ASYNC_IO_RIGHT_CANCEL 0x00000100u
// Socket-specific rights.
#define SYS_SOCKET_RIGHT_BIND 0x00000100u
#define SYS_SOCKET_RIGHT_CONNECT 0x00000200u
#define SYS_SOCKET_RIGHT_LISTEN 0x00000400u
#define SYS_SOCKET_RIGHT_ACCEPT 0x00000800u
#define SYS_SOCKET_RIGHT_SEND 0x00001000u
#define SYS_SOCKET_RIGHT_RECEIVE 0x00002000u
#define SYS_SOCKET_RIGHT_SHUTDOWN 0x00004000u
#define SYS_SOCKET_RIGHT_POLL 0x00008000u
#define SYS_SOCKET_RIGHT_SET_OPTION 0x00010000u
// Pipe-endpoint rights.
#define SYS_PIPE_RIGHT_READ 0x00000100u
#define SYS_PIPE_RIGHT_WRITE 0x00000200u
#define SYS_PIPE_RIGHT_POLL 0x00000400u
// File-mapping rights.
#define SYS_FILE_MAPPING_RIGHT_MAP 0x00000100u
// Surface rights.
#define SYS_SURFACE_RIGHT_MAP_READ 0x00000100u
#define SYS_SURFACE_RIGHT_MAP_WRITE 0x00000200u
#define SYS_SURFACE_RIGHT_COMMIT 0x00000400u
// Timer rights.
#define SYS_TIMER_RIGHT_SET 0x00000100u
// Audio-stream rights.
#define SYS_AUDIO_STREAM_RIGHT_WRITE 0x00000100u
#define SYS_AUDIO_STREAM_RIGHT_CONTROL 0x00000200u
// System-service registry authority. Each authority object identifies one registry key.
#define SYS_SERVICE_REGISTRATION_RIGHT_REGISTER 0x00000100u
#define SYS_SERVICE_REGISTRATION_RIGHT_UNREGISTER 0x00000200u
// Security-context-specific rights are declared in <ntlite/security.h>.
// Rights normally retained by a newly created root capability.
#define SYS_RIGHT_MANAGE (SYS_RIGHT_DUPLICATE | SYS_RIGHT_DERIVE | SYS_RIGHT_REVOKE | SYS_RIGHT_TRANSFER)
// Native capability identifiers and access masks are 32-bit values.
_Static_assert(sizeof(SYS_HANDLE) == 4u, "SYS_HANDLE ABI width changed");
_Static_assert(sizeof(SYS_RIGHTS) == 4u, "SYS_RIGHTS ABI width changed");