PiSwDispatch
NTSTATUS __stdcall PiSwDispatch(_DEVICE_OBJECT *DeviceObject, _IRP *Irp){
_IO_STACK_LOCATION *CurrentStackLocation;
unsigned int Status;
unsigned __int8 MajorFunction;
_IRP *v8;
_PI_SWD_OBJECT *FsContext2;
_PI_SWD_OBJECT *v10;
CurrentStackLocation = Irp->Tail.CurrentStackLocation;
Status = Irp->IoStatus.Status;
MajorFunction = CurrentStackLocation->MajorFunction;
if( !CurrentStackLocation->MajorFunction )
{
CurrentStackLocation->FileObject->FsContext2 = 0i64;
Status = PiAuDoesClientHaveAccess(0x80ui64) == 0 ? 0xC0000022 : 0;
Irp->IoStatus.Status = Status;
LABEL_12:
v8 = Irp;
goto LABEL_13;
}
if( MajorFunction != 14 )
{
if( MajorFunction == 2 )
{
FsContext2 = (_PI_SWD_OBJECT *)CurrentStackLocation->FileObject->FsContext2;
if( FsContext2 )
{
PiSwDeviceDereference(FsContext2);
CurrentStackLocation->FileObject->FsContext2 = 0i64;
}
}
else
{
if( MajorFunction != 18 )
return Status;
v10 = (_PI_SWD_OBJECT *)CurrentStackLocation->FileObject->FsContext2;
if( v10 )
PiSwIrpCleanup(v10);
}
Status = 0;
Irp->IoStatus.Status = 0;
goto LABEL_12;
}
switch( *(_DWORD *)&CurrentStackLocation->Parameters.FileAttributes )
{
case 0x470400:
return PiSwIrpStartCreate(Irp);
case 0x470404:
return PiSwIrpPropertySet(Irp);
case 0x470408:
return PiSwIrpInterfaceRegister(Irp);
case 0x47040C:
return PiSwIrpInterfaceSetState(Irp);
}
if( *(_DWORD *)&CurrentStackLocation->Parameters.FileAttributes != 4654096 )
{
if( *(_DWORD *)&CurrentStackLocation->Parameters.FileAttributes == 4654100 )
return PiSwIrpSetLifetime(Irp);
v8 = Irp;
if( *(_DWORD *)&CurrentStackLocation->Parameters.FileAttributes == 4654104 )
return PiSwIrpGetLifetime(Irp);
Status = -1073741637;
Irp->IoStatus.Status = -1073741637;
LABEL_13:
IofCompleteRequest(v8, 0);
return Status;
}
return PiSwIrpInterfacePropertySet(Irp);
}Referenced by:
No references.