Atmosphere/docs/components/modules/sm.md
2020-04-26 19:18:49 +01:00

2.0 KiB

sm

This module is a reimplementation of the Horizon OS's sm system module, which is responsible for service management.

Extensions

Atmosphère extends this module with extra IPC commands and new services.

Debug Monitor

Atmosphère's reimplementation provides an interface sm:dmnt to allow a debug monitor to query the service manager's state.

The SwIPC definition for sm:dmnt follows:

interface ams::sm::DmntService is sm:dmnt {
  [65000] AtmosphereGetRecord(ServiceName service) -> sf::Out<ServiceRecord> record;
  [65001] AtmosphereListRecords(u64 offset) -> sf::OutArray<ServiceRecord> &records, sf::Out<u64> out_count;
  [65002] AtmosphereGetRecordSize() -> sf::Out<u64> record_size;
}

IPC Commands

Atmosphère's reimplementation extends the HIPC loader services' API with several custom commands.

The SwIPC definition for the sm: extension commands follows:

interface ams::sm::UserService is sm: {
  ...
  [65000] AtmosphereInstallMitm(ServiceName service) -> sf::OutMoveHandle srv_h, sf::OutMoveHandle qry_h;
  [65001] AtmosphereUninstallMitm(ServiceName service);
  [65002] Deprecated_AtmosphereAssociatePidTidForMitm();
  [65003] AtmosphereAcknowledgeMitmSession(ServiceName service) -> sf::Out<MitmProcessInfo> client_info, sf::OutMoveHandle fwd_h;
  [65004] AtmosphereHasMitm(ServiceName service) -> sf::Out<bool> out;
  [65005] AtmosphereWaitMitm(ServiceName service);
  [65006] AtmosphereDeclareFutureMitm(ServiceName service);
  
  [65100] AtmosphereHasService(ServiceName service) -> sf::Out<bool> out;
  [65101] AtmosphereWaitService(ServiceName service);
}

The SwIPC definition for the sm:m extension commands follows:

interface ams::sm::ManagerService is sm:m {
  ...
  [65000] AtmosphereEndInitDefers(os::ProcessId process_id, sf::InBuffer &acid_sac, sf::InBuffer &aci_sac);
  [65001] AtmosphereHasMitm(ServiceName service) -> sf::Out<bool> out;
  [65002] AtmosphereRegisterProcess(os::ProcessId process_id, ncm::ProgramId program_id, cfg::OverrideStatus override_status, sf::InBuffer &acid_sac, sf::InBuffer &aci_sac);
}