DWORD CEnum::Open(DWORD scope, DWORD type, DWORD usage, const CResourceW *resource) { if (g_IsNT) { NETRESOURCEW netResource; LPNETRESOURCEW pointer; if (resource == 0) pointer = 0; else { ConvertCResourceToNETRESOURCE(*resource, netResource); pointer = &netResource; } return Open(scope, type, usage, pointer); } CResource *pointer; CResource resourceA; if (resource == 0) pointer = 0; else { ConvertResourceWToResource(*resource, resourceA); pointer = &resourceA; } return Open(scope, type, usage, pointer); }
DWORD GetResourceInformation(const CResourceW &resource, CResourceW &destResource, UString &systemPathPart) { if (g_IsNT) { CByteBuffer byteBuffer; const DWORD kBufferSize = 16384; byteBuffer.SetCapacity(kBufferSize); LPNETRESOURCEW lpnrLocal = (LPNETRESOURCEW) (BYTE *)(byteBuffer); ZeroMemory(lpnrLocal, kBufferSize); DWORD bufferSize = kBufferSize; NETRESOURCEW netResource; ConvertCResourceToNETRESOURCE(resource, netResource); LPWSTR lplpSystem; DWORD result = ::WNetGetResourceInformationW(&netResource, lpnrLocal, &bufferSize, &lplpSystem); if (result != NO_ERROR) return result; if (lplpSystem != 0) systemPathPart = lplpSystem; ConvertNETRESOURCEToCResource(lpnrLocal[0], destResource); return result; } CResource resourceA, destResourceA; ConvertResourceWToResource(resource, resourceA); AString systemPathPartA; DWORD result = GetResourceInformation(resourceA, destResourceA, systemPathPartA); ConvertResourceToResourceW(destResourceA, destResource); systemPathPart = GetUnicodeString(systemPathPartA); return result; }
DWORD AddConnection2(const CResourceW &resource, LPCWSTR password, LPCWSTR userName, DWORD flags) { if (g_IsNT) { NETRESOURCEW netResource; ConvertCResourceToNETRESOURCE(resource, netResource); return ::WNetAddConnection2W(&netResource,password, userName, flags); } CResource resourceA; ConvertResourceWToResource(resource, resourceA); CSysString passwordA = GetSystemString(password); CSysString userNameA = GetSystemString(userName); return AddConnection2(resourceA, password ? (LPCTSTR)passwordA: 0, userName ? (LPCTSTR)userNameA: 0, flags); }
DWORD GetResourceParent(const CResourceW &resource, CResourceW &parentResource) { if (g_IsNT) { const DWORD kBufferSize = 16384; CByteArr byteBuffer(kBufferSize); LPNETRESOURCEW lpnrLocal = (LPNETRESOURCEW) (BYTE *)(byteBuffer); ZeroMemory(lpnrLocal, kBufferSize); DWORD bufferSize = kBufferSize; NETRESOURCEW netResource; ConvertCResourceToNETRESOURCE(resource, netResource); DWORD result = ::WNetGetResourceParentW(&netResource, lpnrLocal, &bufferSize); if (result != NO_ERROR) return result; ConvertNETRESOURCEToCResource(lpnrLocal[0], parentResource); return result; } CResource resourceA, parentResourceA; ConvertResourceWToResource(resource, resourceA); DWORD result = GetResourceParent(resourceA, parentResourceA); ConvertResourceToResourceW(parentResourceA, parentResource); return result; }