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 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; }
DWORD CEnum::Next(CResourceW &resource) { if (g_IsNT) { const DWORD kBufferSize = 16384; CByteArr byteBuffer(kBufferSize); LPNETRESOURCEW lpnrLocal = (LPNETRESOURCEW) (BYTE *)(byteBuffer); ZeroMemory(lpnrLocal, kBufferSize); DWORD bufferSize = kBufferSize; DWORD numEntries = 1; DWORD result = NextW(&numEntries, lpnrLocal, &bufferSize); if (result != NO_ERROR) return result; if (numEntries != 1) return (DWORD)E_FAIL; ConvertNETRESOURCEToCResource(lpnrLocal[0], resource); return result; } CResource resourceA; DWORD result = Next(resourceA); ConvertResourceToResourceW(resourceA, resource); return result; }