26:[1,"Opt-in User Consent Option",// 0 = Disabled, 1 = KVM, 0xFF = ALL
{0:"Disabled",1:"KVM",255:"All"}],
27:[1,"Opt-in Remote IT Consent Policy",// 0 = Disabled, 1 = Enabled. Allows user consent to be configured remotely.
{0:"Disabled",1:"Enabled"}],
28:[1,"ME Provision Halt Active",// 0 = Stop, 1 = Start. The "ME provisioning Halt/Activate" command must appear in the file only after "PKIDNSSuffix", "ConfigServerFQDN" and "Provisioning Server Address"
{0:"Stop",1:"Start"}],
29:[1,"Manual Setup and Configuration",// 0 = Automated, 1 = Manual
// FileTypeUUID(16) - uniquely identifies the file type. This identifier will remain valid and constant across all versions of the file type.
// RecordChunkCount(2) - indicates the number of 512-byte chunks occupied by this record, including all header, body, and reserved fields.
// RecordHeaderBytes(2) - indicates the length of the record header in bytes.
// RecordNumber(4) - uniquely identifies the record among all records in the file. The field contains a non-negative ordinal value. The value of this field is always zero in the Local Provisioning File Header Record.
// MajorVersion(1) - identifies the major version of the file format specification. This is a positive integer that is greater than or equal to 1. The Major Version number is incremented to indicate that changes have been introduced that will cause code written against a lower Major Version number to fail.
// MinorVersion(1) - identifies the minor version of the file format specification. This is an integer that is greater than or equal to 0. The Minor Version number is incremented to indicate that changes have been introduced that will not cause code written against the same Major Version and a lower Minor Version number to fail. The purpose of this behavior is to allow a single local provisioning file to be used for multiple generations of Intel<65> AMT platform.
// DataRecordCount(4) - indicates the total number of data records written in the file when it was created.
// DataRecordsConsumed(4) - is a counter value that begins at 0 and is incremented by 1 by each platform BIOS when it consumes a data record from the file. This value is used to determine the offset of the next data record in the file.
// DataRecordChunkCount(2) - contains the number of 512-byte chunks in each data record. All data records are the same length.
// ModuleList - contains a list of module identifiers. A module<6C>s identifier appears in the list if and only if the data records contain entries for that module. Each module identifier is two bytes in length. The list is terminated by an identifier value of 0.
obj.flags=ReadShortX(file,26);// Flags: 1 = Do not consume records
vardataRecordCount=ReadIntX(file,28);
obj.dataRecordsConsumed=ReadIntX(file,32);
obj.dataRecordChunkCount=ReadShortX(file,36);
obj.records=[];
varptr=512;
while(ptr+512<=file.length){
// Format of a data record header:
// RecordTypeIdentifier(4) - identifies the type of record (in this case a data record). Record Identifiers: Invalid - 0, Data Record - 1
// RecordFlags(4) - contains a set of bit flags that characterize the record.
// RecordChunkCount(2) - contains the number of 512-byte chunks occupied by the record including all header, body, and reserved fields.
// RecordHeaderByteCount(2) - indicates the length of the record header in bytes.
// RecordNumber(4) - uniquely identifies the record among all records in the file, including invalid as well as valid records. The identifier is a non-negative integer.
AmtSetupBinMoveToTop(r.variables,1,2);// New MEBx password
AmtSetupBinMoveToTop(r.variables,1,1);// Current MEBx password
*/
// Write each variable
for(varjinrec.variables){
varr3="",v=rec.variables[j],data=v.value;
v.type=AmtSetupBinVarIds[v.moduleid][v.varid][0];// Set the correct type if not alreay connect
if(v.type>0){// If this is a numeric value, encode it correctly
data=parseInt(data);
if(v.type==1)data=String.fromCharCode(data);
if(v.type==2)data=ShortToStrX(data);
if(v.type==3)data=IntToStrX(data);
}
r3+=ShortToStrX(v.moduleid);// Module Identifier
r3+=ShortToStrX(v.varid);// Variable Identifier
r3+=ShortToStrX(data.length);// Variable Length
r3+=ShortToStrX(0);// Reserved
r3+=data;// Variable Data
while(r3.length%4!=0){r3+="\0";}// Pad the variable
r2+=r3;
}
while(r2.length<512){r2+="\0";}// Pad the record
if((rec.flags&2)!=0){r2=r2.substring(0,24)+AmtSetupBinScrambleRecordData(r2.substring(24));}// Scramble the record starting at byte 24, after the header
// Find a moduleid/varid in the variable list, if found, move it to the top
//function AmtSetupBinMoveToTop(variables, moduleid, varid) { var i = -1; for (var j in variables) { if ((variables[j].moduleid == moduleid) && (variables[j].varid == varid)) { i = j; } } if (i > 1) { ArrayElementMove(variables, i, 0); } }