AFAIK on vista we must implement property handler. I have implemented simple
Property Handler in ATL (using VS2005). The class implements interfaces
IInitializeWithFile, IPropertyStore and IPropertyStoreCapabilities. After I
have registered property schema with PSRegisterPropertySchema() I was able to
select my column in column selection dialog box. Column doesn't contain
values although, but so far so good. For test purposes my column handler
IPropertyStore::GetValue returns hard coded string. To verify that property
handler works I have registered my CLSID to some file extension under key:
HKEY_LM\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlers\.xdspec (Default) = {MY_CLSID}
I can see that property handler works fine, hard coded string is shown for
files with extension .xdspec, but my goal is show it for all files. I am
trying to register it with '*' and AllFileSystemObjects with no success. In
process monitor (sysinternal tool) I have verified that system (propsys.dll)
uses RegOpenKeyEx() for accessing of HKEY above with appended file extension,
so system doesn't evaluate "file classes" of the file, that’s reason why
AllFileSystemObjects doesn’t work.
My properties are similar to file system properties like
System.FileAttributes. They are not related to file type/extension, but they
are properties of each file (with different extensions) stored on mapped
drive. Note that I don't want to implement special shell namespace, because
it would counterwork the whole file system redirector concept.
Can I somehow register property handler, so it is called for each file?
Do you have any other hint?
Thanks in advance.
--xddev
This is a quick note to let you know that I am performing research on this
issue and will get back to you as soon as possible. I appreciate your
patience.
Sincerely,
Walter Wang (waw...@online.microsoft.com, remove 'online.')
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications. If you are using Outlook Express, please make sure you clear the
check box "Tools/Options/Read: Get 300 headers at a time" to see your reply
promptly.
Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Sorry for the delay. I've been consulting your question with product team.
Here's the information so far:
<quote>
Properties are not specific to any item type. They are registered globally
to the system.
It is not possible to register a property handler for all files. There is a
one to one relationship between file extension and handler CLSID.
<quote>
Regards,
Walter Wang (waw...@online.microsoft.com, remove 'online.')
Microsoft Online Community Support
==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
Thank you for your effort.
We can hardly explain our customers that something what was possible on XP
is not possible on vista. They will think that we are unable to do it. Do you
think that opening of MSDN incident ticket can help us? Maybe support
engineer can suggest some workaround.
My thoughts are very ugly like hooking of property system API, concretely
the PSLookupPropertyHandlerCLSID() function. When it fails it means that file
type has no property handler, so we return our one. In case of success we can
probably wrap existing property handler by one created by
PSCreateDelayedMultiplexPropertyStore() API, which would combine our property
store and wrapped property store. The question is how hard would be hooking
of API on vista. I guess that code pages of loaded module are kept in
consistency with file by some vista security feature. I am sure that
restricted token by UAC cannot modify code pages, so it would need some
cooperation of service running in session 0, so solution becomes to be very
difficult.
Maybe we can somehow use temporary property store (see GETPROPERTYSTOREFLAGS
Constants). We can register for SHChangeNotify() changes in our DLL which is
loaded into explorer process context and write properties into temporary
property store on the SHCNE_UPDATEDIR event. In all cases it needs some
research how temporary property store works. I have no idea right now.
Other hacking solution is register property schema, so user can add column
by standard way, and fill it in message hook procedure registered by
SetWindowsHookEx(). All ways are quite expensive for research with risky
result because of UAC.
Thanks in advance for some suggests.
--xddev
I'm not sure if hooking property system API is supported or not. One
supported way to achieve your objective is to implement a shell folder:
<quote>
If they're implementing a shell folder, they may be able to override
IShellItem2::GetPropertyStore (or perhaps IShellFolder::BindToObject,
depending on how the binding is plumbed) and add their own custom property
store to the property store returned by creating a MUX
(PSCreateMultiplexPropertyStore); this is how the Shell FS folder
implementation exposes file system properties like System.Size and
System.DateModified, aggregated with the per-item properties exposed by the
item's filetype-specific property handler.
</quote>
However, this might not work for your scenario since your objective is to
let explorer show additional properties.
Please feel free to open a MSDN support incident for it.
I'm facing exactly the same problem: Showing additional file attributes of
a remote file system on vista. Have you found a workaround?
Thanks!
--
h.wulff
>• Problem - IColumnHandler no longer works on Vista
>• Environment - Vista
>• Root Cause (if known) – This has been replaced by the Property System
>• Resolution – Implement a namespace extension or use IconOverlays.
>I know that neither of these are easy or equivalent solutions.
>If you have any suggestions about how you would the Property System to
>change in the future, feel free to let me know and I forward your feedback
>to the appropriate group. I know that you are not the only ones who have >encountered this issue.
Other quotation from my private communication with support engineer:
>The only supported alternatives I can propose are implementing you own >namespace extension or IconOverlays.
>
>Your scenario is not the only scenario that extending a files
>properties would be useful.
>I will file a DCR for the next version of Windows, for the
>extended functionality of the property system.
>Beyond that there is little else I can help with.
>I’m sorry you had to open a case to find out what you already knew.
So it seems that there is not legal way how to add column for all files on
mapped drive. It makes you consider hacking like hooking of COM vtable or
Property System API, hooking of windows messages (LVM_XXX), ...
Good luck!
-xddev