Something went wrong. Try again.
Reactos
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677#include <windows.h>#include <stdio.h>
DWORD debug_shift = 0;
#define INC_SHIFT ++debug_shift;#define DEC_SHIFT --debug_shift;#define PRT_SHIFT do { DWORD cur = 0; for (; cur < debug_shift; ++cur) printf("\t"); } while (0);
void np_enum(NETRESOURCEW * resource){ DWORD ret; HANDLE handle; DWORD size = 0x1000; NETRESOURCEW * out; BOOL check = FALSE;
if (resource && resource->lpRemoteName) check = TRUE;
ret = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, resource, &handle); if (ret != WN_SUCCESS) return;
out = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); if (!out) { WNetCloseEnum(handle); return; }
INC_SHIFT
if (check) { printf("Called with lpRemoteName not null, current value: %S\n", resource->lpRemoteName); }
do { DWORD count = -1;
ret = WNetEnumResource(handle, &count, out, &size); if (ret == WN_SUCCESS || ret == WN_MORE_DATA) { NETRESOURCEW * current;
current = out; for (; count; count--) { PRT_SHIFT; printf("lpRemoteName: %S\n", current->lpRemoteName);
if ((current->dwUsage & RESOURCEUSAGE_CONTAINER) == RESOURCEUSAGE_CONTAINER) { PRT_SHIFT; printf("Found provider: %S\n", current->lpProvider); np_enum(current); }
current++; } } } while (ret != WN_NO_MORE_ENTRIES); DEC_SHIFT;
HeapFree(GetProcessHeap(), 0, out); WNetCloseEnum(handle);}
int wmain(int argc, const WCHAR *argv[]){ np_enum(NULL);
return 0;}