It looks like iTunes can join the mega-GDI-resource-leak club:

Congratulations (?)


Some people might call that a memory leak, Notepad++. I'll try version 5.7: let's hope it's better even if it doesn't make any specific promises about this.
First time I've seen that one, so not an often occurrence.SourceThat's with driver version 1.3.0.214, the latest version available for download at time of writing.
Windows Driver Foundation - User-mode Driver Framework Host Process
Summary
Driver host process timeout.
Date
02/02/2010 8:40 AM
Status
Report sent
Description
The Windows User-Mode Driver Framework detected that a driver host-process did not complete a critical operation within the allowed timeout period.
This report contains information about the process and the drivers running within and will be used to improve the quality of these drivers.
Problem signature
Problem Event Name: WUDFHostProblem
EventClass: HostProblem
Problem: HostTimeout
DetectedBy: 2
UMDFVersion: 6.1.7600.16385. (win7_rtm.090713-1255)
ExitCode: 103
Operation: 0
Message: 6
Status: ffffffff
HardwareId: USB\VID_147E&PID_2016&REV_0001
OS Version: 6.1.7600.2.0.0.256.1
Locale ID: 2057
Extra information about the problem
Bucket ID: 4
When the original provider of the medium is responsible for freeing the medium, the provider calls ReleaseStgMedium, specifying the medium and the appropriate IUnknown pointer as the punkForRelease structure member. Depending on the type of storage medium being freed, one of the following actions is taken, followed by a call to the IUnknown::Release method on the specified IUnknown pointer.(My emphasis, irrelevant parts of table omitted)
Medium ReleaseStgMedium Action TYMED_ISTREAM Calls IStream::Release.
"This is a known regression in Windows 7 in the NTFS file system. It occurs when doing a superceding rename over a file that has an atomic oplock on it (atomic oplocks are a new feature in Windows 7). The indexer uses atomic oplocks which is why it helped when you disabled the indexer. Explorer also uses atomic oplocks which is why you are still seeing the issue. When this occurs STATUS_FILE_CORRUPT is incorrectly returned and the volume is marked "dirty" which is a signal to the system that chkdsk needs to be run. No actual corruption has occured.
Neal Christiansen
NTFS Development Lead"
I made the relevant bit a bit more prominent.
- ppvObject [out]
The address of a pointer variable that receives the interface pointer requested in the riid parameter. Upon successful return, *ppvObject contains the requested interface pointer to the object. If the object does not support the interface, *ppvObject is set to NULL.
#define COM_QI_BEGIN() HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid,void ** ppvObject) { if (ppvObject == NULL) return E_INVALIDARG;This expands to:
#define COM_QI_ENTRY(IWhat) { if (iid == IID_##IWhat) {IWhat * temp = this; temp->AddRef(); * ppvObject = temp; return S_OK;} }
#define COM_QI_END() return E_NOINTERFACE; }
COM_QI_BEGIN()
COM_QI_ENTRY(IUnknown)
COM_QI_ENTRY(IDataObject)
COM_QI_END()
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid,void ** ppvObject)Does that look like it sets *ppvObject to NULL on failure?
{
if (ppvObject == NULL) return E_INVALIDARG;
{ if (iid == IID_IUnknown) {IUnknown * temp = this; temp->AddRef(); * ppvObject = temp; return S_OK;} }
{ if (iid == IID_IDataObject) {IDataObject * temp = this; temp->AddRef(); * ppvObject = temp; return S_OK;} }
return E_NOINTERFACE;
}
