PipInitComputerIds

NTSTATUS __stdcall PipInitComputerIds(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  BYTE *v2; 
  unsigned int v3; 
  GUID *v4; 
  int v5; 
  HANDLE v6; 
  NTSTATUS ComputerId; 
  _LARGE_INTEGER *v8; 
  _LARGE_INTEGER v9; 
  unsigned int HighPart; 
  BYTE *v11; 
  BYTE *v12; 
  BYTE *Struct; 
  unsigned __int8 *v14; 
  unsigned __int8 *v15; 
  NTSTATUS String; 
  NTSTATUS v17; 
  NTSTATUS v18; 
  NTSTATUS v19; 
  NTSTATUS v20; 
  BYTE *v21; 
  __int64 v22; 
  unsigned __int8 *v23; 
  NTSTATUS v24; 
  NTSTATUS v25; 
  BYTE *v26; 
  __int64 v27; 
  unsigned __int8 *v28; 
  NTSTATUS v29; 
  NTSTATUS v30; 
  NTSTATUS v31; 
  BYTE *v32; 
  WCHAR v33; 
  unsigned int v34; 
  int v35; 
  unsigned int v36; 
  struct _UNICODE_STRING *p_UnicodeString; 
  unsigned int v38; 
  struct _UNICODE_STRING *v39; 
  PCWSTR *v40; 
  WCHAR *v41; 
  __int64 v42; 
  wchar_t *Buffer; 
  HANDLE v44; 
  unsigned int v45; 
  UNICODE_STRING **v46; 
  WCHAR v47; 
  int v48; 
  struct _UNICODE_STRING *v49; 
  __int64 v50; 
  __int128 *v51; 
  unsigned int v52; 
  struct _UNICODE_STRING *v53; 
  __int64 v54; 
  __int128 *v55; 
  __int128 *v56; 
  __int64 v57; 
  struct _UNICODE_STRING *v58; 
  __int64 v59; 
  struct _UNICODE_STRING *v60; 
  __int128 *v61; 
  __int64 v62; 
  struct _UNICODE_STRING *v63; 
  __int128 *v64; 
  __int64 v65; 
  struct _UNICODE_STRING *v66; 
  __int128 *v67; 
  WCHAR v68; 
  int v69; 
  __int64 v70; 
  struct _UNICODE_STRING *v71; 
  UINT64 *v72; 
  wchar_t *PoolWithTag; 
  wchar_t *v74; 
  wchar_t *v75; 
  unsigned __int16 v76; 
  wchar_t *v77; 
  unsigned __int64 v78; 
  __int64 v79; 
  const wchar_t *v80; 
  signed __int64 v81; 
  __int64 v82; 
  unsigned __int64 v83; 
  _UNICODE_STRING *v84; 
  __int64 v85; 
  __int64 v86; 
  HANDLE v87; 
  PVOID Data; 
  PVOID Dataa; 
  UINT64 DataSize; 
  unsigned int v92; 
  BYTE *v93; 
  struct _UNICODE_STRING ValueName_8; 
  int v95; 
  HANDLE Handle; 
  HANDLE KeyHandle; 
  PVOID v98; 
  unsigned int v99; 
  PVOID v100; 
  struct _UNICODE_STRING DestinationString; 
  __int64 v102; 
  struct _UNICODE_STRING v103; 
  UINT64 StringCount[2]; 
  __int128 v105; 
  __int128 v106; 
  struct _UNICODE_STRING *p_DestinationString; 
  struct _UNICODE_STRING UnicodeString; 
  struct _UNICODE_STRING v109; 
  struct _UNICODE_STRING v110; 
  struct _UNICODE_STRING v111; 
  struct _UNICODE_STRING v112; 
  struct _UNICODE_STRING v113; 
  struct _UNICODE_STRING v114; 
  struct _UNICODE_STRING v115; 
  struct _UNICODE_STRING v116; 
  struct _UNICODE_STRING v117; 
  int v118[60]; 
  wchar_t SourceString; 
  wchar_t pszDest[8]; 
  v102 = 0i64;
  v2 = 0i64;
  KeyHandle = 0i64;
  v3 = 0;
  Handle = 0i64;
  v98 = 0i64;
  v95 = 0;
  v99 = 0;
  v100 = 0i64;
  DestinationString = 0i64;
  p_DestinationString = 0i64;
  v103 = 0i64;
  *(_OWORD *)StringCount = 0i64;
  v105 = 0i64;
  v106 = 0i64;
  ValueName_8 = 0i64;
  memset((INT64)&UnicodeString, 0i64);
  v5 = PipHardwareConfigOpenKey(v4, 0xF003Fui64, &KeyHandle);
  v6 = KeyHandle;
  ComputerId = v5;
  if( v5 >= 0 )
  {
    PnpCtxRegDeleteTree(PiPnpRtlCtx, (char *)KeyHandle, L"ComputerIds");
    *(_DWORD *)&ValueName_8.Length = 1572886;
    LODWORD(Data) = 0;
    ValueName_8.Buffer = L"ComputerIds";
    ComputerId = IopCreateRegistryKeyEx(&Handle, v6, &ValueName_8, 0xF003Fui64, (UINT64)Data, 0i64);
    if( ComputerId >= 0 )
    {
      PnpCtxRegDeleteTree(PiPnpRtlCtx, (char *)v6, L"ProductIds");
      *(_DWORD *)&ValueName_8.Length = 1441812;
      ValueName_8.Buffer = L"ProductIds";
      LODWORD(Dataa) = 0;
      ComputerId = IopCreateRegistryKeyEx(&v98, v6, &ValueName_8, 0xF003Fui64, (UINT64)Dataa, 0i64);
      if( ComputerId >= 0 )
      {
        v8 = *(_LARGE_INTEGER **)(*((_QWORD *)LoaderBlock + 30) + 56i64);
        if( !v8 || (v9 = v8[2], !v9.QuadPart) )
        {
          ComputerId = -1073741637;
          goto LABEL_147;
        }
        HighPart = v8[1].HighPart;
        v92 = HighPart;
        MmMapIoSpaceEx(v9, HighPart, 2ui64);
        v93 = v11;
        v12 = v11;
        if( !v11 )
        {
          ComputerId = -1073741670;
          v2 = 0i64;
LABEL_161:
          v3 = HighPart;
          goto LABEL_147;
        }
        Struct = PipSmBiosFindStruct(1, 0, v11, HighPart);
        v14 = Struct;
        if( Struct )
        {
          v15 = Struct + 5;
          if( Struct + 5 <= &Struct[Struct[1]] )
          {
            String = PipSmBiosGetString((__int64)Struct, Struct[4], (__int64)v12, HighPart, &UnicodeString);
            ComputerId = String;
            if( String == -1073741275 )
            {
              ComputerId = 0;
            }
            else if( String < 0 )
            {
              goto LABEL_160;
            }
          }
          if( v14 + 27 <= &v14[v14[1]] )
          {
            v17 = PipSmBiosGetString((__int64)v14, v14[26], (__int64)v12, HighPart, &v109);
            ComputerId = v17;
            if( v17 == -1073741275 )
            {
              ComputerId = 0;
            }
            else if( v17 < 0 )
            {
              goto LABEL_160;
            }
          }
          if( v14 + 6 <= &v14[v14[1]] )
          {
            v18 = PipSmBiosGetString((__int64)v14, *v15, (__int64)v12, HighPart, &v110);
            ComputerId = v18;
            if( v18 == -1073741275 )
            {
              ComputerId = 0;
            }
            else if( v18 < 0 )
            {
              goto LABEL_160;
            }
          }
          if( v14 + 26 <= &v14[v14[1]] )
          {
            v19 = PipSmBiosGetString((__int64)v14, v14[25], (__int64)v12, HighPart, &v111);
            ComputerId = v19;
            if( v19 == -1073741275 )
            {
              ComputerId = 0;
            }
            else if( v19 < 0 )
            {
              goto LABEL_160;
            }
          }
          if( v14 + 7 <= &v14[v14[1]] )
          {
            v20 = PipSmBiosGetString((__int64)v14, v14[6], (__int64)v12, HighPart, &v117);
            ComputerId = v20;
            if( v20 == -1073741275 )
            {
              ComputerId = 0;
            }
            else if( v20 < 0 )
            {
              goto LABEL_160;
            }
          }
        }
        v21 = PipSmBiosFindStruct(2, 10, v12, HighPart);
        v22 = (__int64)v21;
        if( v21 )
        {
          v23 = v21 + 5;
          if( v21 + 5 <= &v21[v21[1]] )
          {
            v24 = PipSmBiosGetString((__int64)v21, v21[4], (__int64)v12, HighPart, &v114);
            ComputerId = v24;
            if( v24 == -1073741275 )
            {
              ComputerId = 0;
            }
            else if( v24 < 0 )
            {
              goto LABEL_160;
            }
          }
          if( v22 + 6 <= v22 + (unsigned __int64)*(unsigned __int8 *)(v22 + 1) )
          {
            v25 = PipSmBiosGetString(v22, *v23, (__int64)v12, HighPart, &v115);
            ComputerId = v25;
            if( v25 == -1073741275 )
            {
              ComputerId = 0;
            }
            else if( v25 < 0 )
            {
              goto LABEL_160;
            }
          }
        }
        v26 = PipSmBiosFindStruct(0, 0, v12, HighPart);
        v27 = (__int64)v26;
        if( !v26 )
          goto LABEL_40;
        v28 = v26 + 5;
        if( v26 + 5 <= &v26[v26[1]] )
        {
          v29 = PipSmBiosGetString((__int64)v26, v26[4], (__int64)v12, HighPart, &v112);
          ComputerId = v29;
          if( v29 == -1073741275 )
          {
            ComputerId = 0;
          }
          else if( v29 < 0 )
          {
            goto LABEL_160;
          }
        }
        if( v27 + 6 > v27 + (unsigned __int64)*(unsigned __int8 *)(v27 + 1) )
          goto LABEL_37;
        v30 = PipSmBiosGetString(v27, *v28, (__int64)v12, HighPart, &v113);
        ComputerId = v30;
        if( v30 == -1073741275 )
        {
          ComputerId = 0;
          goto LABEL_37;
        }
        if( v30 >= 0 )
        {
LABEL_37:
          if( v27 + 9 > v27 + (unsigned __int64)*(unsigned __int8 *)(v27 + 1) )
            goto LABEL_40;
          v31 = PipSmBiosGetString(v27, *(_BYTE *)(v27 + 8), (__int64)v12, HighPart, &v116);
          ComputerId = v31;
          if( v31 == -1073741275 )
          {
            ComputerId = 0;
            goto LABEL_40;
          }
          if( v31 >= 0 )
          {
LABEL_40:
            v32 = PipSmBiosFindStruct(3, 0, v12, HighPart);
            v34 = 0;
            if( v32 && v32 + 6 <= &v32[v32[1]] )
            {
              v35 = v32[5] & 0x7F;
              v95 = v35;
            }
            else
            {
              v35 = v95;
            }
            if( v35 )
            {
              ValueName_8.Buffer = L"EnclosureType";
              LODWORD(DataSize) = 4;
              *(_DWORD *)&ValueName_8.Length = 1835034;
              ZwSetValueKey(KeyHandle, &ValueName_8, 0i64, 4ui64, &v95, DataSize);
            }
            v36 = 0;
            p_UnicodeString = &UnicodeString;
            do
            {
              if( p_UnicodeString->Buffer && !p_UnicodeString->Length )
                RtlFreeAnsiString(&UnicodeString + v36);
              ++v36;
              ++p_UnicodeString;
            }
            while( v36 < 0xA );
            v38 = 0;
            v39 = &UnicodeString;
            v40 = (PCWSTR *)off_1400082A0;
            do
            {
              RtlInitUnicodeString(&ValueName_8, *v40, v33);
              if( v39->Length )
              {
                if( (int)PnpUnicodeStringToWstr((WCHAR **)&v100, 0i64, &UnicodeString + v38) >= 0 )
                {
                  v41 = (WCHAR *)v100;
                  v42 = -1i64;
                  do
                    ++v42;
                  while( *((_WORD *)v100 + v42) );
                  LODWORD(DataSize) = 2 * v42 + 2;
                  ZwSetValueKey(KeyHandle, &ValueName_8, 0i64, 1ui64, v100, DataSize);
                  PnpUnicodeStringToWstrFree(v41, &UnicodeString + v38);
                }
                v34 = 0;
              }
              else
              {
                ZwDeleteValueKey(KeyHandle, &ValueName_8);
              }
              ++v38;
              ++v40;
              ++v39;
            }
            while( v38 < 0xA );
            Buffer = UnicodeString.Buffer;
            v44 = Handle;
            v45 = v99;
            if( !UnicodeString.Buffer )
            {
LABEL_122:
              PoolWithTag = (wchar_t *)ExAllocatePoolWithTag(PagedPool, 112 * v45 + 2, 0x6E697050ui64);
              v74 = PoolWithTag;
              if( PoolWithTag )
              {
                v75 = PoolWithTag;
                ValueName_8.Buffer = PoolWithTag;
                v76 = 112 * v45 + 2;
                ValueName_8.MaximumLength = v76;
                if( v45 )
                {
                  v98 = L"ComputerMetadata\\";
                  do
                  {
                    v77 = 0i64;
                    ValueName_8.Length = 0;
                    v78 = 0i64;
                    ComputerId = 0;
                    if( (ValueName_8.MaximumLength & 1) != 0 || v76 == 0xFFFF )
                    {
                      ComputerId = -1073741811;
                    }
                    else
                    {
                      if( v75 || !v76 )
                      {
                        v77 = v75;
                        v78 = (unsigned __int64)v76 >> 1;
                      }
                      else
                      {
                        ComputerId = -1073741811;
                      }
                      if( ComputerId < 0 )
                        goto LABEL_145;
                      v79 = 0i64;
                      if( v78 )
                      {
                        v80 = L"ComputerMetadata\\";
                        v81 = (char *)v77 - (_BYTE *)v98;
                        v82 = 0x7FFFi64;
                        v83 = v78;
                        ComputerId = 0;
                        do
                        {
                          if( !v82 )
                            break;
                          if( *v80 == (_WORD)v102 )
                            break;
                          *(const wchar_t *)((char *)v80 + v81) = *v80;
                          --v82;
                          ++v80;
                          ++v79;
                          --v83;
                        }
                        while( v83 );
                        if( !v83 && v82 && *v80 )
                          ComputerId = -2147483643;
                        v77 += v79;
                        LOWORD(v78) = v78 - v79;
                      }
                      else
                      {
                        ComputerId = v77 != 0i64 ? -2147483643 : -1073741811;
                      }
                      ValueName_8.Length = 2 * v79;
                      if( ((ComputerId + 0x80000000) & 0x80000000) != 0 || ComputerId == -2147483643 )
                      {
                        ValueName_8.Length = 0;
                        ValueName_8.MaximumLength = 2 * v78;
                        ValueName_8.Buffer = v77;
                      }
                    }
                    if( ComputerId < 0 )
                      goto LABEL_145;
                    ComputerId = RtlStringFromGUIDEx((const _GUID *const)&v118[4 * v34], &ValueName_8, 0);
                    if( ComputerId < 0 )
                      goto LABEL_145;
                    ComputerId = RtlUpcaseUnicodeString(&ValueName_8, &ValueName_8, 0);
                    if( ComputerId < 0 )
                      goto LABEL_145;
                    v75 = ValueName_8.Buffer + 39;
                    v76 = ValueName_8.MaximumLength - 78;
                    ValueName_8.Buffer += 39;
                    ++v34;
                    ValueName_8.MaximumLength -= 78;
                  }
                  while( v34 < v45 );
                }
                if( ComputerId >= 0 )
                {
                  *v75 = 0;
                  ++ValueName_8.Buffer;
                  ComputerId = PnpSetObjectProperty(
                                 PiPnpRtlCtx,
                                 (__int64)L"{00000000-0000-0000-FFFF-FFFFFFFFFFFF}",
                                 5u,
                                 0i64,
                                 0i64,
                                 (__int64)&DEVPKEY_Device_HardwareIds,
                                 8210,
                                 (__int64)v74,
                                 112 * v45 + 2,
                                 0);
                }
LABEL_145:
                ExFreePoolWithTag(v74, 0);
              }
              else
              {
                ComputerId = -1073741670;
              }
              goto LABEL_146;
            }
            v46 = (UNICODE_STRING **)v98;
            if( v110.Buffer && v112.Buffer && v113.Buffer )
            {
              RtlStringCchPrintfW(pszDest, 8ui64, (WCHAR *)L"%02x&%02x");
              ComputerId = v48;
              if( v48 < 0 )
                goto LABEL_146;
              RtlInitUnicodeString(&DestinationString, pszDest, v47);
              if( v111.Buffer )
              {
                StringCount[0] = (UINT64)&UnicodeString;
                v49 = &v110;
                StringCount[1] = (UINT64)&v109;
                v50 = 4i64;
                v51 = &v105;
                do
                {
                  *(_QWORD *)v51 = v49++;
                  v51 = (__int128 *)((char *)v51 + 8);
                  --v50;
                }
                while( v50 );
                p_DestinationString = &DestinationString;
                ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)7);
                v45 = 1;
                if( ComputerId < 0 )
                  goto LABEL_146;
              }
              StringCount[0] = (UINT64)&UnicodeString;
              StringCount[1] = (UINT64)&v109;
              *(_QWORD *)&v105 = &v110;
              *((_QWORD *)&v105 + 1) = &v112;
              *(_QWORD *)&v106 = &v113;
              *((_QWORD *)&v106 + 1) = &DestinationString;
              v52 = v45 + 1;
              ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)6);
              if( ComputerId < 0 )
                goto LABEL_146;
              StringCount[0] = (UINT64)&UnicodeString;
              StringCount[1] = (UINT64)&v110;
              *(_QWORD *)&v105 = &v112;
              *((_QWORD *)&v105 + 1) = &v113;
              *(_QWORD *)&v106 = &DestinationString;
              v45 = v52 + 1;
              ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)5);
              if( ComputerId < 0 )
                goto LABEL_146;
              Buffer = UnicodeString.Buffer;
            }
            if( !Buffer )
              goto LABEL_122;
            if( v110.Buffer )
            {
              if( v111.Buffer )
              {
                if( v114.Buffer )
                {
                  if( v115.Buffer )
                  {
                    StringCount[0] = (UINT64)&UnicodeString;
                    v53 = &v110;
                    v54 = 2i64;
                    StringCount[1] = (UINT64)&v109;
                    v55 = &v105;
                    do
                    {
                      *(_QWORD *)v55 = v53++;
                      v55 = (__int128 *)((char *)v55 + 8);
                      --v54;
                    }
                    while( v54 );
                    v56 = &v106;
                    v57 = 2i64;
                    v58 = &v114;
                    do
                    {
                      *(_QWORD *)v56 = v58++;
                      v56 = (__int128 *)((char *)v56 + 8);
                      --v57;
                    }
                    while( v57 );
                    ++v45;
                    ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)6);
                    if( ComputerId < 0 )
                      goto LABEL_146;
                  }
                }
                v59 = 2i64;
                StringCount[0] = (UINT64)&UnicodeString;
                v60 = &v110;
                StringCount[1] = (UINT64)&v109;
                v61 = &v105;
                do
                {
                  *(_QWORD *)v61 = v60++;
                  v61 = (__int128 *)((char *)v61 + 8);
                  --v59;
                }
                while( v59 );
                ++v45;
                ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)4);
                if( ComputerId < 0 )
                  goto LABEL_146;
              }
              StringCount[0] = (UINT64)&UnicodeString;
              StringCount[1] = (UINT64)&v109;
              *(_QWORD *)&v105 = &v110;
              ++v45;
              ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)3);
              if( ComputerId < 0 )
                goto LABEL_146;
              Buffer = UnicodeString.Buffer;
            }
            if( !Buffer )
              goto LABEL_122;
            if( v111.Buffer )
            {
              if( v114.Buffer )
              {
                if( v115.Buffer )
                {
                  v62 = 2i64;
                  StringCount[0] = (UINT64)&UnicodeString;
                  v63 = &v114;
                  StringCount[1] = (UINT64)&v111;
                  v64 = &v105;
                  do
                  {
                    *(_QWORD *)v64 = v63++;
                    v64 = (__int128 *)((char *)v64 + 8);
                    --v62;
                  }
                  while( v62 );
                  ++v45;
                  ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)4);
                  if( ComputerId < 0 )
                    goto LABEL_146;
                }
              }
              StringCount[0] = (UINT64)&UnicodeString;
              StringCount[1] = (UINT64)&v111;
              ++v45;
              ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)2);
              if( ComputerId < 0 )
                goto LABEL_146;
              Buffer = UnicodeString.Buffer;
            }
            if( !Buffer )
              goto LABEL_122;
            if( v110.Buffer )
            {
              if( v114.Buffer )
              {
                if( v115.Buffer )
                {
                  StringCount[0] = (UINT64)&UnicodeString;
                  StringCount[1] = (UINT64)&v110;
                  *(_QWORD *)&v105 = &v114;
                  *((_QWORD *)&v105 + 1) = &v115;
                  ++v45;
                  ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)4);
                  if( ComputerId < 0 )
                    goto LABEL_146;
                }
              }
              StringCount[0] = (UINT64)&UnicodeString;
              StringCount[1] = (UINT64)&v110;
              ++v45;
              ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)2);
              if( ComputerId < 0 )
                goto LABEL_146;
              Buffer = UnicodeString.Buffer;
            }
            if( !Buffer )
              goto LABEL_122;
            if( v109.Buffer )
            {
              if( v115.Buffer )
              {
                if( v114.Buffer )
                {
                  v65 = 2i64;
                  StringCount[0] = (UINT64)&UnicodeString;
                  v66 = &v114;
                  StringCount[1] = (UINT64)&v109;
                  v67 = &v105;
                  do
                  {
                    *(_QWORD *)v67 = v66++;
                    v67 = (__int128 *)((char *)v67 + 8);
                    --v65;
                  }
                  while( v65 );
                  ++v45;
                  ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)4);
                  if( ComputerId < 0 )
                    goto LABEL_146;
                }
              }
              StringCount[0] = (UINT64)&UnicodeString;
              StringCount[1] = (UINT64)&v109;
              ++v45;
              ComputerId = PipCreateComputerId(v44, v46, (UINT64)StringCount, (GUID *)2);
              if( ComputerId < 0 )
                goto LABEL_146;
              Buffer = UnicodeString.Buffer;
            }
            if( !Buffer )
              goto LABEL_122;
            if( v95 )
            {
              RtlStringCchPrintfW(&SourceString, 4ui64, (WCHAR *)L"%x");
              ComputerId = v69;
              if( v69 < 0 )
                goto LABEL_146;
              RtlInitUnicodeString(&v103, &SourceString, v68);
              StringCount[0] = (UINT64)&UnicodeString;
              StringCount[1] = (UINT64)&v103;
              ++v45;
              ComputerId = PipCreateComputerId(v44, 0i64, (UINT64)StringCount, (GUID *)2);
              if( ComputerId < 0 )
                goto LABEL_146;
              Buffer = UnicodeString.Buffer;
            }
            if( !Buffer )
              goto LABEL_122;
            if( !v115.Buffer )
              goto LABEL_187;
            if( !v114.Buffer )
              goto LABEL_187;
            v70 = 2i64;
            StringCount[0] = (UINT64)&UnicodeString;
            v71 = &v114;
            v72 = &StringCount[1];
            do
            {
              *v72++ = (UINT64)v71++;
              --v70;
            }
            while( v70 );
            ++v45;
            ComputerId = PipCreateComputerId(v44, 0i64, (UINT64)StringCount, (GUID *)3);
            if( ComputerId >= 0 )
            {
LABEL_187:
              StringCount[0] = (UINT64)&UnicodeString;
              ++v45;
              ComputerId = PipCreateComputerId(v44, 0i64, (UINT64)StringCount, (GUID *)1);
              if( ComputerId >= 0 )
                goto LABEL_122;
            }
LABEL_146:
            v3 = v92;
            v2 = v93;
            goto LABEL_147;
          }
        }
LABEL_160:
        v2 = v12;
        goto LABEL_161;
      }
    }
  }
LABEL_147:
  v84 = &UnicodeString;
  v85 = 10i64;
  do
  {
    RtlFreeAnsiString(v84++);
    --v85;
  }
  while( v85 );
  v87 = Handle;
  if( v2 )
    MmUnmapIoSpace(v2, v3);
  if( v87 )
    ZwClose(v87);
  if( KeyHandle )
    PnpCtxRegCloseKey(v86, KeyHandle);
  return ComputerId;
}

Referenced by:

IopInitializeBootDrivers