Files
nt-lite/code/user/system/init/service_config.h
T

56 lines
2.0 KiB
C

// Init service-configuration declarations. services.ini is strict policy owned by init.
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <ntlite/syscall.h>
#include <ntlite/service_control.h>
#define INIT_SERVICES_PATH "system/services.ini"
#define INIT_SERVICES_MAX_FILE_BYTES (64u * 1024u)
#define INIT_SERVICE_MAX_COUNT 32u
#define INIT_SERVICE_ID_MAX 31u
#define INIT_SERVICE_DEPENDENCY_MAX 8u
#define INIT_SERVICE_GRANT_MAX 8u
#define INIT_SERVICE_GRANT_NAME_MAX SYS_STARTUP_CAPABILITY_NAME_MAX
#define INIT_SERVICE_EXPORT_MAX 8u
typedef enum INIT_SERVICE_START_POLICY {
InitServiceStartAuto = 0,
InitServiceStartDisabled,
} INIT_SERVICE_START_POLICY;
typedef enum INIT_SERVICE_RESTART_POLICY {
InitServiceRestartNever = 0,
InitServiceRestartOnFailure,
} INIT_SERVICE_RESTART_POLICY;
typedef struct INIT_SERVICE_DESCRIPTOR {
char Id[INIT_SERVICE_ID_MAX + 1u];
char ImagePath[SYS_PATH_MAX];
INIT_SERVICE_START_POLICY StartPolicy;
bool Critical;
INIT_SERVICE_RESTART_POLICY RestartPolicy;
uint32_t ReadyTimeoutMilliseconds;
uint32_t StopTimeoutMilliseconds;
uint32_t DependencyCount;
uint16_t Dependencies[INIT_SERVICE_DEPENDENCY_MAX];
uint32_t GrantCount;
char Grants[INIT_SERVICE_GRANT_MAX][INIT_SERVICE_GRANT_NAME_MAX + 1u];
uint32_t ExportCount;
char Exports[INIT_SERVICE_EXPORT_MAX][NTL_SERVICE_EXPORT_NAME_MAX + 1u];
} INIT_SERVICE_DESCRIPTOR;
typedef struct INIT_SERVICE_CONFIG {
INIT_SERVICE_DESCRIPTOR Services[INIT_SERVICE_MAX_COUNT];
uint16_t StartupOrder[INIT_SERVICE_MAX_COUNT];
uint32_t ServiceCount;
uint32_t StartupCount;
} INIT_SERVICE_CONFIG;
// Loads, strictly parses, and validates services.ini beneath the bootstrap system volume.
KSTATUS InitLoadServiceConfig(SYS_HANDLE systemVolume,
INIT_SERVICE_CONFIG* configOut,
uint32_t* errorLineOut);