The change notification system implements an optimization to avoid extra IO that would not be necessary for some use of the items sent through the change notification system. These are known as “simple items”, they don’t have any of their innate properties like size, date, and attributes.
Clients of the change notification system that want to use the items they receive on their callbacks need to convert them to “regular items”. This can be done via IShellItem::Update(). This does the IO that the change notification system deferred. so don't do this on a UI thread.
Here is sample code that takes the item sent to the change notify listener and demonstrates the results you get on the queries and how to convert the simple to full..
FILETIME ftModified;
psi1->GetFileTime(PKEY_DateModified, &ftModified); // empty result
psi1->Update(NULL); // convert simple to full item, does IO
psi1->GetFileTime(PKEY_DateModified, &ftModified); // returns the value