PspIoRateEntryActivate
VOID __fastcall PspIoRateEntryActivate(_PS_IO_CONTROL_ENTRY *IoControlEntry, _EJOB *Job){
__int64 v2;
_BYTE *v3;
void *v5;
void *v6;
_BYTE *v7;
_JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2 *v8;
void *v10;
VOID *v11;
VOID *v12;
UINT64 v13;
UINT64 ShareAccess;
UINT64 CreateDisposition;
UINT64 CreateOptions;
UINT64 v17;
UINT64 VolumeKey;
_UNICODE_STRING DestinationString;
_IO_STATUS_BLOCK IoStatusBlock;
_OBJECT_ATTRIBUTES ObjectAttributes;
PVOID RateControl;
VOID *Handle;
VolumeKey = 0i64;
RateControl = 0i64;
v5 = 0i64;
v6 = 0i64;
v7 = v3;
Handle = 0i64;
v8 = (_JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2 *)v2;
IoStatusBlock = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
DestinationString = 0i64;
if( v3 )
*v3 = 0;
if( *(_QWORD *)(v2 + 24) )
{
RtlInitUnicodeString(&DestinationString, *(PCWSTR *)(v2 + 24));
LODWORD(v17) = 0;
ObjectAttributes.RootDirectory = 0i64;
LODWORD(CreateOptions) = 32;
LODWORD(CreateDisposition) = 1;
LODWORD(ShareAccess) = 7;
LODWORD(v13) = 0;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 576;
ObjectAttributes.ObjectName = &DestinationString;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( ZwCreateFile(
&Handle,
0x100080ui64,
&ObjectAttributes,
&IoStatusBlock,
0i64,
v13,
ShareAccess,
CreateDisposition,
CreateOptions,
0i64,
v17) < 0 )
goto LABEL_13;
v12 = IoDiskIoAttributionAllocate(Job, *((VOID **)Job + 169));
v5 = v12;
if( !v12 )
goto LABEL_13;
IoStartDiskIoAttributionForContext(v12);
v6 = Handle;
v10 = v5;
}
else
{
v10 = (void *)*((_QWORD *)Job + 169);
}
if( IoStartIoRateControl(v8, v6, v10, &RateControl, &VolumeKey) < 0 )
{
v11 = RateControl;
}
else
{
if( IoControlEntry->IoControl )
{
PspIoRateEntryDeactivate(IoControlEntry);
*v7 = 1;
}
IoControlEntry->IoControl = RateControl;
IoControlEntry->VolumeKey = VolumeKey;
IoControlEntry->VolumeIoAttribution = v5;
v5 = 0i64;
_InterlockedExchange64((volatile __int64 *)&IoControlEntry->Rundown, 0i64);
v11 = 0i64;
}
if( v5 )
{
IoStopDiskIoAttributionForContext(v5);
IoDiskIoAttributionDereference(v5);
}
if( v11 )
IoStopIoRateControl(v11);
LABEL_13:
if( Handle )
ZwClose((_HANDLE)Handle);
}Referenced by:
PspSetJobIoRateControl
PspSetJobIoRateControlForVolume