IShellFolder :: GetAttributesOf返回无法识别的SFGAOF值

时间:2013-11-12 13:21:52

标签: windows winapi visual-c++ visual-studio-2008

我试图找出虚拟shell文件夹中的LPITEMIDLIST项是文件还是其他文件夹。我正在使用IShellFolder::GetAttributesOf的电话 在Windows 7中,它可以正常工作,返回的代码可以找到它们here。但是在Windows XP上,uAttrvalue = 1342177378,目录为0x50000062,文件为1073741922(0x40000062),我在SFGAO列表中找不到。 我只是称之为:

hr = psfVobj->GetAttributesOf(1, (LPCITEMIDLIST *) &pidlItems, &uAttr);

hr = S_OK //so the function call completed with no errors

1 个答案:

答案 0 :(得分:2)

SFGAO是一个位掩码,它一次可以包含多个值。

0x50000062是二进制1010000000000000000000001100010,其中包含:

  

SFGAO_CANMOVE   0x00000002   可以移动指定的项目。

     

SFGAO_CANDELETE   0x00000020   可以删除指定的项目。

     

SFGAO_HASPROPSHEET   0x00000040   指定的项目有属性表。

     

SFGAO_FILESYSANCESTOR   0x10000000处   指定的文件夹是文件系统文件夹或包含至少一个作为文件系统(SFGAO_FILESYSTEM)文件夹的子孙(子,孙或更高版本)。

     

SFGAO_FILESYSTEM   0x40000000之后   指定的文件夹或文件是文件系统的一部分(即,它们是文件,目录或根目录)。可以假定已解析的项名称是有效的Win32文件系统路径。这些路径可以是UNC或基于驱动器号的。

0x40000062是二进制1000000000000000000000001100010,其中包含:

  

SFGAO_CANMOVE   0x00000002

     

SFGAO_CANDELETE   0x00000020

     

SFGAO_HASPROPSHEET   0x00000040

     

SFGAO_FILESYSTEM   0x40000000

这意味着目录报告SFGAO_FILESYSANCESTOR而文件不是,这是有道理的,因为文件不是文件系统的祖先。