PiSwDispatch
NTSTATUS __stdcall PiSwDispatch(DEVICE_OBJECT *DeviceObject, IRP *Irp){
char *v2;
NTSTATUS v4;
char v5;
_IRP *v8;
void *v9;
__int64 v10;
v2 = (char *)*((_QWORD *)Irp + 23);
v4 = *((_DWORD *)Irp + 12);
v5 = *v2;
if( !*v2 )
{
*(_QWORD *)(*((_QWORD *)v2 + 6) + 32i64) = 0i64;
v4 = PiAuDoesClientHaveAccess(0x80ui64) == 0 ? 0xC0000022 : 0;
*((_DWORD *)Irp + 12) = v4;
LABEL_12:
v8 = Irp;
goto LABEL_13;
}
if( v5 != 14 )
{
if( v5 == 2 )
{
v9 = *(void **)(*((_QWORD *)v2 + 6) + 32i64);
if( v9 )
{
PiSwDeviceDereference(v9);
*(_QWORD *)(*((_QWORD *)v2 + 6) + 32i64) = 0i64;
}
}
else
{
if( v5 != 18 )
return v4;
v10 = *(_QWORD *)(*((_QWORD *)v2 + 6) + 32i64);
if( v10 )
PiSwIrpCleanup(v10);
}
v4 = 0;
*((_DWORD *)Irp + 12) = 0;
goto LABEL_12;
}
switch( *((_DWORD *)v2 + 6) )
{
case 0x470400:
return PiSwIrpStartCreate(Irp);
case 0x470404:
return PiSwIrpPropertySet(Irp);
case 0x470408:
return PiSwIrpInterfaceRegister(Irp);
case 0x47040C:
return PiSwIrpInterfaceSetState(Irp);
}
if( *((_DWORD *)v2 + 6) != 4654096 )
{
if( *((_DWORD *)v2 + 6) == 4654100 )
return PiSwIrpSetLifetime(Irp);
v8 = Irp;
if( *((_DWORD *)v2 + 6) == 4654104 )
return PiSwIrpGetLifetime(Irp);
v4 = -1073741637;
*((_DWORD *)Irp + 12) = -1073741637;
LABEL_13:
IofCompleteRequest(v8, 0);
return v4;
}
return PiSwIrpInterfacePropertySet(Irp);
}Referenced by:
No references.