> For the complete documentation index, see [llms.txt](https://docs.medcrypt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.medcrypt.com/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-guardian.md).

# medcrypt::guardian::Guardian

## 개요

해당 `Guardian`  클래스는 Guardian 보안 플랫폼의 기본 인터페이스입니다. 의료기기를 위한 기기 프로비저닝, 보안 통신, 암호화 작업을 제공합니다. 기기의 전체 수명 주기 동안 다음을 처리합니다:

* 기기 ID 설정
* 보안 연결
* 인증서 관리

**포함**

```cpp
#include <Guardian.h>
```

### 기기 프로비저닝 함수

* [Guardian](#function-guardian) : 생성자는 멤버 변수를 초기화하는 것 외에는 아무 작업도 수행하지 않습니다.
* [Initialize](#function-initialize): 제공된 프로필, ID 및 신뢰 파일을 사용하여 Guardian 시스템을 초기화합니다.
* [GenerateProvisionRequest](#function-generateprovisionrequest): 프로비저닝 프로세스의 첫 번째 기기 프로비저닝 단계입니다.
* [StartProvisioningOnline](#function-startprovisioningonline): 온라인 기기 프로비저닝 프로세스를 시작합니다.
* [IsProvisioningRunning](#function-isprovisioningrunning): 프로비저닝 프로세스가 활성 상태인지 확인합니다.
* [GetProvisionedProfile](#function-getprovisionedprofile): 디바이스 프로비저닝에 성공한 후 디바이스의 프로비저닝된 인증 프로필을 추출합니다.

### 인증서 관리 함수

* [GetCertificateManager:](#function-getcertificatemanager) 실행 중인 인증서 관리자를 가져옵니다.
* [GetProvisionedRevocationList](#function-getprovisionedrevocationlist): 인증서 폐지 목록을 가져와 버퍼에 채웁니다.

### **보안 작업 함수**

* [FindSecureOperation](#function-findsecureoperation): 서명/검증을 위한 보안 작업 핸들러를 조회합니다.

### **서비스 관리 함수**

* [FindService](#function-findservice): 구성된 서비스를 찾기 위해 서비스 이름을 조회합니다.
* [CreateTask](#function-createtask): 서비스, 세션 또는 채널 작업을 위한 태스크를 생성합니다. 제공된 객체와 모든 하위 항목을 다음 항목에서 분리합니다. [Run](#function-run).

### **시스템 관리 함수**

* [GetAuthenticationManager](#function-getauthenticationmanager): 실행 중인 인증 관리자를 가져옵니다.
* [GetTelemetryManager](#function-gettelemetrymanager): 실행 중인 텔레메트리 관리자를 가져옵니다.
* [\~Guardian](#function-~guardian) : 소멸자는 Guardian을 정상적으로 종료하려고 시도합니다.
* [종료](#function-shutdown): Guardian을 정상적으로 종료합니다

## 디바이스 설정 및 프로비저닝 워크플로

### 단계 개요

#### [사전 요구 사항: Guardian 인스턴스 생성](#function-guardian)

**함수:** `Guardian()`

* 새 Guardian 인스턴스를 생성합니다
* 다른 작업을 수행하기 전에 가장 먼저 호출해야 합니다.
* 멤버 변수를 초기화하고 시스템을 시작 상태로 설정합니다

#### [1단계: 디바이스 설정](#function-initialize)

**함수:** `Initialize()`

* Guardian 인스턴스를 생성한 후 가장 먼저 호출해야 합니다
* 초기 구성으로 Guardian을 설정합니다
* 프로비저닝 작업을 수행하기 전에 필요합니다

#### [2단계: 프로비저닝 요청 생성](#function-generateprovisionrequest)

**함수:** `GenerateProvisionRequest()`

* 프로비저닝 요청(.mcpr) 및 개인 ID(.mcpi) 파일을 생성합니다
* 프로비저닝 패키지를 사용하여 디바이스 키를 생성합니다
* 다른 프로비저닝 작업을 수행하기 전에 한 번 호출해야 합니다

#### [3단계: 요청 제출 및 처리](#function-startprovisioningonline)

**함수:** `StartProvisioningOnline()`

* 온라인 프로비저닝 상태 머신을 시작합니다
* 프로비저닝 요청을 Guardian Cloud에 제출합니다
* 자동 처리 워크플로를 시작합니다

#### [4단계: 프로비저닝을 모니터링하고 디바이스의 인증된 프로파일을 가져옵니다](#function-getprovisionedprofile)

**함수:** `Run()`, `IsProvisioningRunning()`, `GetProvisionedProfile()`

* `Run()` : 백그라운드 프로비저닝 작업을 실행합니다
* `IsProvisioningRunning()` : 프로비저닝 프로세스가 계속 실행 중인지 확인합니다
* `GetProvisionedProfile()` - 디바이스에 대해 프로비저닝이 완료된 인증 프로필을 가져옵니다

### 1단계: Guardian() 실행 <a href="#function-guardian" id="function-guardian"></a>

* **설명:**
  * 새 Guardian 인스턴스를 생성합니다.
  * 디바이스 자격 증명으로 Guardian을 초기화하기 전에 수행하는 첫 번째 단계입니다.
  * 이 생성자는 멤버 변수만 초기화합니다.
* **종속성:** 없음 - 가장 먼저 호출하는 함수입니다.
* **매개변수:** 없음 - 기본 생성자는 매개변수를 받지 않습니다.
* **반환값:** 생성자이므로 반환값이 없습니다.
* **동작:** Guardian 인스턴스를 초기화할 수 있도록 시작 상태로 전환합니다(`m_p_guardian`).

**구문**

```cpp
Guardian()
```

### 2단계: Initialize() 실행 <a href="#function-initialize" id="function-initialize"></a>

* **설명:** 디바이스 자격 증명과 구성 파일을 사용하여 Guardian을 초기화합니다. 제공된 프로필, ID 및 신뢰 파일을 사용하여 Guardian 시스템을 초기화합니다.
* **종속성:**
  * 다음 작업 후에 호출해야 합니다. [Guardian 인스턴스 생성](#function-guardian) (`Guardian()` 생성자).
  * 다른 Guardian 작업을 수행하기 전에 호출해야 합니다.
* **매개변수:**
  * `in_files`: 장치 자격 증명 및 구성 파일
  * `in_component_handle`: 프로비저닝에 사용되는 고유한 구성 요소 식별자입니다.
    * **유형:** `const char*`
  * `in_hardware_identifier`: 고유한 하드웨어 식별자입니다.
    * **문자 제한:** 36자(널 종료 문자 포함 시 37자)
    * **유형:** `const char*`
  * `in_options`: 추가 초기화 구성 옵션
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK`**.** Guardian 시스템이 성공적으로 초기화되었습니다.
  * **오류 코드:**
    * `FAIL`: 일반 오류입니다. Guardian이 초기화되지 않았습니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM`: 입력값 중 하나가 null이거나 비어 있습니다.
    * `FILENOTFOUND`: 필수 입력 파일을 사용할 수 없습니다.
    * `OUTOFMEMORY` **:** Guardian을 초기화하기에 메모리가 부족합니다.
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **동작:** 디바이스 ID로 Guardian을 설정하고 보안 작업을 수행할 수 있도록 준비합니다.

**구문**

```cpp
Status Initialize(
    const utilities::InitializeFiles & in_files,
    const char * in_component_handle,
    const char * in_hardware_identifier,
    const InitializeOptions & in_options
)
```

### 3단계: GenerateProvisionRequest() 실행 <a href="#function-generateprovisionrequest" id="function-generateprovisionrequest"></a>

* **설명:** 디바이스 ID를 설정하기 위한 프로비저닝 요청을 생성합니다.
  * 프로비저닝 프로세스의 첫 번째 단계입니다.
  * 오프라인 프로비저닝 프로세스에서 유일한 단계입니다.
  * 입력 파일을 사용하여 프로비저닝 요청과 프라이빗 ID를 생성합니다.
* **종속성:**
  * 다음 호출 후에 호출해야 합니다: `Initialize()`
  * 다른 프로비저닝 또는 재프로비저닝 작업을 수행하기 전에 한 번 호출해야 합니다.
  * 다음 작업 전에 필요합니다: `StartProvisioningOnline()`
* **매개변수:**
  * `io_files` : 프로비저닝 파일 구조입니다.\
    `in_provisioning_component_handle` : 프로비저닝에 사용되는 고유한 구성 요소 식별자입니다.
    * **유형:** `const char*`
  * `in_provisioning_system` : Guardian Cloud로 전송되는 고유한 시스템 이름 식별자입니다.
    * **문자 제한:** 36자(널 종료 문자 포함 시 37자)
    * **유형:** `const char*`
  * `in_hardware_identifier` - 고유한 하드웨어 식별자입니다.
    * **문자 제한:** 36자(널 종료 문자 포함 시 37자)
    * **유형:** `const char*`
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK`**.** 프로비저닝 요청이 성공적으로 생성되었습니다
  * **오류 코드:**
    * `FAIL`: 일반 오류입니다. 자세한 내용은 로그 파일을 확인하십시오.
    * `BADPARAM`: 입력값 중 하나가 null이거나 비어 있습니다.
    * `FILENOTFOUND`: 필수 입력 파일을 사용할 수 없습니다.
    * `NOWRITE`: 필수 출력 파일을 쓸 수 없습니다.
    * `OUTOFMEMORY` : 프로비저닝할 메모리가 부족합니다.
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **동작:**
  * 디바이스 키를 생성하고 프로비저닝 요청을 생성합니다.
  * 디바이스의 프라이빗 ID( `PrivateIdentity` )와 디바이스의 프로비저닝 요청( `ProvisionRequest` ).
    * 해당 `PrivateIdentity` 에는 생성된 디바이스 키가 포함됩니다. 이는 **.mcpi** 파일입니다.
    * 해당 `ProvisionRequest` 는 Guardian Cloud에 수동으로 업로드하거나 프로필에서 사용 가능한 온라인 방법을 통해 전송할 수 있습니다. 이는 **.mcpr** 파일입니다.

**구문**

```cpp
상태 GenerateProvisionRequest(
    utilities::ProvisionFiles & io_files,
    const char * in_provisioning_component_handle,
    const char * in_provisioning_system,
    const char * in_hardware_identifier
)
```

### 4단계: StartProvisioningOnline() <a href="#function-startprovisioningonline" id="function-startprovisioningonline"></a>

* **설명:** Guardian Cloud에 프로비저닝 요청을 제출하기 위한 온라인 프로비저닝 프로세스를 시작합니다.
* **종속성:** 다음 함수를 실행한 후 실행해야 합니다: [GenerateProvisionRequest()](#function-generateprovisionrequest).
* **매개변수:**
  * `in_files`: 온라인 프로비저닝에 필요한 파일
  * `in_options`: 시간 제한을 포함한 추가 선택적 프로비저닝 구성 옵션
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : 온라인 프로비저닝이 성공적으로 시작되었습니다
  * **오류 코드:**
    * `FAIL` : 프로비저닝 시작 중 일반 오류가 발생했습니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : 입력값 중 하나가 null이거나 유효하지 않습니다
    * `FILENOTFOUND` : 필수 프로비저닝 파일을 사용할 수 없습니다
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **동작:** 내부 프로비저닝 상태 머신을 시작하고 Guardian Cloud와의 통신을 시작합니다.

**구문**

```cpp
Status StartProvisioningOnline(
    const utilities::ProvisionOnlineFiles & in_files,
    const ProvisioningOptions & in_options
)
```

### 5단계: 프로비저닝을 모니터링하고 디바이스의 인증된 프로필 검색

**프로세스 개요:**

1. 다음을 호출합니다. [`Run()`](#function-run) 프로비저닝 작업을 처리하기 위해 반복해서 호출합니다.
2. 다음을 호출합니다. [`IsProvisioningRunning()`](#function-isprovisioningrunning) 프로비저닝이 완료되었는지 확인합니다.
3. 다음이 `IsProvisioningRunning()` false를 반환하면 다음을 호출합니다. [`GetProvisionedProfile()`](#function-getprovisionedprofile) 인증된 프로필을 가져옵니다.

#### Run() <a href="#function-run" id="function-run"></a>

* **설명:**
  * 프로비저닝 상태 머신 처리를 포함한 Guardian 백그라운드 작업을 실행합니다.
  * 다른 스레드에 배치되지 않았거나 부모 작업이 다른 스레드에 배치되지 않은 프로비저닝, 원격 측정, 핸드셰이크, 인증, 서비스, 세션 및 채널을 포함합니다. 이는 다음에서 수행됩니다. [CreateTask](#function-createtask). 프로그램/스레드의 메인 루프에서 호출해야 합니다.
  * 온라인 프로비저닝 중에 정기적으로 반복 호출해야 합니다.
  * 사용 [IsProvisioningRunning()](#function-isprovisioningrunning) 프로비저닝이 완료되었는지 확인하고 Run() 호출을 중지합니다.
* **매개변수:** 매개변수 없음
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` - 백그라운드 작업이 성공적으로 실행됨
  * **오류 코드:**
    * `FAIL` - 백그라운드 처리 중 일반 오류가 발생했습니다. 자세한 내용은 로그 파일을 확인하세요.
    * `SHUTDOWN` : Guardian이 종료 상태이므로 run을 다시 호출하기 전에 재초기화해야 합니다.
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **동작:** 내부 상태 머신을 처리하고 Guardian Cloud와의 통신을 관리합니다.

#### IsProvisioningRunning() <a href="#function-isprovisioningrunning" id="function-isprovisioningrunning"></a>

* **설명:** 프로비저닝 프로세스가 아직 활성 상태인지 확인합니다.
* **종속성:**
  * 다음 함수를 호출한 후 호출해야 합니다: `StartProvisioningOnline()`
  * 다음 함수의 호출을 언제 중단하고 [Run()](#function-run) 프로비저닝된 프로필의 검색을 시도할지 판단하는 데 사용됩니다.
* **매개변수:** 없음 - 이 함수는 매개변수를 사용하지 않습니다
* **반환값:** 프로비저닝 상태를 나타내는 불리언 값
  * `true` - 프로비저닝이 아직 진행 중입니다. 계속 호출하세요 [Run()](#function-run)
  * `false` - 프로비저닝이 완료되었습니다(성공 또는 실패). 이제 다음을 호출해야 합니다 [GetProvisionedProfile()](#function-getprovisionedprofile).
  * 온라인 프로비저닝 프로세스가 시작되기 전에는 `false`.
  * 온라인 프로비저닝이 성공하거나 실패한 후에는 다시 `false`.
* **작업:** 프로비저닝 프로세스가 아직 활성 상태인지 나타냅니다

**구문**

```cpp
bool IsProvisioningRunning()
```

#### GetProvisionedProfile() <a href="#function-getprovisionedprofile" id="function-getprovisionedprofile"></a>

* **설명:**
  * 온라인 프로비저닝이 성공적으로 완료된 후 프로비저닝된 프로필을 추출합니다.
* **종속성:**
  * 다음 호출 후에만 호출해야 합니다 [IsProvisioningRunning()](#function-isprovisioningrunning) 가 반환됩니다 `false`.
  * 다음 작업이 성공적으로 완료되어야 합니다: `StartProvisioningOnline()` 및 `Run()` 루프
* **매개변수:**
  * `out_profile`: 프로비저닝된 프로필을 받을 버퍼입니다.
    * 유형: `char`
  * `io_size`:
    * 입력 시 버퍼 크기( `out_profile` )를 지정합니다. 프로비저닝에 성공하면, `out_profile` 실제 프로필 크기로 설정됩니다.
    * 유형: `size_t`
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : 프로비저닝된 프로필을 성공적으로 가져왔습니다.
    * 버퍼에는 다음 위치에 유효한 인증 프로필이 들어 있습니다: `out_profile` 크기: `io_size`.
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `INCOMPLETE` : 프로비저닝 프로세스가 완료되지 않아 사용할 수 있는 프로필이 없습니다.
    * `BADPARAM` - `out_profile` 또는 `io_size` 가 널 포인터(`nullptr`)이거나, `io_size` 가 0입니다.
    * `DENIED` - 온라인 프로비저닝 프로세스가 아직 실행 중입니다.
    * `FILENOTFOUND` - 프로비저닝이 완료되었지만 프로비저닝된 프로필을 사용할 수 없습니다.
    * `BADPARAM` - 버퍼 또는 크기 매개변수가 유효하지 않습니다.
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **작업:** 프로비저닝이 완료된 프로필을 지정된 버퍼에 복사합니다.

**구문**

```cpp
Status GetProvisionedProfile(
    char * out_profile,
    size_t * io_size
)
```

## 인증서 관리 함수

### GetCertificateManager() <a href="#function-getcertificatemanager" id="function-getcertificatemanager"></a>

* **설명:** 기기 인증서를 처리하는 인증서 관리자를 가져옵니다. 인증서 작업 및 수명 주기 관리 기능을 제공합니다.
* **종속성:**
  * 선택적으로 다음 호출 후에 호출할 수 있습니다: `Initialize()`
* **매개변수:**
  * `out_certificate_manager`: 인증서 관리자 인스턴스를 전달받는 출력 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` :
    * 인증서 관리자를 성공적으로 가져왔습니다.
    * 유효한 포인터가 `out_certificate_manager` 에 저장됩니다.
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `out_certificate_manager` 가 null 포인터이므로 값을 채울 수 없습니다.
    * `DENIED` : Guardian이 초기화되지 않았습니다.
    * `MISCONFIGURED` : 로드된 프로비저닝 프로필이 인증서 작업을 허용하도록 구성되지 않았습니다.
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **조치:**
  * 가져온 인증서 관리자를 사용하여 인증서를 가져오고 내보냅니다.

**구문**

```cpp
Status GetCertificateManager(
    std::unique_ptr< CertificateManager > * out_certificate_manager
)
```

### GetProvisionedRevocationList() <a href="#function-getprovisionedrevocationlist" id="function-getprovisionedrevocationlist"></a>

* **설명:**
  * 인증서 유효성을 확인하기 위한 인증서 폐기 목록(CRL)을 가져옵니다.
  * 더 이상 신뢰해서는 안 되는 폐기된 인증서를 식별하는 데 사용합니다.
* **종속성:**
  * 프로비저닝이 성공적으로 완료된 후(다음을 호출한 후) 선택적으로 호출할 수 있습니다: `GetProvisionedProfile` )
* **매개변수:**
  * `out_ccrl`: 인증서 폐기 목록을 전달받는 버퍼
    * 유형: `char*`
  * `io_size`: 입력 시 버퍼 크기, 출력 시 실제 크기
    * 입력 시 버퍼( `out_ccrl` )의 크기를 지정합니다. 프로비저닝이 성공하면 `out_ccrl` 해당 값이 실제 CRL 크기로 설정됩니다.
    * 유형: `size_t`
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK`
    * `out_ccrl` 에는 유효한 인증서 폐기 목록이 저장되며, 그 크기는 다음과 같습니다: `io_size`
  * **오류 코드:**
    * `FAIL` - 일반 오류입니다. 자세한 내용은 로그 파일을 확인하십시오.
    * `INCOMPLETE` - 프로비저닝 프로세스가 완료되지 않아 인증서 폐기 목록을 사용할 수 없습니다.
    * `BADPARAM` : `out_ccrl` 또는 `io_size` 은(는) null 포인터이거나 `io_size` 은(는) 0입니다
    * `DENIED` - 온라인 프로비저닝 프로세스가 아직 실행 중입니다.
    * `FILENOTFOUND` - 프로비저닝은 완료되었지만 사용할 수 있는 폐기 목록이 없습니다
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **동작:** 인증서 폐기 목록을 제공된 버퍼에 복사합니다

**구문**

```cpp
Status GetProvisionedRevocationList(
    char * out_ccrl,
    size_t * io_size
)
```

## 보안 작업 함수

### FindSecureOperation() <a href="#function-findsecureoperation" id="function-findsecureoperation"></a>

* **설명:**
  * 보안 작업 이름을 조회합니다.
  * 서명 및 확인 작업을 위한 보안 작업 핸들러를 가져옵니다.
* **종속성:**
  * 선택적으로 다음 호출 후에 호출할 수 있습니다: `Initialize()`
* **매개변수:**
  * `in_secureop_name`: null 종료된 보안 작업 이름입니다.
    * **유형**: `const char*`
  * `out_secureop`: 다음을 가리키는 포인터입니다. `unique_ptr` 찾은 보안 작업의 저장소
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
* **성공 코드:** `OK` : 의 포인터 `out_secureop` 가 유효합니다
* **오류 코드:**
  * `FAIL` : 다음에서 지정한 작업을 찾을 수 없습니다. `in_secureop_name`
  * `BADPARAM` : `out_secureop` 은(는) null 포인터이므로 값을 저장할 수 없습니다
  * `DENIED` : Guardian이 초기화되지 않았습니다.
* **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **조치:**
  * 설정합니다 `out_secureop` 을(를) 찾은 작업으로 설정합니다
  * 수정하지 않습니다: `out_secureop` 작업이 `in_secureop_name` 에 해당하는 항목을 찾지 못한 경우

**구문**

```cpp
Status FindSecureOperation(
    const char * in_secureop_name,
    std::unique_ptr< SecureOperation > * out_secureop
)
```

## 서비스 관리 함수

### FindService() <a href="#function-findservice" id="function-findservice"></a>

* **설명:**
  * 서비스 이름을 조회하여 구성된 서비스를 찾습니다.
* **종속성:**
  * 다음 호출 후에 호출해야 합니다: `Initialize()`
* **매개변수:**
  * `in_service_name`: null 종료된 서비스 이름입니다
    * **유형:** `const char*`
  * `out_service`: 찾은 서비스의 unique\_ptr 저장소를 가리키는 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : `out_service` 의 포인터가 유효합니다
  * **오류 코드:**
    * `FAIL` : 다음으로 지정한 서비스를 찾을 수 없습니다: `in_service_name`
    * `BADPARAM` : `out_service` 가 null 포인터이므로 값을 설정할 수 없습니다
    * `DENIED` : Guardian이 초기화되지 않았습니다.
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **조치:**
  * 다음에 설정합니다: `out_service` 찾은 서비스
  * 수정하지 않습니다: `out_service` 서비스가 `in_service_name` 에 해당하지 않는 경우
  * 또는 서비스를 찾지 못한 경우에는 수정하지 않은 상태로 둡니다

**구문**

```cpp
Status FindService(
    const char * in_service_name,
    std::unique_ptr< Service > * out_service
)
```

### **CreateTask() - 서비스 변형** <a href="#function-createtask" id="function-createtask"></a>

* **설명:**
  * 제공된 객체와 모든 하위 객체를 Run에서 분리하여 서비스 작업용 태스크를 생성합니다.
  * 객체를 기본 Guardian Run 루프에서 분리하여 별도의 객체를 스레드로 실행할 수 있습니다.
* **종속성:**
  * 다음 호출 후에 호출해야 합니다: `Initialize()`
  * 서비스 객체는 유효해야 합니다
* **매개변수:**
  * `io_service`: 스레드에 배치할 서비스 구성 요소입니다. 성공하면 소유권이 이전되고, 실패하면 수정되지 않습니다.
  * `out_task`: 태스크용 unique\_ptr 저장소를 가리키는 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : out\_task에 유효한 태스크가 설정됩니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : io\_service 또는 out\_task가 null 포인터입니다
    * `DENIED` : 지정된 서비스가 이미 태스크에 포함되어 있습니다
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **동작:** 모든 하위 객체와 함께 태스크에 배치된 구성 요소는 Guardian Run 호출 시 실행되지 않으므로 별도의 객체를 스레드로 실행할 수 있습니다

**구문**

```cpp
Status CreateTask(
    std::unique_ptr< Service > * io_service,
    std::unique_ptr< Task > * out_task
)
```

### CreateTask() - 세션 변형 <a href="#function-createtask-session" id="function-createtask-session"></a>

* **설명:**
  * 제공된 객체와 모든 하위 객체를 Run에서 분리하여 서비스 작업용 태스크를 생성합니다.
  * 별도의 객체를 메인 [Run](#function-run) 루프에서 제거하여 스레드 처리를 가능하게 합니다.
* **종속성:**
  * 선택적으로 다음 호출 후에 호출할 수 있습니다: `Initialize()`
  * 서비스 객체는 유효해야 합니다
* **매개변수:**
  * `io_service`: 스레드에 배치할 서비스 구성 요소입니다. 성공하면 소유권이 이전되며, 실패하면 수정되지 않습니다.
  * `out_task`: 다음을 가리키는 포인터 `unique_ptr` 작업을 위한 저장소
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : `out_task` 유효한 작업을 포함합니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `io_service` 또는 `out_task` 널 포인터입니다
    * `DENIED` : 지정된 서비스가 이미 태스크에 포함되어 있습니다
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **조치:**
  * 모든 자식 객체와 함께 Task에 배치된 구성 요소는 다음을 호출해도 실행되지 않으므로 [Run](#function-run) 별도의 객체를 스레드로 처리할 수 있습니다.
  * 객체를 메인 Run 루프로 반환하려면 unique\_ptr을 소멸시키세요.

**구문**

```cpp
Status CreateTask(
    std::unique_ptr< Session > * io_session,
    std::unique_ptr< Task > * out_task
)
```

### CreateTask() - ChannelGuard 변형 <a href="#function-createtask-channelguard" id="function-createtask-channelguard"></a>

* **설명:**
  * 지정된 객체와 모든 자식 객체를 분리하는 채널 작업용 태스크를 생성합니다: [Run](#function-run).
  * 별도의 객체를 메인 [Run](#function-run) 루프에서 제거하여 스레드 처리를 가능하게 합니다.
* **종속성:**
  * 다음 호출 후에 호출해야 합니다: `Initialize()`
  * `ChannelGuard` 객체가 유효해야 합니다
* **매개변수:**
  * `io_channelguard`: `ChannelGuard` 스레드에 배치할 구성 요소
  * `out_task`: 다음을 가리키는 포인터 `unique_ptr` 작업을 위한 저장소
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : `out_task` 유효한 작업을 포함합니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `io_channelguard` 또는 `out_task` 널 포인터입니다
    * `DENIED` : 지정된 `ChannelGuard` 가 이미 태스크에 포함되어 있으며 반환되지 않았습니다
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **조치:**
  * 모든 자식 객체와 함께 Task에 배치된 구성 요소는 다음을 호출해도 실행되지 않으므로 [Run](#function-run) 별도의 객체를 스레드로 처리할 수 있습니다.
  * 객체를 메인 Run 루프로 반환하려면 unique\_ptr을 소멸시키세요.

**구문**

```cpp
Status CreateTask(
    std::unique_ptr< ChannelGuard > * io_channelguard,
    std::unique_ptr< Task > * out_task
)
```

## **시스템 관리 함수**

### GetAuthenticationManager() <a href="#function-getauthenticationmanager" id="function-getauthenticationmanager"></a>

* **설명:**
  * 실행 중인 인증 관리자를 가져옵니다.
  * 사용자가 관리하는 연결의 인증 작업 및 허용/거부 목록에 액세스할 수 있습니다.
* **종속성:**
  * 선택적으로 다음 호출 후에 호출할 수 있습니다: `Initialize()`
* **매개변수:**
  * `out_authentication_manager`: 인증 관리자용 unique\_ptr 저장소의 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : 다음의 포인터 `out_authentication_manager` 가 유효합니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `out_authentication_manager` 가 널 포인터이므로 값을 저장할 수 없습니다
    * `DENIED` : Guardian이 초기화되지 않았습니다.
    * `MISCONFIGURED` : 로드된 프로필이 외부 인증 작업을 허용하도록 구성되지 않았습니다
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **작업:** 가져온 인증 관리자를 사용하여 사용자가 관리하는 연결의 허용/차단 목록을 가져옵니다

**구문**

```cpp
Status GetAuthenticationManager(
    std::unique_ptr< AuthenticationManager > * out_authentication_manager
)
```

실행 중인 인증 관리자를 가져옵니다.

### GetTelemetryManager() <a href="#function-gettelemetrymanager" id="function-gettelemetrymanager"></a>

* **설명:**
  * 실행 중인 텔레메트리 관리자를 가져옵니다.
  * 텔레메트리 서비스와의 상호작용에 대한 액세스를 제공합니다.
* **종속성:**
  * 선택적으로 다음 호출 후에 호출할 수 있습니다: `Initialize()`
* **매개변수:**
  * `out_telemtry_manager`: 텔레메트리 관리자를 위한 `unique_ptr` 저장 공간을 가리키는 포인터
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : 포인터 `out_telemtry_manager` 가 유효합니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `BADPARAM` : `out_telemtry_manager` 가 null 포인터이므로 값을 채울 수 없습니다
    * `DENIED` : Guardian이 초기화되지 않았거나 실행 중인 텔레메트리 관리자가 없습니다
    * `MISCONFIGURED` : 로드된 프로필이 텔레메트리용으로 구성되지 않았습니다
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **작업:** 가져온 텔레메트리 관리자를 사용하여 텔레메트리 서비스와 상호작용합니다

**구문**

```cpp
Status GetTelemetryManager(
    std::unique_ptr< Telemetry > * out_telemtry_manager
)
```

### \~Guardian() <a href="#function-guardian" id="function-guardian"></a>

* **설명:** 소멸자는 Guardian을 정상적으로 종료하려고 시도합니다.
* **종속성:** 없음 - 객체가 범위를 벗어나거나 명시적으로 삭제될 때 소멸자가 자동으로 호출됩니다
* **매개변수:** 없음 - 소멸자는 매개변수를 받지 않습니다
* **반환값:** 소멸자이므로 반환값이 없습니다.
* **작업:** 소멸자는 정상적인 종료를 위해 다음을 호출하려고 시도한 다음 [Shutdown](#function-shutdown) Guardian이 소멸됩니다.

**구문**

```cpp
~Guardian()
```

### Shutdown() <a href="#function-shutdown" id="function-shutdown"></a>

* **설명:**
  * 모든 내부 상태 머신을 중지하고 Guardian을 종료하려고 시도합니다.
  * 프로비저닝, 텔레메트리, 핸드셰이크, 인증, 서비스, 세션 및 채널을 포함하며, 다른 스레드에 배치되었거나 부모가 다른 스레드에 배치된 항목도 모두 포함합니다. 이는 [CreateTask](#function-createtask).
* **종속성:**
  * 선택적으로 다음 호출 후에 호출할 수 있습니다: `Initialize()`
  * 전송 대기 중인 데이터가 있으면 실패 코드를 반환하거나 다음 값을 요구합니다: `in_force`
* **매개변수:**
  * `in_force`: 대기 중인 모든 전송 데이터를 삭제하고 종료합니다. 기본값은 `false`.
* **반환값:** 성공 또는 실패를 나타내는 상태 코드입니다.
  * **성공 코드:** `OK` : Guardian이 성공적으로 종료되었습니다
  * **오류 코드:**
    * `FAIL` : 일반 오류입니다. 자세한 내용은 로그 파일을 확인하세요.
    * `AGAIN` : 하나 이상의 전송 계층에 전송 대기 중인 데이터가 있습니다
  * **참고:** [모든 상태 코드](/ko/guardian/api-overview/api-reference/namespaces/namespacemedcrypt-guardian-guardianstatusenum.md)
* **작업:** 프로비저닝, 원격 측정, 핸드셰이크, 인증, 서비스, 세션, 채널을 포함한 모든 내부 상태 머신을 중지합니다.

**구문**

```cpp
Status Shutdown(
    const bool & in_force =false
)
```

## 디버깅 및 로깅

Guardian은 로그 파일을 생성하지 않습니다. 대신 로깅은 애플리케이션에서 제어합니다.

* Guardian은 로그를 다음으로 출력합니다: `stdout` 및 `stderr`이러한 로그는 실행 중인 애플리케이션의 터미널/CLI에 표시됩니다. 출력에서 특정 오류 코드나 연결 실패를 확인하세요.
* **사용자 지정 로깅:** 다음을 사용하여 `SetLoggingCallback` 로그 메시지를 콜백 함수로 리디렉션할 수 있습니다. 이렇게 하면 터미널 출력이 중단되고 사용자 지정 로그 처리가 가능해집니다.
* **로그 제어:** 애플리케이션에서 로그 수준과 상세도를 제어할 수 있습니다.
* **Guardian Cloud UI**: Guardian Cloud 인터페이스에서 추가 오류 세부 정보와 프로비저닝 상태를 확인하세요.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.medcrypt.com/ko/guardian/api-overview/api-reference/classes/classmedcrypt-guardian-guardian.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
