• XSS.stack #1 – первый литературный журнал от юзеров форума

Ресурсы не читаются в RunTime C++

Alexey18

(L3) cache
Пользователь
Регистрация
11.06.2023
Сообщения
163
Реакции
30
Доброго времени суток. Работаю значит с ресурсами. пишу RT_RCDATA.
С билдером проблем вроде нет как таковых.
C++:
ICResult WriteResource(const char* FileName, const BYTE* FileBytes, DWORD FileSize)
{
    HANDLE hUpdate = BeginUpdateResourceA(FileName, FALSE);
    if (hUpdate == NULL)
        return ICResult::FailBegin;

    if (!UpdateResourceA(hUpdate, "RT_RCDATA", "RES_FIRST", 1066, (LPVOID)FileBytes, FileSize))
    {
        EndUpdateResource(hUpdate, TRUE);
        return ICResult::FailUpdate;
    }

    if (!EndUpdateResource(hUpdate, FALSE))
        return ICResult::FailEnd;

    return ICResult::Success;
}
1692824293209.png
Ресурсы пишет в стаб всё нормально с этим. А так сделал чтение в стабе его.
Код:
vector<unsigned char> getResourceData(const char* resourceName) {
        HMODULE hModule = GetModuleHandle(NULL);
        HRSRC hResource = FindResource(hModule, resourceName, RT_RCDATA);
        if (hResource == NULL) {
            return std::vector<unsigned char>();
        }
        HGLOBAL hData = LoadResource(hModule, hResource);
        if (hData == NULL) {
            return std::vector<unsigned char>();
        }
        DWORD dataSize = SizeofResource(hModule, hResource);
        if (dataSize == 0) {
            return std::vector<unsigned char>();
        }
        const unsigned char* pData = static_cast<const unsigned char*>(LockResource(hData));
        if (pData == NULL) {
            return std::vector<unsigned char>();
        }
        std::vector<unsigned char> resourceData(pData, pData + dataSize);
        return resourceData;
    }
Чтение переписывал по разному с одного шарп-проекта(там всё работало). шарп- на шарп всё ок читает. А тут я не понимаю в чём траблы вообще.
Кто сталкивался если, подскажите плиз, как достать ресурс пожалуйста?
 
Это тоже не читает, а из под дотнета читает


C++:
std::vector<unsigned char> ReadNative(LPCSTR name_res)
    {
        HMODULE hModule = GetModuleHandle(NULL);
        HRSRC hResInfo = FindResourceA(hModule, name_res, RT_RCDATA);
        HGLOBAL hResData = LoadResource(hModule, hResInfo);
        
        DWORD size = SizeofResource(hModule, hResInfo);
        BYTE* pData = (BYTE*)LockResource(hResData);

        std::vector<unsigned char> ret(pData, pData + size);

        UnlockResource(hResData);
        FreeResource(hResData);

        return ret;
    }
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх