다음을 통해 공유


Tbsi_Get_TCG_Log_Ex 함수(tbs.h)

지정된 형식의 TCG 로그라고도 하는 WBCL(Windows 부팅 구성 로그)을 가져옵니다.

구문

TBS_RESULT Tbsi_Get_TCG_Log_Ex(
  [in]            UINT32  logType,
  [out, optional] PBYTE   pbOutput,
  [in, out]       PUINT32 pcbOutput
);

매개 변수

[in] logType

검색할 로그의 형식입니다.

의미
TBS_TCGLOG_SRTM_CURRENT
0
현재 세션(부팅 또는 다시 시작)에 대한 PCR 0-15와 연결된 로그입니다.
TBS_TCGLOG_DRTM_CURRENT
1
현재 세션(부팅 또는 다시 시작)에 대한 PCR 17-22와 연결된 로그입니다.
TBS_TCGLOG_SRTM_BOOT
2
가장 최근의 클린 부팅 세션에 대한 PCR 0-15와 연결된 로그입니다.
TBS_TCGLOG_SRTM_RESUME
3
최대 절전 모드에서 가장 최근 다시 시작에 대한 PCR 0-15와 연결된 로그입니다.

[out, optional] pbOutput

WBCL을 수신하고 저장하는 버퍼에 대한 포인터입니다. pcbOutput이 가리키는 위치가 입력 시 0일 때 필요한 버퍼를 예측하려면 NULL로 설정합니다.

[in, out] pcbOutput

출력 버퍼의 크기(바이트)를 지정하는 부호 없는 long 정수에 대한 포인터입니다. 성공하면 pOutput에서 가리키는 데이터의 크기(바이트)를 포함합니다. 실패 시 에는 값이 포함되지 않습니다.

참고pbOutputNULL 이고 pcbOutput 이 가리키는 위치가 0이면 함수는 TBS_E_BUFFER_TOO_SMALL 반환합니다. 이 경우 pcbOutputpbOutput의 필요한 크기를 가리킵니다.

반환 값

반환 코드/값 설명
TBS_SUCCESS
0(0x0)
함수가 성공했습니다.
TBS_E_NO_EVENT_LOG
1(0x1)
TBS_TCGLOG_DRTM_CURRENT 요청되었지만 시스템이 부팅될 때 시스템에서 DRTM이 사용하도록 설정되지 않았습니다.
TBS_E_INTERNAL_ERROR
2150121473(0x80284001)
내부 소프트웨어 오류가 발생했습니다.
참고TBS_E_INTERNAL_ERROR 반환되면 시스템 이벤트 로그에 오류 코드가 0x80070032 TBS 이벤트 원본의 이벤트 ID 16385가 포함될 수 있습니다. 이는 하드웨어 플랫폼이 운영 체제에 TCG 이벤트 로그를 제공하지 않음을 나타낼 수 있습니다. 플랫폼 제조업체에서 BIOS 업그레이드를 설치하여 이 문제를 해결할 수 있는 경우도 있습니다.
 
TBS_E_INVALID_OUTPUT_POINTER
2150121475(0x80284003)
지정된 출력 포인터가 잘못되었습니다.
TBS_E_INSUFFICIENT_BUFFER
2150121477(0x80284005)
출력 버퍼가 너무 작습니다.
TBS_E_BUFFER_TOO_LARGE
2150121486(0x8028400E)
출력 버퍼가 너무 큽
TBS_E_TPM_NOT_FOUND
2150121487(0x8028400F)
호환되는 TPM(신뢰할 수 있는 플랫폼 모듈) 보안 디바이스는 이 컴퓨터에서 찾을 수 없습니다.
TBS_E_DEACTIVATED
2150121494(0x80284016)
TPM(신뢰할 수 있는 플랫폼 모듈) 보안 디바이스가 비활성화되었습니다.

설명

Tbsi_Get_TCG_Log_Ex 함수는 시스템의 TCG 이벤트 로그를 반환하고 버퍼 크기는 이벤트 수에 따라 달라집니다.

함수는 하드웨어 기능 및 펌웨어 설정에 따라 다양한 해시 알고리즘과 호환되는 형식을 사용하는 로그를 반환할 수 있습니다. 이 로그는 첫 번째 이벤트를 제외한 각 이벤트의 형식을 TCG_PCR_EVENT2 구조로 지정합니다.

typedef struct {
  TCG_PCRINDEX PCRIndex;
  TCG_EVENTTYPE EventType;
  TPML_DIGEST_VALUES Digests;
  UINT32 EventSize;
  UINT8 Event[EventSize];
} TCG_PCR_EVENT2;

typedef struct {
  UINT32 Count;
  TPMT_HA Digests;
} TPML_DIGEST_VALUES;

typedef struct {
  UINT16 HashAlg;
  UINT8 Digest[size_varies_with_algorithm];
} TPMT_HA;

로그는 첫 번째 이벤트의 형식을 TCG_PCR_EVENT 구조체로 지정합니다. 이 구조체는 이 설명 섹션의 뒷부분에 설명되어 있습니다. 다음 표에서는 이 첫 번째 이벤트에 대해 이 구조체의 멤버 값을 설명합니다.

TCG_PCR_EVENT 멤버 값 또는 설명
PCRIndex 0
EventType EV_NO_ACTION
다이제스트 0의 20바이트
EventSize 이벤트 멤버의 크기
이벤트 형식이 TCG_EfiSpecIdEventStruct
 

다음은 TCG_PCR_EVENT 구조체의 Event 멤버가 첫 번째 로그 이벤트에 사용하는 TCG_EfiSpecIdEventStruct 구조체의 구문을 보여 주는 것입니다.

typedef struct {
  BYTE[16] Signature;
  UINT32 PlatformClass;
  UINT8 SpecVersionMinor;
  UINT8 SpecVersionMajor;
  UINT8 SpecErrata;
  UINT8 UintNSize;
  UINT32 NumberOfAlgorithms;
  TCG_EfiSpecIdEventAlgorithmSize DigestSizes[NumberOfAlgorithms];
  UINT8 VendorInfoSize;
  UINT8 VendorInfo[VendorInfoSize];
} TCG_EfiSpecIdEventStruct;

typedef struct {
  UINT16 HashAlg;
  UINT16 DigestSize;
} TCG_EfiSpecIdEventAlgorithmSize;

로그가 다른 해시 알고리즘과 호환되는 형식을 사용하는 경우 TCG_EfiSpecIdEventStruct 구조체의 Signature 멤버는 "Spec ID Event03"의 null로 끝나는 ASCII 문자열로 설정됩니다. 이 첫 번째 이벤트의 DigestSizes 배열에는 로그에서 사용하는 다양한 해시 알고리즘에 대한 다이제스트 크기가 포함됩니다. 파서가 TCG_PCR_EVENT2 형식의 이벤트를 검사할 때 파서는 존재하는 모든 해시 알고리즘에 대한 정보 없이 TPML_DIGEST_VALUES 멤버를 구문 분석할 수 있습니다. 첫 번째 이벤트의 다이제스트 크기를 사용하면 파서가 존재하는 다이제스트의 올바른 바이트 수를 건너뛸 수 있습니다.

Signature 멤버가 "Spec ID Event03"의 null로 끝나는 ASCII 문자열로 설정되지 않은 경우 로그의 이벤트는 TCG_PCR_EVENT 형식이며 TCG_EfiSpecIdEventStruct 구조에는 NumberOfAlgorithmsDigestSizes 멤버가 포함되지 않습니다.

다양한 해시 알고리즘과 호환되는 로그 형식을 사용하면 플랫폼 및 운영 체제에서 SHA1, SHA256 또는 기타 해시 알고리즘을 사용할 수 있습니다. 플랫폼이 SHA256 해시 알고리즘을 지원하고 가 다른 해시 알고리즘과 호환되는 로그 형식을 사용하는 경우 플랫폼은 SHA1 대신 SHA256 알고리즘을 사용합니다.

TCG 이벤트 로그의 Windows 정의 이벤트는 {Type, Length, Value}의 튜플입니다. TCG PC 클라이언트 사양에서 다음 TCG_PCR_EVENT 구조를 사용하여 로그를 구문 분석할 수 있습니다. TPM PCP 도구 키트 및 TPM기본 사양의 정보를 사용하여 로그 이벤트 목록 간에 상관 관계를 만들 수 있습니다.

typedef struct {
  TCG_PCRINDEX PCRIndex;
  TCG_EVENTTYPE EventType;
  TCG_DIGEST Digest;
  UINT32 EventSize;
  UINT8 Event[EventSize];
} TCG_PCR_EVENT;

pOutputBuf 매개 변수에 필요한 메모리 크기는 Tbs.h 헤더 파일에 정의된 TBS_IN_OUT_BUF_SIZE_MAX 상수이거나 길이가 0인 Tbsi_Get_TCG_Log_Ex 함수를 호출하여 필요한 버퍼 크기를 가져와야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 버전 1803 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 tbs.h
라이브러리 Tbs.lib
DLL Tbs.dll