private static IntPtr?_GetHBitmapThumbnail(string fileName, int width, int height, ThumbnailOptions options) { const int HR_OK = 0; var nativeShellItem = Shell32.CreateItemFromName(fileName); if (nativeShellItem == null) { return(null); } int hr; IntPtr hBitmap; try { var nativeSize = new NativeSize { Width = width, Height = height }; hr = ((IShellItemImageFactory)nativeShellItem) .GetImage(nativeSize, options, out hBitmap); } finally { Marshal.ReleaseComObject(nativeShellItem); } if (hr != HR_OK) { Log().Information("GetImage for {FileName} failed with {HRESULT}", fileName, hr); return(null); } return(hBitmap); }