KsepRegistryEnumValue
INT64 __stdcall KsepRegistryEnumValue(
PVOID KeyHandle,
UINT64 Index,
UINT64 ValueNameLength,
WCHAR *ValueName,
UINT64 *ActualLength){
unsigned int v7;
INT64 result;
UINT8 *v10;
UINT8 *v11;
unsigned int v12;
UINT64 v13;
UINT64 v14;
UINT64 Length;
UINT64 Lengtha;
UINT64 ResultLength[5];
LODWORD(Length) = 0;
v7 = Index;
LODWORD(ResultLength[0]) = 0;
LODWORD(result) = ZwEnumerateValueKey(KeyHandle, Index, KeyValueBasicInformation, 0i64, Length, ResultLength);
if( (_DWORD)result == -1073741789 || (_DWORD)result == -2147483643 )
{
KsepPoolAllocatePaged(LODWORD(ResultLength[0]));
v11 = v10;
if( v10 )
{
LODWORD(Lengtha) = ResultLength[0];
v12 = ZwEnumerateValueKey(KeyHandle, v7, KeyValueBasicInformation, v10, Lengtha, ResultLength);
if( !v12 )
{
v13 = *((unsigned int *)v11 + 2);
v14 = v13 + 2;
if( v13 + 2 <= ValueNameLength )
{
memmove((UINT8 *)ValueName, v11 + 12, v13);
ValueName[(unsigned __int64)*((unsigned int *)v11 + 2) >> 1] = 0;
v14 = *((unsigned int *)v11 + 2) + 2i64;
}
else
{
v12 = -1073741789;
}
*ActualLength = v14;
}
KsepPoolFreePaged(v11);
return v12;
}
else
{
return 3221225495i64;
}
}
return result;
}Referenced by:
KsepDbQueryRegistryDeviceDataList