DrvDbSetDriverInfFileMappedProperty

NTSTATUS __stdcall DrvDbSetDriverInfFileMappedProperty(
        _DRVDB_CONTEXT *pDrvDbCtx,
        WCHAR *DriverInfFileName,
        VOID *ObjectBaseKey,
        _DEVPROPKEY *PropertyKey,
        UINT64 PropertyType,
        VOID *PropertyBuffer,
        UINT64 PropertySize){
  unsigned int pid; 
  __int64 v11; 
  __int64(**i)[3]; 
  __int64(*v13)[3]; 
  __int64 v14; 
  __int64 v15; 
  __int64(**v16)[3]; 
  unsigned int v17; 
  int v18; 
  __int64 v20; 
  INT64 v21; 

  v21 = 0i64;
  pid = PropertyKey->pid;
  if( pid == 2 )
  {
    v20 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_NODE;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_NODE )
      v20 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x5008C7D4C8250077i64;
    if( !v20 )
      return -1073741790;
  }
  v11 = 0i64;
  for( i = &off_140001C60; ; i += 5 )
  {
    v13 = *i;
    if( LODWORD((**i)[2]) == pid )
    {
      v14 = (*v13)[0] - *(_QWORD *)&PropertyKey->fmtid.Data1;
      if( (*v13)[0] == *(_QWORD *)&PropertyKey->fmtid.Data1 )
        v14 = (*v13)[1] - *(_QWORD *)PropertyKey->fmtid.Data4;
      if( !v14 )
        break;
    }
    v11 = (unsigned int)(v11 + 1);
    if( (unsigned int)v11 >= 4 )
      return -1073741802;
  }
  v15 = 5 * v11;
  v16 = &off_140001C60 + v15;
  if( !v16 )
    return -1073741802;
  v17 = PropertyType;
  if( (_DWORD)PropertyType != *((_DWORD *)v16 + 2) && (_DWORD)PropertyType )
    return -1073741811;
  if( !ObjectBaseKey )
  {
    v18 = DrvDbOpenDriverInfFileRegKey((INT64 *)pDrvDbCtx, (INT64)DriverInfFileName, 2i64, 0, (INT64)&v21, 0i64);
    if( v18 < 0 )
      goto LABEL_13;
    ObjectBaseKey = (VOID *)v21;
  }
  v18 = DrvDbSetRegValueMappedProperty(
          (VOID *)v15,
          (_DRVDB_PROPERTY_REG_VALUE_MAP *)ObjectBaseKey,
          (UINT64)v16,
          (UINT8 *)v17,
          (UINT64)PropertyBuffer);
LABEL_13:
  if( v21 )
    ZwClose(v21);
  return v18;
}

Referenced by:

DrvDbDispatchDriverInfFile