DECLARE INTEGER WNetOpenEnum IN WIN32API ; INTEGER dwScope, ; INTEGER dwType, ; INTEGER dwUsage, ; STRING @ lpNetResource, ; INTEGER @ lphEnum DECLARE INTEGER WNetEnumResource IN WIN32API ; INTEGER hEnum, ; INTEGER @lpCount, ; STRING @lpBuffer, ; INTEGER @lpBufferSize dwScope = RESOURCE_CONTEXT dwType = RESOURCETYPE_DISK dwUsage = RESOURCEUSAGE_CONNECTABLE hEnum = 0 IF WNetOpenEnum(dwScope, dwType, dwUsage, 0, @hEnum) = 0 * it opened the enum; retrieve with WNetEnumResource nCount = 0xFFFFFFFF cBuffer = REPL(CHR(0),512) nBufSize = 512 nResult = WNetEnumResource(@hEnum, @nCount, @cBuffer, @nBufSize) * do something with the returned NETRESOURCEs in cBuffer ENDIFYou can construct a NETRESOURCE in a string; anything pointed to by the NETRESOURCE will need to be constructed off the heap, and deallocated from there. Later, you'll retrieve things from WNetEnumResource in a string buffer allocated and passed by reference; you can retrieve the things referenced by embedded pointers in a NETRESOURCE using the GetMem() and GetMemString() functions after decoding the embedded pointers into numbers using DWORDToNum(). Use the value returned in hEnum from WNetOpenEnum as the hEnum argument to WNetEnumResource(), and pass it by ref when you call WNetEnumResource, so it gets properly molested to point to the next group of things to enum.