PiCMCreateObject

NTSTATUS __stdcall PiCMCreateObject(
        VOID *IoctlInputBuffer,
        UINT64 IoctlInputBufferSize,
        VOID *IoctlOutputBuffer,
        UINT64 IoctlOutputBufferSize,
        UINT64 *BytesUsed){
  unsigned int v5; 
  NTSTATUS Object; 
  int v8; 
  __int64 v9; 
  unsigned int v10; 
  INT64 v12; 
  INT64 v13; 
  INT64 v14; 
  _CMAPI_INPUT_OBJECT_DATA ObjectData[4]; 
  __int128 v16; 
  UINT64 ExpectedOutputSize; 
  UINT64 *v18; 

  v5 = IoctlOutputBufferSize;
  *(_DWORD *)v18 = 0;
  *(_OWORD *)ObjectData = 0i64;
  v16 = 0i64;
  ExpectedOutputSize = 0i64;
  Object = PiCMCaptureObjectInputData(
             IoctlInputBuffer,
             IoctlInputBufferSize,
             (_CMAPI_INPUT_OBJECT_DATA *)(unsigned int)BytesUsed);
  if( Object >= 0 )
  {
    if( !PiAuDoesClientHaveAccess(2ui64) )
    {
      Object = -1073741790;
LABEL_39:
      Object = PiCMReturnBasicResultData(
                 (unsigned int)Object,
                 (unsigned int)ExpectedOutputSize,
                 IoctlOutputBuffer,
                 v5,
                 v18,
                 v12,
                 v13,
                 v14);
      goto LABEL_40;
    }
    if( !(_QWORD)v16 )
      goto LABEL_38;
    if( ObjectData[1] )
      goto LABEL_38;
    if( HIDWORD(v16) )
      goto LABEL_38;
    if( !IoctlOutputBuffer )
      goto LABEL_38;
    v8 = 8;
    if( v5 < 8 )
      goto LABEL_38;
    v9 = (unsigned int)ObjectData[2];
    v10 = 0;
    if( ObjectData[2] <= 6 )
    {
      if( ObjectData[2] == 6 )
      {
        v10 = 6;
        goto LABEL_35;
      }
      v9 = (unsigned int)(ObjectData[2] - 1);
      if( ObjectData[2] == 1 )
      {
        v10 = 1;
        goto LABEL_35;
      }
      v9 = (unsigned int)(ObjectData[2] - 2);
      if( ObjectData[2] == 2 )
      {
        v10 = 2;
        goto LABEL_36;
      }
      v9 = (unsigned int)(ObjectData[2] - 3);
      if( ObjectData[2] == 3 )
      {
        v10 = 4;
        goto LABEL_36;
      }
      v9 = (unsigned int)(ObjectData[2] - 4);
      if( ObjectData[2] == 4 )
      {
        v10 = 3;
        goto LABEL_35;
      }
      if( ObjectData[2] == 5 )
      {
        v10 = 5;
        goto LABEL_35;
      }
      goto LABEL_32;
    }
    v9 = (unsigned int)(ObjectData[2] - 65537);
    if( ObjectData[2] == 65537 )
    {
      v8 = 7;
    }
    else
    {
      v9 = (unsigned int)(ObjectData[2] - 65538);
      if( ObjectData[2] != 65538 )
      {
        v9 = (unsigned int)(ObjectData[2] - 65539);
        if( ObjectData[2] == 65539 )
        {
          v8 = 9;
        }
        else
        {
          v9 = (unsigned int)(ObjectData[2] - 65540);
          if( ObjectData[2] == 65540 )
          {
            v8 = 10;
          }
          else
          {
            if( ObjectData[2] != 65541 )
              goto LABEL_32;
            v8 = 11;
          }
        }
      }
    }
    v10 = *(&stru_140CF2E80 + 608) != 0i64 ? v8 : 0;
LABEL_32:
    if( v10 )
    {
      if( v10 <= 4 || v10 > 6 )
      {
LABEL_36:
        if( Object >= 0 )
          Object = PnpCreateObject(v9, v16, v10, 0, 0i64);
        goto LABEL_39;
      }
LABEL_35:
      Object = -1073741637;
      goto LABEL_36;
    }
LABEL_38:
    Object = -1073741811;
    goto LABEL_39;
  }
LABEL_40:
  PiCMReleaseObjectInputData(ObjectData);
  return Object;
}

Referenced by:

PiCMHandleIoctl