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;
}