PiCMCreateObject

INT64 __stdcall PiCMCreateObject(
        PVOID IoctlInputBuffer,
        UINT64 IoctlInputBufferSize,
        PVOID IoctlOutputBuffer,
        UINT64 IoctlOutputBufferSize,
        UINT64 *BytesUsed){
  unsigned int v5; 
  int Object; 
  int v8; 
  __int64 v9; 
  unsigned int v10; 
  INT64 v12[2]; 
  __int128 v13; 
  UINT64 ExpectedOutputSize; 
  UINT64 *v15; 
  v5 = IoctlOutputBufferSize;
  *(_DWORD *)v15 = 0;
  *(_OWORD *)v12 = 0i64;
  v13 = 0i64;
  ExpectedOutputSize = 0i64;
  Object = PiCMCaptureObjectInputData(
             (UINT64)IoctlInputBuffer,
             IoctlInputBufferSize,
             (unsigned int)BytesUsed,
             (INT64)v12);
  if( Object >= 0 )
  {
    if( !PiAuDoesClientHaveAccess(2ui64) )
    {
      Object = -1073741790;
LABEL_39:
      Object = PiCMReturnBasicResultData(
                 (unsigned int)Object,
                 (unsigned int)ExpectedOutputSize,
                 IoctlOutputBuffer,
                 v5,
                 v15);
      goto LABEL_40;
    }
    if( !(_QWORD)v13 )
      goto LABEL_38;
    if( HIDWORD(v12[0]) )
      goto LABEL_38;
    if( HIDWORD(v13) )
      goto LABEL_38;
    if( !IoctlOutputBuffer )
      goto LABEL_38;
    v8 = 8;
    if( v5 < 8 )
      goto LABEL_38;
    v9 = LODWORD(v12[1]);
    v10 = 0;
    if( SLODWORD(v12[1]) <= 6 )
    {
      if( LODWORD(v12[1]) == 6 )
      {
        v10 = 6;
        goto LABEL_35;
      }
      v9 = (unsigned int)(LODWORD(v12[1]) - 1);
      if( LODWORD(v12[1]) == 1 )
      {
        v10 = 1;
        goto LABEL_35;
      }
      v9 = (unsigned int)(LODWORD(v12[1]) - 2);
      if( LODWORD(v12[1]) == 2 )
      {
        v10 = 2;
        goto LABEL_36;
      }
      v9 = (unsigned int)(LODWORD(v12[1]) - 3);
      if( LODWORD(v12[1]) == 3 )
      {
        v10 = 4;
        goto LABEL_36;
      }
      v9 = (unsigned int)(LODWORD(v12[1]) - 4);
      if( LODWORD(v12[1]) == 4 )
      {
        v10 = 3;
        goto LABEL_35;
      }
      if( LODWORD(v12[1]) == 5 )
      {
        v10 = 5;
        goto LABEL_35;
      }
      goto LABEL_32;
    }
    v9 = (unsigned int)(LODWORD(v12[1]) - 65537);
    if( LODWORD(v12[1]) == 65537 )
    {
      v8 = 7;
    }
    else
    {
      v9 = (unsigned int)(LODWORD(v12[1]) - 65538);
      if( LODWORD(v12[1]) != 65538 )
      {
        v9 = (unsigned int)(LODWORD(v12[1]) - 65539);
        if( LODWORD(v12[1]) == 65539 )
        {
          v8 = 9;
        }
        else
        {
          v9 = (unsigned int)(LODWORD(v12[1]) - 65540);
          if( LODWORD(v12[1]) == 65540 )
          {
            v8 = 10;
          }
          else
          {
            if( LODWORD(v12[1]) != 65541 )
              goto LABEL_32;
            v8 = 11;
          }
        }
      }
    }
    v10 = PiDrvDbCtx != 0 ? v8 : 0;
LABEL_32:
    if( v10 )
    {
      if( v10 <= 4 || v10 > 6 )
      {
LABEL_36:
        if( Object >= 0 )
          Object = PnpCreateObject(v9, v13, v10, 0, 0i64);
        goto LABEL_39;
      }
LABEL_35:
      Object = -1073741637;
      goto LABEL_36;
    }
LABEL_38:
    Object = -1073741811;
    goto LABEL_39;
  }
LABEL_40:
  PiCMReleaseObjectInputData((INT64)v12);
  return(unsigned int)Object;
}

Referenced by:

No references.