PspIoRateEntryActivate
INT64 __fastcall PspIoRateEntryActivate(struct EX_RUNDOWN_REF *a1, VOID **a2, INT64 a3, BYTE *a4){
EX_RUNDOWN_REF *v5;
HANDLE v6;
EX_RUNDOWN_REF *v10;
NTSTATUS started;
void *v12;
EX_RUNDOWN_REF *v14;
UINT64 v15;
UINT64 ShareAccess;
UINT64 CreateDisposition;
UINT64 CreateOptions;
UINT64 v19;
struct _UNICODE_STRING DestinationString;
struct _IO_STATUS_BLOCK IoStatusBlock;
struct _OBJECT_ATTRIBUTES ObjectAttributes;
unsigned __int64 v23;
HANDLE Handle;
v23 = 0i64;
v5 = 0i64;
v6 = 0i64;
Handle = 0i64;
IoStatusBlock = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
DestinationString = 0i64;
if( a4 )
*a4 = 0;
if( *(_QWORD *)(a3 + 24) )
{
RtlInitUnicodeString(&DestinationString, *(PCWSTR *)(a3 + 24), a3);
LODWORD(v19) = 0;
ObjectAttributes.RootDirectory = 0i64;
LODWORD(CreateOptions) = 32;
LODWORD(CreateDisposition) = 1;
LODWORD(ShareAccess) = 7;
LODWORD(v15) = 0;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 576;
ObjectAttributes.ObjectName = &DestinationString;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
started = ZwCreateFile(
&Handle,
0x100080ui64,
&ObjectAttributes,
&IoStatusBlock,
0i64,
v15,
ShareAccess,
CreateDisposition,
CreateOptions,
0i64,
v19);
if( started < 0 )
goto LABEL_13;
v14 = IoDiskIoAttributionAllocate(a2, a2[169]);
v5 = v14;
if( !v14 )
{
started = -1073741670;
goto LABEL_13;
}
IoStartDiskIoAttributionForContext(v14);
v6 = Handle;
v10 = v5;
}
else
{
v10 = (EX_RUNDOWN_REF *)a2[169];
}
started = IoStartIoRateControl(a3, (__int64)v6, (__int64)v10, (__int64 *)&v23);
if( started < 0 )
{
v12 = (void *)v23;
}
else
{
if( a1[5].Count )
{
PspIoRateEntryDeactivate(a1);
*a4 = 1;
}
a1[5].Count = v23;
a1[3].Count = 0i64;
a1[6].Count = (unsigned __int64)v5;
v5 = 0i64;
_InterlockedExchange64((volatile __int64 *)&a1[4], 0i64);
v12 = 0i64;
started = 0;
}
if( v5 )
{
IoStopDiskIoAttributionForContext((UINT64)v5);
IoDiskIoAttributionDereference(v5);
}
if( v12 )
IoStopIoRateControl(v12);
LABEL_13:
if( Handle )
ZwClose(Handle);
return(unsigned int)started;
}Referenced by:
PspSetJobIoRateControl
PspSetJobIoRateControlForVolume