CmSetInstallerClassMappedPropertyFromRegProp

NTSTATUS __stdcall CmSetInstallerClassMappedPropertyFromRegProp(
        HPNPCTX *hPnpCtx,
        WCHAR *ClassGuid,
        VOID *ObjectBaseKey,
        _DEVPROPKEY *PropertyKey,
        UINT64 PropertyType,
        UINT8 *PropertyBuffer,
        UINT64 PropertySize){
  unsigned int pid; 
  DEVPROPKEY **v8; 
  int *v9; 
  unsigned int v13; 
  int v14; 
  DEVPROPKEY *v15; 
  DEVPROPKEY **v16; 
  __int64 v17; 
  int v19; 
  INT64 v20; 
  int v21; 
  int v22; 
  INT64 CmRegPropType; 
  UINT8 *v24; 
  INT64 v25; 
  UINT64 v26; 
  int v27; 

  pid = PropertyKey->pid;
  v8 = &CmClassRegPropMap;
  v9 = 0i64;
  v27 = 0;
  v13 = 0;
  v14 = 1;
  do
  {
    v15 = *v8;
    v16 = v8;
    if( pid == (*v8)->pid )
    {
      v17 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v15->fmtid.Data1;
      if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v15->fmtid.Data1 )
        v17 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v15->fmtid.Data4;
      if( !v17 )
        break;
    }
    ++v13;
    v8 += 3;
    v16 = 0i64;
  }
  while( v13 < 9 );
  if( !v16 )
    return -1073741264;
  v19 = *((_DWORD *)v16 + 2);
  v20 = *((unsigned int *)v16 + 3);
  if( (_DWORD)PropertyType != v19 )
  {
    if( (_DWORD)PropertyType == 25 )
    {
      if( v19 != 18 )
        return -1073741811;
    }
    else if( (unsigned int)PropertyType >= 2 )
    {
      return -1073741811;
    }
  }
  v21 = *((_DWORD *)v16 + 4);
  if( (_DWORD)v20 == 25 )
    return -1073741637;
  if( (_DWORD)v20 == 27 )
  {
    if( PropertyBuffer )
    {
      if( !(_DWORD)PropertySize )
        return -1073741811;
      if( *PropertyBuffer != 0xFF )
      {
        if( *PropertyBuffer )
          return -1073741811;
        v14 = 0;
      }
      v27 = v14;
      v9 = &v27;
      v22 = 4;
    }
    else
    {
      v22 = 0;
    }
    LODWORD(v25) = v22;
    v20 = 27i64;
    v24 = (UINT8 *)v9;
  }
  else
  {
    LODWORD(v25) = PropertyBuffer != 0i64 ? PropertySize : 0;
    v24 = PropertyBuffer;
  }
  LODWORD(CmRegPropType) = v21;
  return CmSetInstallerClassRegProp(hPnpCtx, ClassGuid, ObjectBaseKey, v20, CmRegPropType, v24, v25, v26);
}

Referenced by:

CmSetInstallerClassMappedProperty