PipMigratePnpState

NTSTATUS __stdcall PipMigratePnpState(){
  char v0; 
  HPNPCTX *v1; 
  NTSTATUS v2; 
  HPNPCTX *v3; 
  INT64 v4; 
  INT64 v5; 
  int CachedContextBaseKey; 
  NTSTATUS v8; 
  NTSTATUS v9; 
  NTSTATUS v10; 
  NTSTATUS v11; 
  __int64 v12; 
  int v13; 
  NTSTATUS MatchingDeviceList; 
  UINT64 DesiredAccess; 
  UINT64 DesiredAccessa; 
  UINT64 DesiredAccessb; 
  int DesiredAccessc; 
  UINT64 v19; 
  VOID *MatchCallbackContext; 
  WCHAR *Buffer; 
  _HANDLE v22[2]; 
  _HANDLE v23[2]; 
  _HANDLE v24[2]; 
  int a6; 
  __int64 Source2; 
  INT64 v27; 
  HPNPCTX *hPnpCtx; 
  _HANDLE v29[2]; 
  __int64 Source1[8]; 
  UINT64 DataSize; 
  UINT64 RegType; 
  int Data; 
  int v34; 

  LODWORD(DesiredAccess) = 131103;
  *(_QWORD *)v23 = 0i64;
  *(_QWORD *)v24 = 0i64;
  v27 = 0i64;
  v0 = 0;
  LODWORD(RegType) = 0;
  v1 = 0i64;
  Data = 0;
  v34 = 0;
  *(_QWORD *)v22 = 0i64;
  Source1[0] = 0i64;
  Source2 = 0i64;
  *(_QWORD *)v29 = 0i64;
  hPnpCtx = 0i64;
  a6 = 0;
  v2 = PnpCtxRegOpenKey(
         *(&stru_140CF2E80 + 607),
         (VOID *)0x80000002i64,
         (WCHAR *)L"System\\Setup\\Upgrade\\PnP",
         0i64,
         DesiredAccess,
         (VOID **)v23);
  CachedContextBaseKey = v2;
  if( v2 == -1073741772 )
    goto LABEL_2;
  if( v2 >= 0 )
  {
    LODWORD(DataSize) = 4;
    v8 = PnpCtxRegQueryValue(v3, *(VOID **)v23, (WCHAR *)L"MigrationStatus", &RegType, &Data, &DataSize);
    CachedContextBaseKey = v8;
    if( v8 != -1073741772 )
    {
      if( v8 < 0 )
        goto LABEL_3;
      if( (_DWORD)RegType != 4 || (_DWORD)DataSize != 4 )
      {
        CachedContextBaseKey = -1073741823;
        goto LABEL_47;
      }
    }
    LODWORD(DesiredAccessa) = 131103;
    v9 = PnpCtxRegOpenKey(
           *(&stru_140CF2E80 + 607),
           *(VOID **)v23,
           (WCHAR *)L"CurrentControlSet",
           0i64,
           DesiredAccessa,
           (VOID **)v24);
    CachedContextBaseKey = v9;
    if( v9 == -1073741772 )
    {
LABEL_2:
      CachedContextBaseKey = 0;
      goto LABEL_3;
    }
    if( v9 >= 0 )
    {
      LODWORD(DesiredAccessa) = 131097;
      CachedContextBaseKey = PnpCtxRegOpenKey(
                               *(&stru_140CF2E80 + 607),
                               *(VOID **)v24,
                               (WCHAR *)L"Control\\DeviceMigration",
                               0i64,
                               DesiredAccessa,
                               (VOID **)v22);
      if( CachedContextBaseKey >= 0 )
      {
        LODWORD(DataSize) = 8;
        CachedContextBaseKey = PnpCtxRegQueryValue(
                                 v3,
                                 *(VOID **)v22,
                                 (WCHAR *)L"MigrationTime",
                                 &RegType,
                                 &Source2,
                                 &DataSize);
        if( CachedContextBaseKey >= 0 )
        {
          if( (_DWORD)RegType == 3 && (_DWORD)DataSize == 8 )
          {
            PnpCtxRegCloseKey(
              v3,
              *(VOID **)v22,
              v4,
              v5,
              DesiredAccessa,
              v19,
              (INT64)MatchCallbackContext,
              (INT64)Buffer);
            *(_QWORD *)v22 = 0i64;
            CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(
                                     *(&stru_140CF2E80 + 607),
                                     PNPCTX_BASE_KEY_TYPE_CONTROLSET,
                                     (VOID **)&v27);
            if( CachedContextBaseKey < 0 )
              goto LABEL_3;
            LODWORD(DesiredAccessa) = 131078;
            CachedContextBaseKey = PnpCtxRegCreateKey(
                                     *(&stru_140CF2E80 + 607),
                                     (VOID *)v27,
                                     (WCHAR *)L"Control\\DeviceMigration",
                                     0i64,
                                     DesiredAccessa,
                                     0i64,
                                     (VOID **)v22,
                                     0i64);
            if( CachedContextBaseKey < 0 )
              goto LABEL_3;
            LODWORD(DataSize) = 8;
            v10 = PnpCtxRegQueryValue(v3, *(VOID **)v22, (WCHAR *)L"MigrationTime", &RegType, Source1, &DataSize);
            CachedContextBaseKey = v10;
            if( v10 == -1073741772 )
              goto LABEL_32;
            if( v10 < 0 )
              goto LABEL_3;
            if( (_DWORD)RegType == 3 && (_DWORD)DataSize == 8 )
            {
              if( RtlCompareMemory(Source1, &Source2, 8) == (_SIZE_T *)8 )
              {
                CachedContextBaseKey = -1073741791;
                goto LABEL_3;
              }
LABEL_32:
              LODWORD(v19) = 4;
              Data = 259;
              CachedContextBaseKey = PnpCtxRegSetValue(
                                       v3,
                                       *(VOID **)v23,
                                       (WCHAR *)L"MigrationStatus",
                                       4ui64,
                                       &Data,
                                       v19);
              if( CachedContextBaseKey < 0 )
                goto LABEL_3;
              LODWORD(v19) = 8;
              CachedContextBaseKey = PnpCtxRegSetValue(
                                       v3,
                                       *(VOID **)v22,
                                       (WCHAR *)L"MigrationTime",
                                       3ui64,
                                       &Source2,
                                       v19);
              if( CachedContextBaseKey < 0 )
                goto LABEL_3;
              LODWORD(DataSize) = 4;
              v0 = 1;
              CachedContextBaseKey = PnpCtxRegQueryValue(
                                       v3,
                                       *(VOID **)v23,
                                       (WCHAR *)L"TargetVersion",
                                       &RegType,
                                       &v34,
                                       &DataSize);
              if( CachedContextBaseKey < 0 )
                goto LABEL_50;
              if( (_DWORD)RegType != 4 || (_DWORD)DataSize != 4 )
              {
                CachedContextBaseKey = -1073741823;
                goto LABEL_50;
              }
              if( (v34 & 0xFFFF0000) != 167772160 )
              {
                CachedContextBaseKey = -1073741735;
                goto LABEL_50;
              }
              CachedContextBaseKey = PnpCtxRegCopyTree(v3, *(VOID **)v24, 0i64, (VOID *)v27, 0i64);
              if( CachedContextBaseKey < 0 )
                goto LABEL_50;
              LODWORD(DesiredAccessb) = 131097;
              v11 = PnpCtxRegOpenKey(
                      *(&stru_140CF2E80 + 607),
                      *(VOID **)v24,
                      (WCHAR *)L"Services",
                      0i64,
                      DesiredAccessb,
                      (VOID **)v29);
              CachedContextBaseKey = v11;
              if( v11 != -1073741772 )
              {
                if( v11 < 0 )
                  goto LABEL_50;
                CachedContextBaseKey = PnpCtxRegEnumKeyWithCallback(
                                         *(&stru_140CF2E80 + 607),
                                         *(VOID **)v29,
                                         (INT64)PipMigrateCleanServiceCallback,
                                         0i64);
                if( CachedContextBaseKey < 0 )
                  goto LABEL_50;
              }
              v13 = PnpCtxOpenMachine(
                      (__int64)v3,
                      0i64,
                      v12,
                      (VOID *)0xFFFFFFFFFFFFFFFFi64,
                      DesiredAccessc,
                      v19,
                      &hPnpCtx);
              v1 = hPnpCtx;
              CachedContextBaseKey = v13;
              if( v13 < 0 )
                goto LABEL_50;
              LODWORD(MatchCallbackContext) = 0;
              MatchingDeviceList = CmGetMatchingDeviceList(
                                     hPnpCtx,
                                     (UINT8 *)PipMigrateResetDeviceCallback,
                                     0i64,
                                     0i64,
                                     CM_OBJECT_TYPE_NONE,
                                     &a6,
                                     MatchCallbackContext,
                                     Buffer,
                                     *(UINT64 *)v22,
                                     *(UINT64 **)v23,
                                     *(UINT64 *)v24);
              CachedContextBaseKey = MatchingDeviceList;
              if( MatchingDeviceList == -1073741789 )
              {
                CachedContextBaseKey = 0;
                goto LABEL_50;
              }
              if( MatchingDeviceList < 0 )
                goto LABEL_50;
LABEL_47:
              if( !v0 )
              {
LABEL_51:
                if( v1 )
                  PnpCtxCloseMachine(v1);
                goto LABEL_3;
              }
LABEL_50:
              LODWORD(v19) = 4;
              Data = CachedContextBaseKey;
              PnpCtxRegSetValue(v3, *(VOID **)v23, (WCHAR *)L"MigrationStatus", 4ui64, &Data, v19);
              goto LABEL_51;
            }
          }
          CachedContextBaseKey = -1073741823;
        }
      }
    }
  }
LABEL_3:
  if( *(_QWORD *)v29 )
    PnpCtxRegCloseKey(v3, *(VOID **)v29, v4, v5, DesiredAccessa, v19, (INT64)MatchCallbackContext, (INT64)Buffer);
  if( *(_QWORD *)v22 )
    PnpCtxRegCloseKey(v3, *(VOID **)v22, v4, v5, DesiredAccessa, v19, (INT64)MatchCallbackContext, (INT64)Buffer);
  if( *(_QWORD *)v24 )
    PnpCtxRegCloseKey(v3, *(VOID **)v24, v4, v5, DesiredAccessa, v19, (INT64)MatchCallbackContext, (INT64)Buffer);
  if( *(_QWORD *)v23 )
    PnpCtxRegCloseKey(v3, *(VOID **)v23, v4, v5, DesiredAccessa, v19, (INT64)MatchCallbackContext, (INT64)Buffer);
  return CachedContextBaseKey;
}

Referenced by:

IopInitializePlugPlayServices