PipLookupGroupName
CHAR *__fastcall PipLookupGroupName(PCUNICODE_STRING String1, int a2){
__int64 v2;
unsigned __int16 Length;
__int64 v6;
CHAR *result;
__int64 i;
v2 = IopGroupListHead;
if( IopGroupListHead )
{
Length = String1->Length;
while( 1 )
{
if( Length >= *(_WORD *)(v2 + 32) )
{
if( Length <= *(_WORD *)(v2 + 32) )
{
if( RtlEqualUnicodeString((UNICODE_STRING *)String1, (UNICODE_STRING *)(v2 + 32), 1u) )
return(CHAR *)v2;
for( i = *(_QWORD *)(v2 + 16); i; i = *(_QWORD *)(i + 16) )
{
if( RtlEqualUnicodeString((UNICODE_STRING *)String1, (UNICODE_STRING *)(i + 32), 1u) )
return(CHAR *)i;
v2 = *(_QWORD *)(v2 + 16);
}
if( a2 )
{
result = PipCreateEntry((const VOID **)String1);
*(_QWORD *)(v2 + 16) = result;
return result;
}
return 0i64;
}
v6 = *(_QWORD *)(v2 + 8);
if( !v6 )
{
if( !a2 )
return 0i64;
result = PipCreateEntry((const VOID **)String1);
*(_QWORD *)(v2 + 8) = result;
return result;
}
}
else
{
v6 = *(_QWORD *)v2;
if( !*(_QWORD *)v2 )
{
if( !a2 )
return 0i64;
result = PipCreateEntry((const VOID **)String1);
*(_QWORD *)v2 = result;
return result;
}
}
v2 = v6;
}
}
if( !a2 )
return 0i64;
result = PipCreateEntry((const VOID **)String1);
IopGroupListHead = (__int64)result;
return result;
}Referenced by:
IopInitializeBootDrivers
IopInitializeSystemDrivers
PipCheckDependencies