DrvDbSetDriverPackageMappedProperty

NTSTATUS __stdcall DrvDbSetDriverPackageMappedProperty(
        _DRVDB_CONTEXT *pDrvDbCtx,
        WCHAR *DriverPackageId,
        VOID *ObjectBaseKey,
        _DEVPROPKEY *PropertyKey,
        UINT64 PropertyType,
        VOID *PropertyBuffer,
        UINT64 PropertySize){
  unsigned int pid; 
  WCHAR *v10; 
  PVOID v12; 
  unsigned int v13; 
  _DEVPROPKEY **i; 
  _DEVPROPKEY *v15; 
  int v16; 
  __int64 v17; 
  _DEVPROPKEY **v18; 
  unsigned int v19; 
  int v20; 
  WCHAR *v21; 
  int v22; 
  _DWORD *v23; 
  VOID *v24; 
  _DRVDB_PROPERTY_REG_VALUE_MAP *v25; 
  NTSTATUS v26; 
  _OWORD *PoolWithTag; 
  bool v29; 
  VOID *v30; 
  int v31; 
  size_t v32; 
  char *v33; 
  VOID *v34; 
  __int64 v35; 
  __int64 v36; 
  int v37; 
  __int64 v38; 
  VOID *v39; 
  __int64 v40; 
  __int64 v41; 
  __int64 v42; 
  __int64 v43; 
  __int64 v44; 
  VOID *v45; 
  _DRVDB_PROPERTY_REG_VALUE_MAP *v46; 
  VOID *v47; 
  VOID *v48; 
  WCHAR *v49; 
  VOID *v50; 
  const wchar_t *v51; 
  VOID *v52; 
  VOID *v53; 
  VOID *v54; 
  _DRVDB_PROPERTY_REG_VALUE_MAP *v55; 
  INT64 v56; 
  INT64 v57; 
  INT64 v58; 
  INT64 v59; 
  INT64 v60; 
  UINT64 v61; 
  WCHAR SignerScore[2]; 
  int v63; 
  INT64 v64; 
  PVOID v65; 
  PVOID P; 
  UINT64 RequiredLen; 

  pid = PropertyKey->pid;
  v64 = 0i64;
  v10 = DriverPackageId;
  P = 0i64;
  v63 = 0;
  v12 = 0i64;
  *(_DWORD *)SignerScore = 0;
  v65 = 0i64;
  LODWORD(RequiredLen) = 0;
  if( pid == 2 )
  {
    v35 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_NODE;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_NODE )
      v35 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x5008C7D4C8250077i64;
    if( !v35 )
      return -1073741790;
  }
  if( pid == 18 )
  {
    v40 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_Configurable;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_Configurable )
      v40 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
    if( !v40 )
      return -1073741790;
  }
  if( pid == 29 )
  {
    v41 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_Configurations;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_Configurations )
      v41 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
    if( !v41 )
      return -1073741790;
  }
  if( pid == 30 )
  {
    v42 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_ConfigurationScopes;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_ConfigurationScopes )
      v42 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
    if( !v42 )
      return -1073741790;
  }
  if( pid == 33 )
  {
    v43 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_FamilyId;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_FamilyId )
      v43 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
    if( !v43 )
      return -1073741790;
  }
  if( pid == 40 )
  {
    v44 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_DriverPackage_Primitive;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_DriverPackage_Primitive )
      v44 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x4524B8338B5D1E6Ci64;
    if( !v44 )
      return -1073741790;
  }
  v13 = 0;
  for( i = &off_140001760; ; i += 5 )
  {
    v15 = *i;
    if( (*i)->pid == pid )
    {
      v17 = *(_QWORD *)&v15->fmtid.Data1 - *(_QWORD *)&PropertyKey->fmtid.Data1;
      if( *(_QWORD *)&v15->fmtid.Data1 == *(_QWORD *)&PropertyKey->fmtid.Data1 )
        v17 = *(_QWORD *)v15->fmtid.Data4 - *(_QWORD *)PropertyKey->fmtid.Data4;
      if( !v17 )
        break;
    }
    if( ++v13 >= 0x20 )
      return -1073741802;
  }
  v18 = &(&off_140001760)[5 * v13];
  if( !v18 )
    return -1073741802;
  v19 = PropertyType;
  if( (_DWORD)PropertyType != *((_DWORD *)v18 + 2) && (_DWORD)PropertyType )
    return -1073741811;
  if( !ObjectBaseKey )
  {
    v16 = DrvDbOpenDriverPackageRegKey((INT64 *)pDrvDbCtx, (INT64)v10, 3i64, 0, (INT64)&v64, 0i64);
    if( v16 < 0 )
      goto LABEL_31;
    v10 = DriverPackageId;
  }
  v20 = *((_DWORD *)v18 + 8);
  if( v20 )
  {
    if( v19 )
      v29 = (_DWORD)PropertySize == v20;
    else
      v29 = (_DWORD)PropertySize == 0;
    if( !v29 )
    {
      v16 = -1073741823;
      goto LABEL_31;
    }
    LODWORD(RequiredLen) = 48;
    PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x30ui64, 1111770192i64);
    if( PoolWithTag )
    {
      v30 = (VOID *)v64;
      if( ObjectBaseKey )
        v30 = ObjectBaseKey;
      v31 = RegRtlQueryValue(v30, L"Version", &v63, PoolWithTag, (__int64)&RequiredLen);
      v16 = v31;
      if( v31 == -1073741772 )
      {
        *PoolWithTag = 0i64;
        PoolWithTag[1] = 0i64;
        PoolWithTag[2] = 0i64;
      }
      else
      {
        if( v31 == -1073741789 )
        {
          v16 = -1073741595;
          goto LABEL_27;
        }
        if( v31 < 0 )
        {
LABEL_27:
          if( PoolWithTag )
            ExFreePoolWithTag(PoolWithTag, 0);
          if( v12 )
            ExFreePoolWithTag(v12, 0);
          goto LABEL_31;
        }
        if( v63 != 3 || (_DWORD)RequiredLen != 48 )
        {
          v16 = -1073741823;
          goto LABEL_27;
        }
      }
      v32 = *((_DWORD *)v18 + 8);
      v33 = (char *)PoolWithTag + *((unsigned int *)v18 + 7);
      if( v19 )
        memmove(v33, PropertyBuffer, v32);
      else
        memset(v33, 0i64, v32);
      v34 = (VOID *)v64;
      LODWORD(v57) = 48;
      if( ObjectBaseKey )
        v34 = ObjectBaseKey;
      v26 = RegRtlSetValue(v34, L"Version", 3u, PoolWithTag, v57);
LABEL_26:
      v16 = v26;
      goto LABEL_27;
    }
    goto LABEL_99;
  }
  v21 = (WCHAR *)L"Microsoft Windows";
  v22 = PropertySize;
  v23 = PropertyBuffer;
  if( PropertyKey->pid != 7 )
  {
    v24 = 0i64;
    goto LABEL_22;
  }
  v36 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&DEVPKEY_DriverPackage_SignerName.fmtid.Data1;
  if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&DEVPKEY_DriverPackage_SignerName.fmtid.Data1 )
    v36 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)DEVPKEY_DriverPackage_SignerName.fmtid.Data4;
  v24 = 0i64;
  if( v36
    || v19 != 18
    || (unsigned int)PropertySize <= 2
    || !PropertyBuffer
    || *((_WORD *)PropertyBuffer + ((unsigned __int64)(unsigned int)PropertySize >> 1) - 1)
    || (v37 = wcsicmp((const wchar_t *)PropertyBuffer, (const wchar_t *)L"Microsoft Windows"), v24 = 0i64, v37) )
  {
LABEL_22:
    if( PropertyKey->pid != 8 )
      goto LABEL_23;
    v38 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&DEVPKEY_DriverPackage_SignerScore.fmtid.Data1;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&DEVPKEY_DriverPackage_SignerScore.fmtid.Data1 )
      v38 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)DEVPKEY_DriverPackage_SignerScore.fmtid.Data4;
    if( v38 )
      goto LABEL_23;
    if( v19 == 7 )
    {
      if( v22 == 4 && v23 )
      {
        if( *v23 != 218103811 )
          goto LABEL_70;
        v48 = (VOID *)v64;
        LODWORD(v56) = 0;
        if( ObjectBaseKey )
          v48 = ObjectBaseKey;
        if( DrvDbGetDriverPackageSignerName(0i64, v21, v48, 0i64, v56, &RequiredLen) == -1073741789
          && (_DWORD)RequiredLen == 18 )
        {
          v65 = ExAllocatePoolWithTag(1ui64, 0x24ui64, 1111770192i64);
          v51 = (const wchar_t *)v65;
          if( v65 )
          {
            v52 = (VOID *)v64;
            LODWORD(v58) = 18;
            if( ObjectBaseKey )
              v52 = ObjectBaseKey;
            if( DrvDbGetDriverPackageSignerName(v50, v49, v52, (WCHAR *)v65, v58, &RequiredLen) >= 0
              && (_DWORD)RequiredLen
              && !v51[(unsigned int)(RequiredLen - 1)]
              && !wcsicmp(v51, (const wchar_t *)L"Microsoft Windows") )
            {
              v53 = (VOID *)v64;
              LODWORD(v61) = 0;
              if( ObjectBaseKey )
                v53 = ObjectBaseKey;
              LODWORD(v59) = 0;
              DrvDbSetDriverPackageMappedProperty(
                pDrvDbCtx,
                DriverPackageId,
                v53,
                (_DEVPROPKEY *)&DEVPKEY_DriverPackage_SignerName,
                v59,
                0i64,
                v61);
            }
            goto LABEL_23;
          }
LABEL_99:
          v16 = -1073741801;
          goto LABEL_31;
        }
      }
    }
    else if( !v19 )
    {
LABEL_70:
      v39 = (VOID *)v64;
      if( ObjectBaseKey )
        v39 = ObjectBaseKey;
      if( DrvDbGetDriverPackageSignerScore(pDrvDbCtx, DriverPackageId, v39, SignerScore) >= 0
        && *(_DWORD *)SignerScore == 218103811 )
      {
        v54 = (VOID *)v64;
        LODWORD(v56) = 0;
        if( ObjectBaseKey )
          v54 = ObjectBaseKey;
        if( DrvDbGetDriverPackageSignerName(v24, 0i64, v54, 0i64, v56, &RequiredLen) == -1073741275 )
        {
          v55 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)v64;
          if( ObjectBaseKey )
            v55 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)ObjectBaseKey;
          v16 = DrvDbSetRegValueMappedProperty(v24, v55, (UINT64)v18, (UINT8 *)v19, (UINT64)v23);
          if( v16 < 0 )
            goto LABEL_31;
          v47 = (VOID *)v64;
          LODWORD(v61) = 36;
          if( ObjectBaseKey )
            v47 = ObjectBaseKey;
          LODWORD(v60) = 18;
          DrvDbSetDriverPackageMappedProperty(
            pDrvDbCtx,
            DriverPackageId,
            v47,
            (_DEVPROPKEY *)&DEVPKEY_DriverPackage_SignerName,
            v60,
            (VOID *)L"Microsoft Windows",
            v61);
          goto LABEL_114;
        }
      }
    }
LABEL_23:
    v25 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)v64;
    if( ObjectBaseKey )
      v25 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)ObjectBaseKey;
    v26 = DrvDbSetRegValueMappedProperty(v24, v25, (UINT64)v18, (UINT8 *)v19, (UINT64)v23);
    PoolWithTag = P;
    v12 = v65;
    goto LABEL_26;
  }
  v45 = (VOID *)v64;
  if( ObjectBaseKey )
    v45 = ObjectBaseKey;
  if( DrvDbGetDriverPackageSignerScore(pDrvDbCtx, v10, v45, SignerScore) < 0 || *(_DWORD *)SignerScore != 218103811 )
    goto LABEL_23;
  v46 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)v64;
  if( ObjectBaseKey )
    v46 = (_DRVDB_PROPERTY_REG_VALUE_MAP *)ObjectBaseKey;
  v16 = DrvDbSetRegValueMappedProperty(v24, v46, (UINT64)v18, 0i64, 0i64);
  if( v16 != -1073741275 )
    goto LABEL_31;
LABEL_114:
  v16 = 0;
LABEL_31:
  if( v64 )
    ZwClose(v64);
  return v16;
}

Referenced by:

DrvDbDispatchDriverPackage
DrvDbSetDriverPackageMappedProperty