完全PIDLを使用して IShellFolder.GetAttributesOf で属性を取得すると、正しく属性値が取得できないことがあります。
完全PIDLではなく相対PIDLを利用して一つ上位のフォルダのIShellFolderのGetAttributesOf メソッドを利用して属性を取得すると正しい属性値が取得できるようです。
もしくはSHGetFileInfo() APIを利用すれば、完全PIDLから正しい属性値が取得できます。
IShellFolder.ParseDisplayName() メソッドでPIDLを取得し、取得したPIDLを利用して、IShellFolder.GetAttributesOf() を呼び出すと正しい属性が取得できないことがあります。
この場合は、IShellFolder.ParseDisplayName() メソッド呼び出し時の第6引数のOutを利用すると正しい属性値が取得できます。
または、一つ上位のフォルダのIShellFolderを取得し、そのIShellFolderのParseDisplayName()メソッドに相対パスを与えて取得したPIDLを利用してIShellFolder.GetAttributesOf() を呼び出すと正しい属性値が取得できますが、ParseDisplayName()メソッドに相対パスを与えるのは本来の仕様では許可されていないため、あまりお勧めできません。
上記の方法で正しく属性を取得できるようになった場合、大きなサイズ(100MB以上)、ファイル数の多い(1000ファイル以上)のZIPファイルの属性取得で時間がかかる場合があります。もしくはタイムアウトして例外が戻る場合があります。
詳細は「サイズの大きいZIPファイルの属性をIShellFolder.GetAttributesOf やSHGetFileInfo で取得すると時間がかかる」の記事を参照してください。