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