IoCheckQuotaBufferValidity
NTSTATUS __stdcall IoCheckQuotaBufferValidity(
PFILE_QUOTA_INFORMATION QuotaBuffer,
ULONG QuotaLength,
PULONG ErrorOffset){
ULONG v4;
int v5;
PFILE_QUOTA_INFORMATION v6;
NTSTATUS result;
int v8;
unsigned int v9;
__int64 NextEntryOffset;
v4 = QuotaLength;
v5 = (int)QuotaBuffer;
v6 = QuotaBuffer;
if( QuotaLength > 0x7FFFFFFF )
{
result = -2147483628;
LABEL_5:
*ErrorOffset = 0;
return result;
}
if( ((unsigned __int8)QuotaBuffer & 7) != 0 )
{
result = -2147483646;
goto LABEL_5;
}
if( QuotaLength >= 0x34 )
{
while( RtlValidSid(&v6->Sid) )
{
v8 = RtlLengthSid(&v6->Sid);
v9 = v8 + 40;
if( v4 < v8 + 40 || v6->SidLength != v8 )
break;
NextEntryOffset = v6->NextEntryOffset;
if( !(_DWORD)NextEntryOffset )
return 0;
if( v9 <= (unsigned int)NextEntryOffset
&& (NextEntryOffset & 7) == 0
&& (int)NextEntryOffset >= 0
&& v4 >= (unsigned int)NextEntryOffset )
{
v4 -= NextEntryOffset;
v6 = (PFILE_QUOTA_INFORMATION)((char *)v6 + NextEntryOffset);
if( v4 >= 0x34 )
continue;
}
break;
}
}
result = -1073741210;
*ErrorOffset = (_DWORD)v6 - v5;
return result;
}Referenced by:
IopSetEaOrQuotaInformationFile