PiSwValidateCreateData

INT64 __fastcall PiSwValidateCreateData(INT64 a1){
  unsigned int v2; 
  _WORD *v3; 
  unsigned __int64 v4; 
  unsigned __int64 v5; 
  UINT8 v6; 
  _WORD *v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  unsigned int v13; 
  WCHAR *v14; 
  WCHAR *i; 
  __int64 v16; 
  __int64 v17; 
  unsigned int v18; 
  WCHAR *v19; 
  WCHAR *j; 
  __int64 v21; 
  __int64 v22; 
  __int64 v23; 
  unsigned __int64 v24; 
  __int64 v25; 
  VOID *v26; 
  UINT64 v27; 
  DEVPROPERTY *v28; 
  UINT64 v29; 
  v2 = -1073741811;
  if( a1 )
  {
    v3 = *(_WORD **)(a1 + 8);
    if( v3 )
    {
      if( *v3 )
      {
        v4 = -1i64;
        v5 = -1i64;
        do
          ++v5;
        while( v3[v5] );
        if( v5 <= 0xC7 )
        {
          if( *(_QWORD *)a1 )
          {
            if( **(_WORD **)a1 )
            {
              if( PiSwIsValidPnpId(*(PWCHAR *)a1, 0) )
              {
                v7 = *(_WORD **)(a1 + 16);
                if( v7 )
                {
                  if( *v7 )
                  {
                    if( PiSwIsValidPnpId(*(PWCHAR *)(a1 + 16), v6) )
                    {
                      v11 = -1i64;
                      do
                        ++v11;
                      while( *(_WORD *)(v8 + 2 * v11) );
                      v12 = -1i64;
                      do
                        ++v12;
                      while( *(_WORD *)(v9 + 2 * v12) );
                      if( v11 + v12 + 5 <= v10 && (*(_DWORD *)(a1 + 64) & 0xFFFFFFF0) == 0 )
                      {
                        v13 = *(_DWORD *)(a1 + 24);
                        if( v13 <= 0x3FF && (v13 || !*(_QWORD *)(a1 + 32)) )
                        {
                          v14 = *(WCHAR **)(a1 + 32);
                          if( v14 )
                          {
                            if( PnpValidateMultiSz(v14, *(unsigned int *)(a1 + 24)) < 0 )
                              return v2;
                            for( i = *(WCHAR **)(a1 + 32); *i; i = (WCHAR *)(v17 + 2 * v16 + 2) )
                            {
                              if( !PiSwIsValidPnpId(i, 1u) )
                                return v2;
                              v16 = -1i64;
                              do
                                ++v16;
                              while( *(_WORD *)(v17 + 2 * v16) );
                            }
                          }
                          else if( v13 )
                          {
                            return v2;
                          }
                          v18 = *(_DWORD *)(a1 + 40);
                          if( v18 <= 0x3FF && (v18 || !*(_QWORD *)(a1 + 48)) )
                          {
                            v19 = *(WCHAR **)(a1 + 48);
                            if( v19 )
                            {
                              if( PnpValidateMultiSz(v19, *(unsigned int *)(a1 + 40)) < 0 )
                                return v2;
                              for( j = *(WCHAR **)(a1 + 48); *j; j = (WCHAR *)(v22 + 2 * v21 + 2) )
                              {
                                if( !PiSwIsValidPnpId(j, 1u) )
                                  return v2;
                                v21 = -1i64;
                                do
                                  ++v21;
                                while( *(_WORD *)(v22 + 2 * v21) );
                              }
                            }
                            else if( v18 )
                            {
                              return v2;
                            }
                            v23 = *(_QWORD *)(a1 + 72);
                            if( !v23 )
                              goto LABEL_59;
                            v24 = -1i64;
                            do
                              ++v24;
                            while( *(_WORD *)(v23 + 2 * v24) );
                            if( v24 <= 0x7FFE )
                            {
LABEL_59:
                              v25 = *(_QWORD *)(a1 + 80);
                              if( !v25 )
                                goto LABEL_46;
                              do
                                ++v4;
                              while( *(_WORD *)(v25 + 2 * v4) );
                              if( v4 <= 0x7FFE )
                              {
LABEL_46:
                                v26 = *(VOID **)(a1 + 96);
                                if( v26 || !*(_DWORD *)(a1 + 88) )
                                {
                                  v27 = *(unsigned int *)(a1 + 88);
                                  if( ((_DWORD)v27 || !v26)
                                    && (!v26 || SeValidSecurityDescriptor(v27, v26))
                                    && ((*(_DWORD *)(a1 + 64) & 8) == 0 || *(_QWORD *)(a1 + 32) || *(_QWORD *)(a1 + 48)) )
                                  {
                                    v28 = *(DEVPROPERTY **)(a1 + 112);
                                    if( v28 || !*(_DWORD *)(a1 + 104) )
                                    {
                                      v29 = *(unsigned int *)(a1 + 104);
                                      if( (_DWORD)v29 || !v28 )
                                        return(unsigned int)PiSwValidatePropertyArray(v28, v29);
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  return v2;
}

Referenced by:

PiSwIrpStartCreateWorker