// Init service-configuration declarations. services.ini is strict policy owned by init. #pragma once #include #include #include #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 typedef enum INIT_SERVICE_TYPE { InitServiceTypeResource = 0, InitServiceTypeDwm, InitServiceTypeGeneric, } INIT_SERVICE_TYPE; 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_TYPE Type; 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]; } 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; uint16_t ResourceServiceIndex; uint16_t DwmServiceIndex; } 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);