写了一个命名空间扩展来虚拟磁盘,用的是default view,在xp上运行正常,但是到win7(32,64bits)上,创建view的API总是返回0x80070002,ERROR_FILE_NOT_FOUND。API原型为:HRESULT SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv);这个API既没有让传入文件路径和注册表路径等参数,失败提示却是ERROR_FILE_NOT_FOUND,网上搜了几天还是解决不了,MS真是太邪恶了,要是能看这个API的实现没准几分钟就明白什么回事。望达人赐教!
{
if (!pcsfv || SIZEOF(*pcsfv)!=pcsfv->cbSize)
{
return E_INVALIDARG;
} CDefView *pdsv = new CDefView(pcsfv->_pshf, pcsfv->psfvcb, pcsfv->psvOuter);
if (pdsv)
{
*ppsv = pdsv;
return NOERROR;
}
return E_OUTOFMEMORY; // error
}只要参数正确,new一个类返回几乎不会失败,而且也没有ERROR_FILE_NOT_FOUND这样的返回值,不知道到了win7这个实现变成怎么样。我的感觉是缺少系统文件或者某项注册表项缺失,或者还有可能跟windows正版验证有关系?