ViDifCaptureIoCallbacks
char __fastcall ViDifCaptureIoCallbacks(_QWORD *a1){
__int64 v1;
_QWORD *v2;
__int64 v4;
char *v5;
__int64 v6;
VOID(__fastcall **v7)(_DEVICE_OBJECT *, _IRP *);
VOID(__fastcall *v8)(_DEVICE_OBJECT *, _IRP *);
VOID(__fastcall *v9)(_DEVICE_OBJECT *, _IRP *);
void **v10;
VOID(__fastcall **v11)(_DEVICE_OBJECT *, _IRP *);
v1 = a1[6];
v2 = *(_QWORD **)(v1 + 64);
if( !v2 )
return 0;
v2[1] = a1[12];
v4 = 28i64;
v2[2] = a1[13];
v5 = (char *)((char *)a1 - (char *)v2);
v6 = 28i64;
v2[3] = *(_QWORD *)(v1 + 8);
v7 = (VOID(__fastcall **)(_DEVICE_OBJECT *, _IRP *))(v2 + 4);
do
{
v8 = *(VOID(__fastcall **)(_DEVICE_OBJECT *, _IRP *))((char *)v7 + (_QWORD)v5 + 80);
if( v8 && v8 != IopInvalidDeviceRequest )
*v7 = v8;
++v7;
--v6;
}
while( v6 );
v9 = (VOID(__fastcall *)(_DEVICE_OBJECT *, _IRP *))a1[12];
if( v9 && v9 != IopInvalidDeviceRequest )
a1[12] = pXdvDriverStartIo;
if( a1[13] )
a1[13] = pXdvDriverUnload;
if( *(_QWORD *)(v1 + 8) )
*(_QWORD *)(v1 + 8) = pXdvAddDevice;
v10 = &off_140D41DB0;
v11 = (VOID(__fastcall **)(_DEVICE_OBJECT *, _IRP *))(a1 + 14);
do
{
if( *v11 )
{
if( *v11 != IopInvalidDeviceRequest )
*v11 = *(VOID(__fastcall **)(_DEVICE_OBJECT *, _IRP *))*v10;
}
++v11;
v10 += 4;
--v4;
}
while( v4 );
return 1;
}Referenced by:
IovAttachDeviceToDeviceStack
VfDifCaptureIoCallbacks