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
검색할 로그의 형식입니다.
[out, optional] pbOutput
WBCL을 수신하고 저장하는 버퍼에 대한 포인터입니다. pcbOutput이 가리키는 위치가 입력 시 0일 때 필요한 버퍼를 예측하려면 NULL로 설정합니다.
[in, out] pcbOutput
출력 버퍼의 크기(바이트)를 지정하는 부호 없는 long 정수에 대한 포인터입니다. 성공하면 pOutput에서 가리키는 데이터의 크기(바이트)를 포함합니다. 실패 시 에는 값이 포함되지 않습니다.
참고pbOutput 이 NULL 이고 pcbOutput 이 가리키는 위치가 0이면 함수는 TBS_E_BUFFER_TOO_SMALL 반환합니다. 이 경우 pcbOutput 은 pbOutput의 필요한 크기를 가리킵니다.
반환 값
반환 코드/값 | 설명 |
---|---|
|
함수가 성공했습니다. |
|
TBS_TCGLOG_DRTM_CURRENT 요청되었지만 시스템이 부팅될 때 시스템에서 DRTM이 사용하도록 설정되지 않았습니다. |
|
내부 소프트웨어 오류가 발생했습니다.
참고TBS_E_INTERNAL_ERROR 반환되면 시스템 이벤트 로그에 오류 코드가 0x80070032 TBS 이벤트 원본의 이벤트 ID 16385가 포함될 수 있습니다. 이는 하드웨어 플랫폼이 운영 체제에 TCG 이벤트 로그를 제공하지 않음을 나타낼 수 있습니다. 플랫폼 제조업체에서 BIOS 업그레이드를 설치하여 이 문제를 해결할 수 있는 경우도 있습니다.
|
|
지정된 출력 포인터가 잘못되었습니다. |
|
출력 버퍼가 너무 작습니다. |
|
출력 버퍼가 너무 큽 |
|
호환되는 TPM(신뢰할 수 있는 플랫폼 모듈) 보안 디바이스는 이 컴퓨터에서 찾을 수 없습니다. |
|
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 구조에는 NumberOfAlgorithms 및 DigestSizes 멤버가 포함되지 않습니다.
다양한 해시 알고리즘과 호환되는 로그 형식을 사용하면 플랫폼 및 운영 체제에서 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 |