#include #include #include int __cdecl wmain(int argc, wchar_t** argv) //int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { CoInitialize(NULL); IShellFolder* pShell = NULL; HRESULT hr = SHGetDesktopFolder(&pShell); if(pShell) { IBindCtx* ctx = NULL; pShell->QueryInterface(&ctx); std::wstring str(L"D:\\windows\\winsxs\\"); str.push_back(0); LPITEMIDLIST idList = NULL; if(SUCCEEDED(hr = pShell->ParseDisplayName(NULL, ctx, &str[0], NULL, &idList, NULL))) { IShellFolder* pWinSxs = NULL; if(SUCCEEDED(hr = pShell->BindToObject(idList, NULL, IID_IShellFolder, (PVOID*)&pWinSxs))) { IEnumIDList* pEnum = NULL; if(SUCCEEDED(hr = pWinSxs->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN, &pEnum))) { LPITEMIDLIST child = NULL; ULONG got = 0; while(SUCCEEDED(pEnum->Next(1, &child, &got)) && got) { STRRET strret = {0}; if(SUCCEEDED(hr = pWinSxs->GetDisplayNameOf(child, SHGDN_INFOLDER, &strret))) { LPWSTR name; if(SUCCEEDED(hr = StrRetToStr(&strret, child, &name))) { std::wcout << L"Found " << name << L'\n'; CoTaskMemFree(name); } } CoTaskMemFree(child); } pEnum->Release(); } pWinSxs->Release(); } CoTaskMemFree(idList); } if(ctx) { ctx->Release(); } pShell->Release(); } CoUninitialize(); return 0; }