BapdRegisterSiData

VOID __fastcall BapdRegisterSiData(VOID *WbclPackage, UINT64 WbclPackageSize, UINT64 InvokeType){
  unsigned __int64 v4; 
  int v5; 
  WCHAR v6; 
  const WCHAR *v7; 
  __int64 v8; 
  __int64 v9; 
  WCHAR v10; 
  WCHAR v11; 
  WCHAR v12; 
  WCHAR v13; 
  WCHAR v14; 
  WCHAR v15; 
  WCHAR v16; 
  UINT64 DataSize; 
  UINT64 DataSizeb; 
  UINT64 DataSizec; 
  UINT64 DataSizea; 
  UINT64 DataSized; 
  UINT64 DataSizee; 
  UINT64 DataSizef; 
  UINT64 DataSizeg; 
  struct _UNICODE_STRING DestinationString; 
  HANDLE KeyHandle; 
  if( WbclPackage )
  {
    KeyHandle = 0i64;
    v4 = (unsigned int)WbclPackageSize;
    v5 = InvokeType;
    DestinationString = 0i64;
    if( BapdGetISRegistryKey(&KeyHandle) >= 0 )
    {
      if( WbclPackage != (VOID *)-4i64 && *(_DWORD *)WbclPackage )
      {
        v7 = L"WBCLDrtm";
        if( v5 != 2 )
          v7 = L"WBCL";
        RtlInitUnicodeString(&DestinationString, v7, v6);
        LODWORD(DataSize) = *(_DWORD *)WbclPackage;
        ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 3ui64, (char *)WbclPackage + 4, DataSize);
      }
      if( v5 != 2 )
      {
        v8 = (unsigned int)(*(_DWORD *)WbclPackage + 4);
        v9 = v8;
        if( v4 >= v8 + 48
          && *(_DWORD *)((char *)WbclPackage + v8) <= 0x30u
          && *(_DWORD *)((char *)WbclPackage + v8 + 4) <= 2u )
        {
          RtlInitUnicodeString(&DestinationString, L"EventCount", v6);
          LODWORD(DataSize) = 8;
          ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 0xBui64, (char *)WbclPackage + v9 + 8, DataSize);
          RtlInitUnicodeString(&DestinationString, L"BootCount", v10);
          LODWORD(DataSizeb) = 8;
          ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 0xBui64, (char *)WbclPackage + v9 + 16, DataSizeb);
          RtlInitUnicodeString(&DestinationString, L"CounterId", v11);
          LODWORD(DataSizec) = 8;
          ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 0xBui64, (char *)WbclPackage + v9 + 24, DataSizec);
          if( *(_DWORD *)((char *)WbclPackage + v9 + 4) == 2
            && *(_DWORD *)((char *)WbclPackage + v9) == 48
            && *((_BYTE *)WbclPackage + v9 + 32) )
          {
            RtlInitUnicodeString(&DestinationString, L"TPMActivePCRBanks", v12);
            LODWORD(DataSizea) = 4;
            ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 4ui64, (char *)WbclPackage + v9 + 40, DataSizea);
            RtlInitUnicodeString(&DestinationString, L"TPMActiveLogFormat", v13);
            LODWORD(DataSized) = 4;
            ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 4ui64, (char *)WbclPackage + v9 + 44, DataSized);
            RtlInitUnicodeString(&DestinationString, L"TPMDigestAlgID", v14);
            LODWORD(DataSizee) = 4;
            ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 4ui64, (char *)WbclPackage + v9 + 36, DataSizee);
          }
          if( !v5 )
          {
            RtlInitUnicodeString(&DestinationString, L"InitialEventCount", v12);
            LODWORD(DataSizea) = 8;
            ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 0xBui64, (char *)WbclPackage + v9 + 8, DataSizea);
            RtlInitUnicodeString(&DestinationString, L"InitialBootCount", v15);
            LODWORD(DataSizef) = 8;
            ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 0xBui64, (char *)WbclPackage + v9 + 16, DataSizef);
            RtlInitUnicodeString(&DestinationString, L"InitialCounterId", v16);
            LODWORD(DataSizeg) = 8;
            ZwSetValueKey(KeyHandle, &DestinationString, 0i64, 0xBui64, (char *)WbclPackage + v9 + 24, DataSizeg);
          }
        }
      }
    }
    if( KeyHandle )
      ZwClose(KeyHandle);
  }
}

Referenced by:

BapdpRegisterWbclData
PopBootLoaderSiData