Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8300173

Handle E_PENDING result for IExtractIconW::GetIconLocation

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4 P4
    • tbd
    • 17
    • client-libs

      When IExtractIconW::GetIconLocation [1] is used with GIL_ASYNC flag, it can return E_PENDING.

      The usage of GIL_ASYNC is the reason why the drives lost their custom icons [2]. If I remove the GIL_ASYNC flag, a customised icon is returned.

      In Remarks section [3], the documentation for GetIconLocation says:
      "When a client sets the GIL_ASYNC flag in uFlags and receives E_PENDING as a return value, it typically creates a background thread to extract the icon. It calls GetIconLocation from that thread, without the GIL_ASYNC flag, to retrieve the icon location. It then calls IExtractIcon::Extract to extract the icon. Returning E_PENDING implies that the object is free threaded. In other words, it can safely be called concurrently by multiple threads."

      [1] https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-iextracticonw-geticonlocation
      [2] https://github.com/openjdk/jdk/pull/380#issuecomment-704590746
      [3] https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-iextracticonw-geticonlocation#remarks

            aivanov Alexey Ivanov
            aivanov Alexey Ivanov
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: