PiCMDeleteObject
NTSTATUS __stdcall PiCMDeleteObject(
VOID *IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
VOID *IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
HPNPOPCTX *v5;
unsigned int v6;
HPNPOPCTX *v8;
int v9;
int v10;
unsigned int v11;
INT64 v12;
INT64 v14;
_CMAPI_INPUT_OBJECT_DATA v15[4];
INT64 v16[2];
UINT64 ExpectedOutputSize;
HPNPOPCTX *hPnpOpCtx;
v5 = hPnpOpCtx;
v6 = IoctlOutputBufferSize;
ExpectedOutputSize = 0i64;
*hPnpOpCtx = 0;
v8 = 0i64;
*(_OWORD *)v15 = 0i64;
hPnpOpCtx = 0i64;
*(_OWORD *)v16 = 0i64;
v9 = PiCMCaptureObjectInputData(
IoctlInputBuffer,
IoctlInputBufferSize,
(_CMAPI_INPUT_OBJECT_DATA *)(unsigned int)BytesUsed);
if( v9 >= 0 )
{
if( !PiAuDoesClientHaveAccess(2ui64) )
{
v9 = -1073741790;
LABEL_41:
v9 = PiCMReturnBasicResultData(
(unsigned int)v9,
(unsigned int)ExpectedOutputSize,
IoctlOutputBuffer,
v6,
(UINT64 *)v5,
v14,
*(INT64 *)v15,
*(INT64 *)&v15[2]);
goto LABEL_42;
}
if( !v16[0] )
goto LABEL_40;
if( v15[1] )
goto LABEL_40;
if( HIDWORD(v16[1]) )
goto LABEL_40;
if( !IoctlOutputBuffer )
goto LABEL_40;
v10 = 8;
if( v6 < 8 )
goto LABEL_40;
v11 = 0;
if( v15[2] <= 6 )
{
switch( v15[2] )
{
case 6:
v11 = 6;
goto LABEL_35;
case 1:
v11 = 1;
goto LABEL_35;
case 2:
v11 = 2;
goto LABEL_36;
case 3:
v11 = 4;
goto LABEL_36;
case 4:
v11 = 3;
goto LABEL_35;
case 5:
v11 = 5;
goto LABEL_35;
}
goto LABEL_32;
}
if( v15[2] == 65537 )
{
v10 = 7;
}
else if( v15[2] != 65538 )
{
switch( v15[2] )
{
case 65539:
v10 = 9;
break;
case 65540:
v10 = 10;
break;
case 65541:
v10 = 11;
break;
default:
goto LABEL_32;
}
}
v11 = *(&stru_140CF2E80 + 608) != 0i64 ? v10 : 0;
LABEL_32:
if( v11 )
{
if( v11 <= 4 || v11 > 6 )
{
LABEL_36:
if( v9 >= 0 )
{
v9 = PiPnpRtlBeginOperation(&hPnpOpCtx);
if( v9 >= 0 )
v9 = PnpDeleteObject(v12, v16[0], v11);
v8 = hPnpOpCtx;
}
goto LABEL_41;
}
LABEL_35:
v9 = -1073741637;
goto LABEL_36;
}
LABEL_40:
v9 = -1073741811;
goto LABEL_41;
}
LABEL_42:
PiCMReleaseObjectInputData(v15);
if( v8 )
PiPnpRtlEndOperation(v8);
return v9;
}Referenced by:
PiCMHandleIoctl