1. C++ / Говнокод #17119

    +53

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    const VS_FIXEDFILEINFO* GetFileVersion(PCWSTR name)
    {
    	HMODULE hmod = GetModuleHandle(name);
    	static LPCWSTR a[3] = { RT_VERSION, MAKEINTRESOURCE(1) };
    	PIMAGE_RESOURCE_DATA_ENTRY pirde;
    	PVOID pv;
    	DWORD size;
    
    	return !hmod || 
    		0 > LdrFindResource_U(hmod, a, 3, &pirde) || 
    		0 > LdrAccessResource(hmod, pirde, &pv, &size) ||
    		size < sizeof(VS_FIXEDFILEINFO)
    		? 0 : (VS_FIXEDFILEINFO*)findDWORD((size - sizeof(VS_FIXEDFILEINFO))/sizeof(DWORD) + 1, (PDWORD)pv, 0xfeef04bd);
    }

    Запостил: zhukas, 17 Ноября 2014

    Комментарии (5) RSS

    • pirdec kakoi to
      Ответить
    • P.S. Это кусок какой-то защиты от копирования? Ну где еще может пригодиться получение версии файлов из kernel mode...
      Ответить
      • >из kernel mode...
        GetModuleHandle - ага, ну конечно kernel
        Ответить
        • Ну может какая-то самопальная херня с таким названием? Не пойму, зачем и как из юзермода юзать LdrAccessResource, если есть нормальные функции? Странный код какой-то.
          Ответить
          • >зачем - для доступа к ресурсам
            >как - элементарно
            >есть нормальные функции - а LdrAccessResource менее нормальная чем LoadResource ?? вторая всего лишь тонкая оболочка вокруг первой к тому же менее удобная - не возвращает размер ресурса например. нужно дополнительно SizeofResource вызывать. не возвращает кода ошибки если что.
            Ответить

    Добавить комментарий