GetPropertyFromPropArray

INT64 __stdcall GetPropertyFromPropArray(
        VOID *GetPropertyCallbackContext,
        DEVPROPCOMPKEY *PropKey,
        UINT64 *PropType,
        UINT64 *BufferSize,
        UINT8 **Buffer){
  __int64 v5; 
  unsigned int v10; 
  __int64 v11; 
  __int64 v13; 
  const wchar_t *v14; 
  const wchar_t *LocaleName; 
  *(_DWORD *)PropType = 0;
  v5 = 0i64;
  *(_DWORD *)BufferSize = 0;
  v10 = -1073741275;
  *Buffer = 0i64;
  if( *(_DWORD *)GetPropertyCallbackContext )
  {
    while( 1 )
    {
      v11 = *((_QWORD *)GetPropertyCallbackContext + 1);
      if( *(_DWORD *)(v11 + 48 * v5 + 16) == PropKey->Key.pid )
      {
        v13 = *(_QWORD *)(v11 + 48 * v5) - *(_QWORD *)&PropKey->Key.fmtid.Data1;
        if( !v13 )
          v13 = *(_QWORD *)(v11 + 48 * v5 + 8) - *(_QWORD *)PropKey->Key.fmtid.Data4;
        if( !v13 && *(_DWORD *)(v11 + 48 * v5 + 20) == PropKey->Store )
        {
          v14 = *(const wchar_t **)(v11 + 48 * v5 + 24);
          LocaleName = PropKey->LocaleName;
          if( v14 == LocaleName || v14 && LocaleName && !wcsicmp(v14, LocaleName) )
            break;
        }
      }
      v5 = (unsigned int)(v5 + 1);
      if( (unsigned int)v5 >= *(_DWORD *)GetPropertyCallbackContext )
        return v10;
    }
    v10 = 0;
    *(_DWORD *)PropType = *(_DWORD *)(*((_QWORD *)GetPropertyCallbackContext + 1) + 48 * v5 + 32);
    *(_DWORD *)BufferSize = *(_DWORD *)(*((_QWORD *)GetPropertyCallbackContext + 1) + 48 * v5 + 36);
    *Buffer = *(UINT8 **)(*((_QWORD *)GetPropertyCallbackContext + 1) + 48 * v5 + 40);
  }
  return v10;
}

Referenced by:

No references.