move files and directories into pcucontrol module
[monitor.git] / pcucontrol / models / intelamt / Include / iamt_api.h
1 /**********************************************************************
2 **                                                                   **
3 **                I N T E L   P R O P R I E T A R Y                  **
4 **                                                                   **
5 **   COPYRIGHT (c)  1993 - 2006       BY  INTEL  CORPORATION.  ALL   **
6 **   RIGHTS RESERVED.   NO PART OF THIS PROGRAM OR PUBLICATION MAY   **
7 **   BE  REPRODUCED,   TRANSMITTED,   TRANSCRIBED,   STORED  IN  A   **
8 **   RETRIEVAL SYSTEM, OR TRANSLATED INTO ANY LANGUAGE OR COMPUTER   **
9 **   LANGUAGE IN ANY FORM OR BY ANY MEANS, ELECTRONIC, MECHANICAL,   **
10 **   MAGNETIC,  OPTICAL,  CHEMICAL, MANUAL, OR OTHERWISE,  WITHOUT   **
11 **   THE PRIOR WRITTEN PERMISSION OF :                               **
12 **                                                                   **
13 **                      INTEL  CORPORATION                           **
14 **                                                                   **
15 **                2200 MISSION COLLEGE BOULEVARD                     **
16 **                                                                   **
17 **             SANTA  CLARA,  CALIFORNIA  95052-8119                 **
18 **                                                                   **
19 **********************************************************************/
20
21 //+--------------------------------------------------------------------
22 //
23 //
24 //  File:       iamt_api.h
25 //
26 //  Contents:   Header file for the IntelĀ® AMT storage library.
27 //
28 //---------------------------------------------------------------------
29
30
31 #ifndef _PTHI_API_
32 #define _PTHI_API_
33
34 #include <wchar.h>
35 #ifdef _WIN32
36 #include <windows.h>
37 #include <Wincrypt.h>
38 #include <tchar.h>
39 #endif
40
41
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45
46 /* 
47 To enable compile time checking for Intel(r) AMT2 compatible usage use the following definition:
48 #define ENFORCE_IAMT2_USAGE
49 */
50
51 #define ISVS_VERSION_MAJOR      2
52 #define ISVS_VERSION_MINOR      0
53
54
55 #ifndef VOID
56 typedef void                VOID;
57 #endif
58 typedef char                CHAR;
59 typedef unsigned char       UINT8;
60 typedef unsigned short      UINT16;
61 typedef unsigned int        UINT32;
62
63 #ifndef _WIN32
64 typedef char _TCHAR;
65 #endif
66
67 typedef UINT8 PT_UUID[16];
68
69 typedef UINT32  ISVS_APPLICATION_HANDLE;
70
71 #define ISVS_APPLICATION_NAME_FILTER    0xFFFFFFF0
72 #define ISVS_VENDOR_NAME_FILTER         0xFFFFFFF1
73 #define ISVS_INVALID_HANDLE             0xFFFFFFFF
74
75
76 typedef UINT32 PT_BOOLEAN;
77 static const   PT_BOOLEAN PTHI_FALSE = 0;
78 static const   PT_BOOLEAN PTHI_TRUE  = 1;
79
80
81 // ------------------------
82 // ISVS_VERSION
83 // ------------------------
84 typedef struct _ISVS_VERSION
85 {
86         UINT8   MajorNumber;
87         UINT8   MinorNumber;
88
89 } ISVS_VERSION;
90
91
92 // ------------------------
93 // PTSDK_UNICODE_STRING
94 // ------------------------
95 // UTF16 Unicode String
96 //  Length - The length in bytes of the string stored in Buffer.
97 //  MaximumLength - The maximum length in bytes of Buffer.
98 //  Buffer - Points to a buffer used to contain a string of wide characters.
99 //
100 // PTSDK_UNICODE_STRING types may not be null terminated
101 //
102 typedef struct _PTSDK_UNICODE_STRING
103 {
104     UINT16  Length;
105     UINT16  MaximumLength;
106     UINT16  *Buffer;
107
108 } PTSDK_UNICODE_STRING;
109
110
111
112
113 // -----------------
114 // ISVS_GROUP
115 // -----------------
116 typedef UINT32  ISVS_GROUP_HANDLE;
117
118 typedef UINT32 ISVS_GROUP_PERMISSIONS;
119 static const   ISVS_GROUP_PERMISSIONS ISVS_GROUP_PERMISSIONS_READ_ONLY = 1;
120 static const   ISVS_GROUP_PERMISSIONS ISVS_GROUP_PERMISSIONS_READ_WRITE = 2;
121
122 typedef struct _PTSDK_PERMISSIONS_GROUP_ATTRIBUTES
123 {
124     PTSDK_UNICODE_STRING     Name;
125     ISVS_GROUP_PERMISSIONS   Permissions;
126
127 } PTSDK_PERMISSIONS_GROUP_ATTRIBUTES;
128
129
130 // -----------------
131 // ISVS_BLOCK
132 // -----------------
133
134 typedef UINT32  ISVS_BLOCK_HANDLE;
135
136 typedef struct _PTSDK_BLOCK_ATTRIBUTES
137 {
138     UINT32                 BlockSize;
139     PT_BOOLEAN             BlockHidden;
140     PTSDK_UNICODE_STRING   BlockName;
141
142 } PTSDK_BLOCK_ATTRIBUTES;
143
144
145 // -----------------
146 // ISVS_APPLICATION
147 // -----------------
148
149 typedef struct _PTSDK_APPLICATION_ATTRIBUTES
150 {
151     PTSDK_UNICODE_STRING    VendorName;
152     PTSDK_UNICODE_STRING    ApplicationName;
153
154 } PTSDK_APPLICATION_ATTRIBUTES;
155
156
157 // ------------
158 // PT_STATUS
159 // ------------
160
161 typedef UINT32 PT_STATUS;
162
163 static const PT_STATUS PT_STATUS_SUCCESS                          = 0;
164 static const PT_STATUS PT_STATUS_INTERNAL_ERROR                   = 0x0001;
165 static const PT_STATUS PT_STATUS_NOT_READY                        = 0x0002;
166 static const PT_STATUS PT_STATUS_INVALID_PT_MODE                  = 0x0003;
167 static const PT_STATUS PT_STATUS_INVALID_MESSAGE_LENGTH           = 0x0004;
168 static const PT_STATUS PT_STATUS_TABLE_FINGERPRINT_NOT_AVAILABLE  = 0x0005;
169 static const PT_STATUS PT_STATUS_INTEGRITY_CHECK_FAILED           = 0x0006;
170 static const PT_STATUS PT_STATUS_UNSUPPORTED_ISVS_VERSION         = 0x0007;
171 static const PT_STATUS PT_STATUS_APPLICATION_NOT_REGISTERED       = 0x0008;
172 static const PT_STATUS PT_STATUS_INVALID_REGISTRATION_DATA        = 0x0009;
173 static const PT_STATUS PT_STATUS_APPLICATION_DOES_NOT_EXIST       = 0x000a;
174 static const PT_STATUS PT_STATUS_NOT_ENOUGH_STORAGE               = 0x000b;
175 static const PT_STATUS PT_STATUS_INVALID_NAME                     = 0x000c;
176 static const PT_STATUS PT_STATUS_BLOCK_DOES_NOT_EXIST             = 0x000d;
177 static const PT_STATUS PT_STATUS_INVALID_BYTE_OFFSET              = 0x000e;
178 static const PT_STATUS PT_STATUS_INVALID_BYTE_COUNT               = 0x000f;
179 static const PT_STATUS PT_STATUS_NOT_PERMITTED                    = 0x0010;
180 static const PT_STATUS PT_STATUS_NOT_OWNER                        = 0x0011;
181 static const PT_STATUS PT_STATUS_BLOCK_LOCKED_BY_OTHER            = 0x0012;
182 static const PT_STATUS PT_STATUS_BLOCK_NOT_LOCKED                 = 0x0013;
183 static const PT_STATUS PT_STATUS_INVALID_GROUP_PERMISSIONS        = 0x0014;
184 static const PT_STATUS PT_STATUS_GROUP_DOES_NOT_EXIST             = 0x0015;
185 static const PT_STATUS PT_STATUS_INVALID_MEMBER_COUNT             = 0x0016;
186 static const PT_STATUS PT_STATUS_MAX_LIMIT_REACHED                = 0x0017;
187 static const PT_STATUS PT_STATUS_INVALID_AUTH_TYPE                = 0x0018;
188 static const PT_STATUS PT_STATUS_AUTHENTICATION_FAILED            = 0x0019;
189 static const PT_STATUS PT_STATUS_INVALID_DHCP_MODE                = 0x001a;
190 static const PT_STATUS PT_STATUS_INVALID_IP_ADDRESS               = 0x001b;
191 static const PT_STATUS PT_STATUS_INVALID_DOMAIN_NAME              = 0x001c;
192
193 static const PT_STATUS PT_STATUS_REQUEST_UNEXPECTED               = 0x001e;
194 static const PT_STATUS PT_STATUS_INVALID_TABLE_TYPE               = 0x001f;
195 static const PT_STATUS PT_STATUS_INVALID_PROVISIONING_MODE        = 0x0020;
196 static const PT_STATUS PT_STATUS_UNSUPPORTED_OBJECT               = 0x0021;
197 static const PT_STATUS PT_STATUS_INVALID_TIME                     = 0x0022;
198 static const PT_STATUS PT_STATUS_INVALID_INDEX                    = 0x0023;
199 static const PT_STATUS PT_STATUS_INVALID_PARAMETER                = 0x0024;
200
201 static const PT_STATUS PT_STATUS_FLASH_WRITE_LIMIT_EXCEEDED       = 0x0026;
202
203 static const PT_STATUS PT_STATUS_NETWORK_IF_ERROR_BASE            = 0x0800;
204 static const PT_STATUS PT_STATUS_SDK_DEFINED_ERROR_BASE           = 0x1000;
205
206 static const PT_STATUS PTSDK_STATUS_INTERNAL_ERROR                = 0x1000;
207 static const PT_STATUS PTSDK_STATUS_NOT_INITIALIZED               = 0x1001;
208 static const PT_STATUS PTSDK_STATUS_LIB_VERSION_UNSUPPORTED       = 0x1002;
209 static const PT_STATUS PTSDK_STATUS_INVALID_PARAM                 = 0x1003;
210 static const PT_STATUS PTSDK_STATUS_RESOURCES                     = 0x1004;
211 static const PT_STATUS PTSDK_STATUS_HARDWARE_ACCESS_ERROR         = 0x1005;
212 static const PT_STATUS PTSDK_STATUS_REQUESTOR_NOT_REGISTERED      = 0x1006;
213 static const PT_STATUS PTSDK_STATUS_NETWORK_ERROR                 = 0x1007;
214 static const PT_STATUS PTSDK_STATUS_PARAM_BUFFER_TOO_SHORT        = 0x1008;
215 static const PT_STATUS PTSDK_STATUS_COM_NOT_INITIALIZED_IN_THREAD = 0x1009;
216 static const PT_STATUS PTSDK_STATUS_URL_REQUIRED                                  = 0x100a;
217
218 // -------------------
219 // IN/OUT definitions
220 // -------------------
221 #ifdef IN
222 #undef IN
223 #endif
224 #define IN      const   /* input parameter (const)  */
225 #define OUT             /* output parameter         */
226 #define INOUT           /* input & output parameter */
227 #define OPTIONAL        /* optional parameter       */
228
229
230 #undef FALSE
231 #undef TRUE
232 #undef NULL
233
234 #define FALSE   0
235 #define TRUE    1
236 #define NULL    0
237
238 typedef int             BOOL;
239 typedef unsigned long   ULONG;
240 typedef char *          PCHAR;
241 typedef unsigned long * PULONG;
242
243 typedef struct _SESSION_HANDLE *SESSION_HANDLE;
244 typedef struct _SESSION_AUTHENTICATION_INFO SESSION_AUTHENTICATION_INFO;
245
246
247 PT_STATUS
248 ISVS_Initialize (
249     INOUT   UINT32 *LibMajorVersion,
250     INOUT   UINT32 *LibMinorVersion,
251     OUT     UINT32 *LibBuildNumber
252     );
253
254
255 PT_STATUS
256 ISVS_Uninitialize();
257 #ifdef _WIN32
258
259 PT_STATUS
260 ISVS_InitializeCOMinThread();
261
262 PT_STATUS 
263 ISVS_UninitializeCOMinThread();
264
265 #endif
266
267
268 #ifndef ENFORCE_IAMT2_USAGE
269 // ISVS 1.0 support 
270 PT_STATUS
271 ISVS_RegisterApplication(
272     OUT SESSION_HANDLE              *SessionHandle,
273     IN wchar_t                     *Username    OPTIONAL,
274     IN wchar_t                     *Password    OPTIONAL,
275     IN CHAR                        *TargetUrl,
276     IN PT_UUID                     MachineUUID  OPTIONAL,
277     IN PTSDK_UNICODE_STRING        *VendorName,
278     IN PTSDK_UNICODE_STRING        *AppName,
279     IN PTSDK_UNICODE_STRING        *EnterpriseName
280     );
281 #endif
282
283
284 PT_STATUS
285 ISVS_RegisterApplicationEx(
286     OUT SESSION_HANDLE             *SessionHandle,
287     IN  wchar_t                    *Username    OPTIONAL,
288     IN  wchar_t                    *Password    OPTIONAL,
289     IN  CHAR                       *TargetUrl   ,
290     IN  PT_UUID                    MachineUUID  OPTIONAL,
291     IN  PTSDK_UNICODE_STRING       *VendorName,
292     IN  PTSDK_UNICODE_STRING       *AppName,
293     IN  PTSDK_UNICODE_STRING       *EnterpriseName,
294         IN  SESSION_AUTHENTICATION_INFO          *AuthInfo   OPTIONAL
295     );
296
297
298
299 SESSION_AUTHENTICATION_INFO* 
300 ISVS_CreateAuthInfo(
301         IN  _TCHAR                                              *certificateName,
302 #ifdef _WIN32
303         IN  PCCERT_CONTEXT                              certificate,
304         IN      BOOL                                            krb
305 #else
306         IN  _TCHAR                                              *certificatePass
307 #endif
308         );
309
310 VOID
311 ISVS_FreeAuthInfo(
312         IN SESSION_AUTHENTICATION_INFO* authInfo
313         );
314
315
316 PT_STATUS
317 ISVS_GetRegisteredApplications(
318     IN    SESSION_HANDLE           SessionHandle,
319     IN    UINT32                   StartIndex,
320     OUT   UINT32                   *TotalRegisteredAppCount,
321     INOUT UINT32                   *AppHandleCount,
322     OUT   ISVS_APPLICATION_HANDLE  AppHandles[]        // [<AppHandleCount>]
323     );
324
325
326 PT_STATUS
327 ISVS_GetCurrentApplicationHandle (
328     IN  SESSION_HANDLE             SessionHandle,
329     OUT ISVS_APPLICATION_HANDLE    *AppHandle
330     );
331
332
333 PT_STATUS
334 ISVS_GetApplicationAttributes(
335     IN    SESSION_HANDLE                    SessionHandle,
336     IN    ISVS_APPLICATION_HANDLE           ApplicationBeingRequested,
337     INOUT PTSDK_APPLICATION_ATTRIBUTES      *ApplicationAttributes
338     );
339
340
341 PT_STATUS
342 ISVS_UnregisterApplication(
343     IN SESSION_HANDLE       SessionHandle
344     );
345
346
347 PT_STATUS
348 ISVS_RemoveApplication(
349     SESSION_HANDLE          SessionHandle
350     );
351
352
353 PT_STATUS
354 ISVS_GetBytesAvailable(
355     IN  SESSION_HANDLE      SessionHandle,
356     OUT UINT32              *BytesAvailable
357     );
358
359
360 PT_STATUS
361 ISVS_AllocateBlock(
362     IN  SESSION_HANDLE          SessionHandle,
363     IN  UINT32                  BytesRequested,
364     IN  PT_BOOLEAN              BlockHidden,
365     IN  PTSDK_UNICODE_STRING    *BlockName,
366     OUT ISVS_BLOCK_HANDLE       *BlockHandle
367     );
368
369
370 PT_STATUS
371 ISVS_GetAllocatedBlocks(
372     IN    SESSION_HANDLE            SessionHandle,
373     IN    ISVS_APPLICATION_HANDLE   BlockOwnerApplication,
374     IN    UINT32                    StartIndex,
375     OUT   UINT32                    *TotalAllocatedBlockCount,
376     INOUT UINT32                    *BlockHandleCount,
377     OUT   ISVS_BLOCK_HANDLE         BlockHandles[]      // [<BlockHandleCount>]
378     );
379
380
381 PT_STATUS
382 ISVS_GetBlockAttributes(
383     IN    SESSION_HANDLE            SessionHandle,
384     IN    ISVS_BLOCK_HANDLE         BlockHandle,
385     INOUT PTSDK_BLOCK_ATTRIBUTES    *BlockAttributes
386     );
387
388
389 PT_STATUS
390 ISVS_DeallocateBlock(
391     IN  SESSION_HANDLE          SessionHandle,
392     IN  ISVS_BLOCK_HANDLE       BlockHandle
393     );
394
395
396 PT_STATUS
397 ISVS_WriteBlock(
398     IN  SESSION_HANDLE          SessionHandle,
399     IN  ISVS_BLOCK_HANDLE       BlockHandle,
400     IN  UINT32                  ByteOffset,
401     IN  UINT32                  ByteCount,
402     OUT UINT32                  *BytesWritten,
403     IN  UINT8                   Data[]
404     );
405
406
407 PT_STATUS
408 ISVS_ReadBlock(
409     IN    SESSION_HANDLE        SessionHandle,
410     IN    ISVS_BLOCK_HANDLE     BlockHandle,
411     IN    UINT32                ByteOffset,
412     IN    UINT32                ByteCount,
413     OUT   UINT32                *BytesRead,
414     OUT   UINT8                 Data[]
415     );
416
417
418 PT_STATUS
419 ISVS_LockBlock(
420     IN SESSION_HANDLE           SessionHandle,
421     IN ISVS_BLOCK_HANDLE        BlockHandle
422     );
423
424
425 PT_STATUS
426 ISVS_UnlockBlock(
427     IN SESSION_HANDLE           SessionHandle,
428     IN ISVS_BLOCK_HANDLE        BlockHandle
429     );
430
431
432 PT_STATUS
433 ISVS_SetBlockName(
434     IN SESSION_HANDLE           SessionHandle,
435     IN ISVS_BLOCK_HANDLE        BlockHandle,
436     IN PTSDK_UNICODE_STRING     *BlockName
437     );
438
439
440 PT_STATUS
441 ISVS_SetBlockVisibility(
442     IN SESSION_HANDLE           SessionHandle,
443     IN ISVS_BLOCK_HANDLE        BlockHandle,
444     IN PT_BOOLEAN               BlockHidden
445     );
446
447
448 PT_STATUS
449 ISVS_AddPermissionsGroup(
450     IN  SESSION_HANDLE          SessionHandle,
451     IN  ISVS_BLOCK_HANDLE       BlockHandle,
452     IN  ISVS_GROUP_PERMISSIONS  GroupPermissions,
453     IN  PTSDK_UNICODE_STRING    *GroupName,
454     OUT ISVS_GROUP_HANDLE       *GroupHandle
455     );
456
457
458 PT_STATUS
459 ISVS_GetPermissionsGroups(
460     IN    SESSION_HANDLE        SessionHandle,
461     IN    ISVS_BLOCK_HANDLE     BlockHandle,
462     IN    UINT32                StartIndex,
463     OUT   UINT32                *TotalGroupCount,
464     INOUT UINT32                *GroupHandleCount,
465     OUT   ISVS_GROUP_HANDLE     GroupHandles[]  // [<HandleCount>]
466     );
467
468
469 PT_STATUS
470 ISVS_GetPermissionsGroupAttributes(
471     IN    SESSION_HANDLE                        SessionHandle,
472     IN    ISVS_BLOCK_HANDLE                     BlockHandle,
473     IN    ISVS_GROUP_HANDLE                     GroupHandle,
474     INOUT PTSDK_PERMISSIONS_GROUP_ATTRIBUTES    *GroupAttributes
475     );
476
477
478 PT_STATUS
479 ISVS_RemovePermissionsGroup(
480     IN SESSION_HANDLE          SessionHandle,
481     IN ISVS_BLOCK_HANDLE       BlockHandle,
482     IN ISVS_GROUP_HANDLE       GroupHandle
483     );
484
485
486 PT_STATUS
487 ISVS_SetPermissionsGroupName(
488     IN SESSION_HANDLE           SessionHandle,
489     IN ISVS_BLOCK_HANDLE        BlockHandle,
490     IN ISVS_GROUP_HANDLE        GroupHandle,
491     IN PTSDK_UNICODE_STRING     *GroupName
492     );
493
494
495 PT_STATUS
496 ISVS_SetPermissionsGroupPermissions(
497     IN SESSION_HANDLE           SessionHandle,
498     IN ISVS_BLOCK_HANDLE        BlockHandle,
499     IN ISVS_GROUP_HANDLE        GroupHandle,
500     IN ISVS_GROUP_PERMISSIONS   Permissions
501     );
502
503
504 PT_STATUS
505 ISVS_AddPermissionsGroupMembers(
506     IN SESSION_HANDLE           SessionHandle,
507     IN ISVS_BLOCK_HANDLE        BlockHandle,
508     IN ISVS_GROUP_HANDLE        GroupHandle,
509     IN UINT32                   MemberHandleCount,
510     IN ISVS_APPLICATION_HANDLE  MemberHandles[]      // [<MemberHandleCount>]
511     );
512
513
514 PT_STATUS
515 ISVS_GetPermissionsGroupMembers(
516     IN    SESSION_HANDLE            SessionHandle,
517     IN    ISVS_BLOCK_HANDLE         BlockHandle,
518     IN    ISVS_GROUP_HANDLE         GroupHandle,
519     IN    UINT32                    StartIndex,
520     OUT   UINT32                    *TotalMemberCount,
521     INOUT UINT32                    *MemberHandleCount,
522     OUT   ISVS_APPLICATION_HANDLE   MemberHandles[]      // [<MemberHandleCount>]
523     );
524
525
526 PT_STATUS
527 ISVS_RemovePermissionsGroupMembers(
528     IN SESSION_HANDLE           SessionHandle,
529     IN ISVS_BLOCK_HANDLE        BlockHandle,
530     IN ISVS_GROUP_HANDLE        GroupHandle,
531     IN UINT32                   MemberHandleCount,
532     IN ISVS_APPLICATION_HANDLE  MemberHandles[]      // [<MemberHandleCount>]
533     );
534
535
536 PT_STATUS
537 ISVS_GetTimeoutValues(
538     IN  SESSION_HANDLE          SessionHandle,
539     OUT UINT32                  *RegistrationTimeout,
540     OUT UINT32                  *LockTimeout
541     );
542
543
544 PT_STATUS
545 ISVS_GetHostUUID(
546     OUT PT_UUID         Uuid
547     );
548
549 #ifndef ENFORCE_IAMT2_USAGE
550 // ISVS 1.0 support 
551 PT_STATUS
552 ISVS_GetAPIVersion(
553     IN  wchar_t             *Username   OPTIONAL,
554     IN  wchar_t             *Password   OPTIONAL,
555     IN  CHAR                *TargetUrl,
556     OUT ISVS_VERSION        *Version
557     );
558 #endif
559
560
561 PT_STATUS
562 ISVS_GetAPIVersionEx(
563     OUT ISVS_VERSION    *Version,
564     IN  wchar_t             *Username   OPTIONAL,
565     IN  wchar_t             *Password   OPTIONAL,
566     IN  CHAR                *TargetUrl  ,
567         IN  SESSION_AUTHENTICATION_INFO   *AuthInfo   OPTIONAL
568     );
569
570
571 PT_STATUS
572 ISVS_GetBlockWriteEraseLimit(
573     IN SESSION_HANDLE       SessionHandle,
574     IN ISVS_BLOCK_HANDLE    BlockHandle,
575     OUT UINT32              *WriteEraseLimit
576     );
577
578
579
580 VOID
581 ISVS_GetLastNetworkError(
582     IN  SESSION_HANDLE  SessionHandle  OPTIONAL,
583     OUT VOID            *NetworkError
584     );
585
586
587 #ifdef __cplusplus
588 }
589 #endif
590
591 #endif // _PTHI_API_
592