56 lines
2.0 KiB
C
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);
|