AdtpBuildObjectTypeStrings
INT64 __fastcall AdtpBuildObjectTypeStrings(
_UNICODE_STRING *SourceModule,
_UNICODE_STRING *ObjectTypeName,
_SE_ADT_OBJECT_TYPE *ObjectTypeList,
UINT64 ObjectTypeCount,
_UNICODE_STRING *ResultantString,
UINT8 *FreeWhenDone){
_UNICODE_STRING *v6;
size_t v7;
UINT8 *v9;
__int64 v11;
ACCESS_MASK v12;
USHORT *p_Level;
int v14;
char v15;
int appended;
unsigned __int16 v17;
UINT8 *v18;
int StringIndex;
UNICODE_STRING StringIndex_4;
__int64 v23;
v6 = ObjectTypeName;
StringIndex = 0;
v7 = (unsigned int)ObjectTypeCount;
StringIndex_4 = 0i64;
LOBYTE(v23) = 0;
RtlInitUnicodeString(ResultantString, &word_14001B020, (WCHAR)ObjectTypeList);
v9 = FreeWhenDone;
*FreeWhenDone = 0;
if( !(_DWORD)v7 )
return 0i64;
qsort((WCHAR *)ObjectTypeList, v7, (const WCHAR *)0x18, CompareObjectTypes);
v11 = 0i64;
v12 = ObjectTypeList->AccessMask - 1;
p_Level = &ObjectTypeList->Level;
do
{
v14 = *(_DWORD *)(p_Level + 1);
if( v14 != v12 )
{
v15 = 0;
v12 = *(_DWORD *)(p_Level + 1);
if( v14 )
{
appended = AdtpBuildAccessesString(SourceModule, v6, v14, 1, &StringIndex_4, 0i64, 0i64, 0i64, (__int64)&v23);
if( appended < 0 )
return(unsigned int)appended;
v15 = v23;
}
else
{
RtlInitUnicodeString(&StringIndex_4, L"---\r\n", 0);
LOBYTE(v23) = 0;
}
appended = AdtpAppendString(ResultantString, FreeWhenDone, &StringIndex_4, (UINT64 *)&StringIndex);
if( v15 )
ExFreePoolWithTag(StringIndex_4.Buffer, 0);
if( appended < 0 )
return(unsigned int)appended;
v9 = FreeWhenDone;
}
v17 = *p_Level;
if( *p_Level >= 4u )
v17 = 3;
appended = AdtpAppendZString(ResultantString, v9, off_1400098D8[v17], (UINT64 *)&StringIndex);
if( appended < 0 )
return(unsigned int)appended;
appended = AdtpBuildGuidString(&ObjectTypeList[v11].ObjectType, &StringIndex_4, v18);
if( appended < 0 )
return(unsigned int)appended;
appended = AdtpAppendString(ResultantString, v9, &StringIndex_4, (UINT64 *)&StringIndex);
ExFreePoolWithTag(StringIndex_4.Buffer, 0);
if( appended < 0 )
return(unsigned int)appended;
appended = AdtpAppendZString(ResultantString, v9, L"\r\n", (UINT64 *)&StringIndex);
if( appended < 0 )
return(unsigned int)appended;
v6 = ObjectTypeName;
v11 = (unsigned int)(v11 + 1);
p_Level += 12;
}
while( (unsigned int)v11 < (unsigned int)v7 );
return 0;
}Referenced by:
AdtpPackageParameters