IopIoRateStartRateControl
NTSTATUS __stdcall IopIoRateStartRateControl(
UINT64 *RateAmounts,
UINT64 Flags,
PVOID VolumeHandle,
PVOID DiskIoAttribution,
PVOID *RateControl,
UINT64 *VolumeKey){
unsigned int v8;
__int64(__fastcall **ExtensionTable)(UINT64 *, __int64, _QWORD, PVOID, _QWORD *, PVOID, UINT64 *, __int64);
PVOID v10;
NTSTATUS v11;
UINT64 v12;
UINT64 v14;
__int128 v15;
__int128 v16;
__int128 v17;
__m128i v18;
_QWORD v19[4];
__int64 v20;
v14 = 0i64;
v8 = (unsigned int)VolumeHandle;
v17 = 0i64;
v18 = 0i64;
v15 = 0i64;
v16 = 0i64;
ExtensionTable = (__int64(__fastcall **)(UINT64 *, __int64, _QWORD, PVOID, _QWORD *, PVOID, UINT64 *, __int64))ExGetExtensionTable(IopIoRateExtensionHost);
if( !ExtensionTable )
return -1073741822;
IoDiskIoAttributionQuery((__int64)RateControl, &v17, &v15);
v10 = RateControl[3];
v19[2] = *((_QWORD *)&v16 + 1) + v18.m128i_i64[0];
v19[3] = *((_QWORD *)&v16 + 1) + _mm_srli_si128(v18, 8).m128i_u64[0];
v19[0] = v15 + v17;
v19[1] = *((_QWORD *)&v15 + 1) + *((_QWORD *)&v17 + 1);
v11 = (*ExtensionTable)(RateAmounts, 15i64, v8, DiskIoAttribution, v19, v10, &v14, v20);
if( v11 >= 0 )
{
v12 = v14;
v14 = 0i64;
v11 = 0;
*VolumeKey = v12;
}
ExReleaseRundownProtection(IopIoRateExtensionHost + 8);
return v11;
}Referenced by:
IoStartIoRateControl