Вам необходимо создать COM-объект, который реализует IShellIconOverlayIdentifier, как эта статья codeproject.
Ваш метод IsMemberOf будет выглядеть примерно так:
STDMETHODIMP YourClassThatImplementsIShellIconOverlayIdentifier::IsMemberOf(PCWSTR pwszPath,DWORD Attr)
{
if (!(Attr&FILE_ATTRIBUTE_DIRECTORY)) return S_FALSE; // Not a folder
UINT count = 0;
WIN32_FIND_DATAW wfd;
LPWSTR bufSpec = (LPWSTR) LocalAlloc(LPTR,(lstrlenW(pwszPath)+2+1)*sizeof(WCHAR));
if (bufSpec)
{
lstrcpyW(bufSpec,pwszPath);
PathAddBackslashW(bufSpec);
lstrcatW(bufSpec,L"*");
HANDLE hFind = FindFirstFileW(bufSpec,&wfd);
if (INVALID_HANDLE_VALUE!=hFind) do
{
++count;
} while( count<= 2 && FindNextFileW(hFind,&wfd) );
FindClose(hFind);
LocalFree(bufSpec);
}
return count==2 ? S_OK : S_FALSE;
}
(пустая папка содержит две специальные записи, "." и "..")