WmipProbeWnodeWorker
INT64 __fastcall WmipProbeWnodeWorker(
_WNODE_HEADER *WnodeHeader,
UINT64 MinWnodeSize,
UINT64 InstanceNameOffset,
UINT64 DataBlockOffset,
UINT64 DataBlockSize,
UINT64 InBufferLen,
UINT64 OutBufferLen,
UINT8 CheckOutBound,
UINT8 CheckInBound){
unsigned int v9;
unsigned int v10;
NTSTATUS v11;
UINT64 pulResult;
LODWORD(pulResult) = InstanceNameOffset;
v9 = InBufferLen;
v10 = MinWnodeSize;
v11 = 0;
if( !(_DWORD)InstanceNameOffset )
{
LABEL_11:
if( (_DWORD)DataBlockOffset && (unsigned int)DataBlockOffset < v10 )
return 3221225473i64;
goto LABEL_13;
}
if( (unsigned int)InstanceNameOffset < v10 )
return 3221225473i64;
if( (((unsigned int)InstanceNameOffset + 1i64) & 0xFFFFFFFFFFFFFFFEui64) != (unsigned int)InstanceNameOffset )
return 3221225473i64;
if( (unsigned int)InstanceNameOffset > (unsigned __int64)(unsigned int)InBufferLen - 2 )
return 3221225473i64;
v11 = RtlULongAdd(
(unsigned int)InstanceNameOffset,
(unsigned int)*(unsigned __int16 *)((char *)&WnodeHeader->BufferSize + (unsigned int)InstanceNameOffset) + 2,
&pulResult);
if( v11 < 0 || (unsigned int)pulResult > v9 || CheckOutBound && (unsigned int)pulResult > (unsigned int)OutBufferLen )
return 3221225473i64;
if( (_DWORD)DataBlockOffset )
{
if( (unsigned int)DataBlockOffset < (unsigned int)pulResult )
return 3221225473i64;
goto LABEL_11;
}
LABEL_13:
if( (((unsigned int)DataBlockOffset + 7i64) & 0xFFFFFFFFFFFFFFF8ui64) == (unsigned int)DataBlockOffset
&& (!CheckInBound
|| !(_DWORD)DataBlockOffset
|| (unsigned int)DataBlockSize <= v9 && (unsigned int)DataBlockOffset <= v9 - (unsigned int)DataBlockSize)
&& (!CheckOutBound
|| (unsigned int)OutBufferLen >= v10
&& (unsigned int)DataBlockOffset <= (unsigned int)OutBufferLen
&& (_DWORD)DataBlockOffset) )
{
return(unsigned int)v11;
}
return 3221225473i64;
}Referenced by:
WmipProbeWnodeMethodItem
WmipProbeWnodeSingleInstance
WmipProbeWnodeSingleItem