Moin Sieppl,
das erste was mir auffällt:
Delphi-Quellcode:
if (SHGetSpecialFolderLocation(
handle, CSIDL_DRIVES, PIDL) = S_OK)
and
(SHGetDesktopFolder(PDesktop) = S_OK)
then
wenn SHGetSpecialFolderLocation erfolgreich war, und SHGetDesktopFolder fehlschlägt, wird PIDL nicht wieder freigegeben.
Da solltest Du die Struktur noch einmal überarbeiten.