VerifierIoSetCompletionRoutineEx
NTSTATUS __stdcall VerifierIoSetCompletionRoutineEx(
_DEVICE_OBJECT *DeviceObject,
_IRP *Irp,
INT64 *CompletionRoutine,
_DEVICE_OBJECT *a4,
_IRP *a5,
VOID *a6,
VOID *Context,
UINT8 InvokeOnSuccess,
UINT8 InvokeOnError,
UINT8 InvokeOnCancel){
NTSTATUS v15;
_OWORD *PoolWithTagPriority;
_IO_STACK_LOCATION *CurrentStackLocation;
_OWORD *v18;
char CallingAddress;
char v20;
char v21;
VOID *retaddr;
if( VfFaultsInjectResourceFailure(0i64) )
return -1073741670;
v21 = (char)Context;
v20 = (char)a6;
CallingAddress = (char)a5;
v15 = ((__int64(__fastcall *)(_DEVICE_OBJECT *, _IRP *, INT64 *, _DEVICE_OBJECT *, char, char, char))pXdvIoSetCompletionRoutineEx)(
DeviceObject,
Irp,
CompletionRoutine,
a4,
CallingAddress,
v20,
v21);
if( v15 >= 0 )
{
PoolWithTagPriority = VeAllocatePoolWithTagPriority(
(POOL_TYPE)640,
0x20ui64,
0x73556656ui64,
HighPoolPriority,
retaddr);
if( PoolWithTagPriority )
{
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
v18 = CurrentStackLocation[-1].Context;
*PoolWithTagPriority = *v18;
PoolWithTagPriority[1] = v18[1];
CurrentStackLocation[-1].Context = PoolWithTagPriority;
VfUtilFreePoolCheckIRQL(v18);
}
}
return v15;
}Referenced by:
No references.