master
1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6
7#ifndef _TBS_H_
8#define _TBS_H_
9
10#include <winapifamily.h>
11
12#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
13
14#if defined(__cplusplus)
15extern "C" {
16#endif
17
18#if (NTDDI_VERSION >= NTDDI_VISTA)
19
20#ifndef WINAPI
21#define WINAPI __stdcall
22#endif
23
24#define CONST const
25
26typedef signed int INT32, *PINT32;
27typedef const INT32 *PCINT32;
28typedef unsigned int UINT32, *PUINT32;
29typedef const UINT32 *PCUINT32;
30
31#define VOID void
32typedef VOID *PVOID;
33typedef const VOID *PCVOID;
34
35typedef INT32 WINBOOL, *PBOOL;
36typedef const WINBOOL *PCBOOL;
37
38typedef UINT8 BYTE, *PBYTE;
39typedef const BYTE *PCBYTE;
40
41typedef WINBOOL TBS_BOOL;
42typedef UINT32 TBS_RESULT;
43typedef PVOID TBS_HCONTEXT, *PTBS_HCONTEXT;
44typedef UINT32 TBS_COMMAND_PRIORITY;
45typedef UINT32 TBS_COMMAND_LOCALITY;
46typedef UINT32 TBS_OWNERAUTH_TYPE;
47typedef UINT32 TBS_HANDLE;
48
49#define TBS_CONTEXT_VERSION_ONE 1
50
51#define TBS_COMMAND_PRIORITY_LOW 100
52#define TBS_COMMAND_PRIORITY_NORMAL 200
53#define TBS_COMMAND_PRIORITY_HIGH 300
54#define TBS_COMMAND_PRIORITY_SYSTEM 400
55#define TBS_COMMAND_PRIORITY_MAX 0x80000000
56
57#define TBS_COMMAND_LOCALITY_ZERO 0
58#define TBS_COMMAND_LOCALITY_ONE 1
59#define TBS_COMMAND_LOCALITY_TWO 2
60#define TBS_COMMAND_LOCALITY_THREE 3
61#define TBS_COMMAND_LOCALITY_FOUR 4
62
63#define TBS_SUCCESS 0
64
65#define TBS_IN_OUT_BUF_SIZE_MAX (256 * 1024)
66
67#define TBS_OWNERAUTH_TYPE_FULL 1
68#define TBS_OWNERAUTH_TYPE_ADMIN 2
69#define TBS_OWNERAUTH_TYPE_USER 3
70#define TBS_OWNERAUTH_TYPE_ENDORSEMENT 4
71
72#define TBS_OWNERAUTH_TYPE_ENDORSEMENT_20 12
73#define TBS_OWNERAUTH_TYPE_STORAGE_20 13
74
75typedef struct tdTBS_CONTEXT_PARAMS {
76 UINT32 version;
77} TBS_CONTEXT_PARAMS, *PTBS_CONTEXT_PARAMS;
78typedef const TBS_CONTEXT_PARAMS *PCTBS_CONTEXT_PARAMS;
79
80TBS_RESULT WINAPI Tbsi_Context_Create(PCTBS_CONTEXT_PARAMS pContextParams, PTBS_HCONTEXT phContext);
81TBS_RESULT WINAPI Tbsip_Context_Close(TBS_HCONTEXT hContext);
82TBS_RESULT WINAPI Tbsip_Submit_Command(TBS_HCONTEXT hContext, TBS_COMMAND_LOCALITY Locality, TBS_COMMAND_PRIORITY Priority, PCBYTE pabCommand, UINT32 cbCommand, PBYTE pabResult, PUINT32 pcbResult);
83TBS_RESULT WINAPI Tbsip_Cancel_Commands(TBS_HCONTEXT hContext);
84TBS_RESULT WINAPI Tbsi_Physical_Presence_Command(TBS_HCONTEXT hContext, PCBYTE pabInput, UINT32 cbInput, PBYTE pabOutput, PUINT32 pcbOutput);
85
86#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
87
88#if (NTDDI_VERSION >= NTDDI_VISTASP1)
89
90TBS_RESULT WINAPI Tbsi_Get_TCG_Log(TBS_HCONTEXT hContext, PBYTE pOutputBuf, PUINT32 pOutputBufLen);
91
92#endif /* _WIN32_WINNT_VISTASP1 */
93
94#if (NTDDI_VERSION >= NTDDI_WIN8)
95
96#define TBS_CONTEXT_VERSION_TWO 2
97
98typedef struct tdTBS_CONTEXT_PARAMS2 {
99 UINT32 version;
100 __C89_NAMELESS union {
101 __C89_NAMELESS struct {
102 UINT32 requestRaw : 1;
103 UINT32 includeTpm12 : 1;
104 UINT32 includeTpm20 : 1;
105 };
106 UINT32 asUINT32;
107 };
108} TBS_CONTEXT_PARAMS2, *PTBS_CONTEXT_PARAMS2;
109typedef const TBS_CONTEXT_PARAMS2 *PCTBS_CONTEXT_PARAMS2;
110
111typedef struct tdTPM_WNF_PROVISIONING {
112 UINT32 status;
113 BYTE message[28];
114} TPM_WNF_PROVISIONING;
115
116#define TPM_WNF_INFO_CLEAR_SUCCESSFUL 0x00000001
117#define TPM_WNF_INFO_OWNERSHIP_SUCCESSFUL 0x00000002
118
119#define TPM_WNF_INFO_NO_REBOOT_REQUIRED 1
120
121#ifndef TPM_VERSION_UNKNOWN
122
123#define TPM_VERSION_UNKNOWN 0
124#define TPM_VERSION_12 1
125#define TPM_VERSION_20 2
126
127#define TPM_IFTYPE_UNKNOWN 0
128#define TPM_IFTYPE_1 1
129#define TPM_IFTYPE_TRUSTZONE 2
130#define TPM_IFTYPE_HW 3
131#define TPM_IFTYPE_EMULATOR 4
132#define TPM_IFTYPE_SPB 5
133
134typedef struct _TPM_DEVICE_INFO {
135 UINT32 structVersion;
136 UINT32 tpmVersion;
137 UINT32 tpmInterfaceType;
138 UINT32 tpmImpRevision;
139} TPM_DEVICE_INFO, *PTPM_DEVICE_INFO;
140typedef const TPM_DEVICE_INFO *PCTPM_DEVICE_INFO;
141
142#endif /* TPM_VERSION_UNKNOWN */
143
144TBS_RESULT WINAPI Tbsi_GetDeviceInfo(UINT32 Size, PVOID Info);
145TBS_RESULT WINAPI Tbsi_Get_OwnerAuth(TBS_HCONTEXT hContext, TBS_OWNERAUTH_TYPE ownerauthType, PBYTE pOutputBuf, PUINT32 pOutputBufLen);
146TBS_RESULT WINAPI Tbsi_Revoke_Attestation(void);
147
148#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
149
150#if (NTDDI_VERSION >= NTDDI_WINBLUE)
151
152#ifndef _NTDDK_
153
154HRESULT GetDeviceID(PBYTE pbWindowsAIK, UINT32 cbWindowsAIK, PUINT32 pcbResult, WINBOOL *pfProtectedByTPM);
155HRESULT GetDeviceIDString(PWSTR pszWindowsAIK, UINT32 cchWindowsAIK, PUINT32 pcchResult, WINBOOL *pfProtectedByTPM);
156
157#endif /* ifndef _NTDDK_ */
158
159#endif /* (NTDDI_VERSION >= NTDDI_WINBLUE) */
160
161#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
162
163TBS_RESULT WINAPI Tbsi_Create_Windows_Key(TBS_HANDLE keyHandle);
164
165#endif /* (NTDDI_VERSION >= NTDDI_WINTHRESHOLD) */
166
167#if (NTDDI_VERSION >= NTDDI_WIN10_RS4)
168
169#define TBS_TCGLOG_SRTM_CURRENT 0
170#define TBS_TCGLOG_DRTM_CURRENT 1
171#define TBS_TCGLOG_SRTM_BOOT 2
172#define TBS_TCGLOG_SRTM_RESUME 3
173#define TBS_TCGLOG_DRTM_BOOT 4
174#define TBS_TCGLOG_DRTM_RESUME 5
175
176TBS_RESULT WINAPI Tbsi_Get_TCG_Log_Ex(UINT32 logType, PBYTE pbOutput, PUINT32 pcbOutput);
177
178#endif /* (NTDDI_VERSION >= NTDDI_WIN10_RS4) */
179
180#if (NTDDI_VERSION >= NTDDI_WIN10_NI)
181
182WINBOOL WINAPI Tbsi_Is_Tpm_Present(void);
183
184#endif /* (NTDDI_VERSION >= NTDDI_WIN10_NI) */
185
186#if defined(__cplusplus)
187}
188#endif
189
190#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
191
192#endif /* _TBS_H_ */