枚举PE文件所有.ico资源.docx_第1页
枚举PE文件所有.ico资源.docx_第2页
枚举PE文件所有.ico资源.docx_第3页
枚举PE文件所有.ico资源.docx_第4页
枚举PE文件所有.ico资源.docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include stdafx.h#include enum_all_icons.h#include save_icon_file_by_handle.hnamespace yg_iconBOOL CALLBACK EnumAllIconInPE:FindGroupIconProc( HANDLE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG lParam )T_map_icons* all_icons = (T_map_icons*)lParam;HRSRC ico_group_rsrc = :FindResource(HMODULE)hModule, lpszName, lpszType);if (ico_group_rsrc = NULL)return TRUE;HGLOBAL ico_group_handle = :LoadResource(HMODULE)hModule, ico_group_rsrc); if (ico_group_handle = NULL)return TRUE;GRPICONDIR* ico_group_data = (LPGRPICONDIR):LockResource(ico_group_handle); if (ico_group_data = NULL):FreeResource(ico_group_handle);return TRUE;std:map icons;for (int i = 0; i idCount; +i) GRPICONDIRENTRY* ico_entry = &ico_group_data-idEntriesi;HRSRC ico_rsrc = :FindResource(HMODULE) hModule, MAKEINTRESOURCE(ico_entry-nID), RT_ICON);if (ico_rsrc = NULL)break;HGLOBAL img_handle = :LoadResource(HMODULE)hModule, ico_rsrc);if (img_handle = NULL)break;LPVOID icon_image = :LockResource(img_handle);if (icon_image = NULL):FreeResource(img_handle);break;HICON hIcon = :CreateIconFromResourceEx(PBYTE)icon_image, ico_entry-dwBytesInRes, TRUE, 0x00030000, ico_entry-bWidth, ico_entry-bHeight, 0); icons.insert(std:make_pair(icons.size(), hIcon); all_icons-insert(std:make_pair(all_icons-size(), icons);:FreeResource(ico_group_handle);return TRUE;bool EnumAllIconInPE:EnumAll( const std:wstring& pe_path, const std:wstring& save_dir )HMODULE load_lib = :LoadLibraryEx(pe_path.c_str(), NULL, LOAD_LIBRARY_AS_DATAFILE);if(load_lib = NULL)return false;T_map_icons all_icons;:EnumResourceNames(load_lib, RT_GROUP_ICON, (ENUMRESNAMEPROC)&FindGroupIconProc, (LONG)&all_icons);MyCreateDirectory(save_dir);SaveFileByHIcon save_by_handle;T_map_icons:iterator it = all_icons.begin();T_map_icons:iterator itEnd = all_icons.end();for (; it != itEnd; +it)std:wstring save_path = save_dir + L + int2wstr(it-first) + L.ico;save_by_handle.SaveIconFile(it-second, save_path);:FreeLibrary(load_lib);return true;std:wstring EnumAllIconInPE:int2wstr( int nData )wchar_t wchBuf32 = L;_itow_s(nData, wchBuf, 32, 10);return wchBuf;BOOL EnumAllIconInPE:MyCreateDirectory( const std:wstring& strDir )if (strDir.empty() | strDir.length() 3 | strDir1 != L:)return FALSE;std:wstring sub_dir = strDir;wchar_t last_char = sub_dirsub_dir.length()-1;if ( last_char != L & last_char != L/)sub_dir += L;std:wstring:size_type gap_pos_1 = sub_dir.find_first_of(L, 0);std:wstring:size_type gap_pos_2 = sub_dir.find_first_of(L/, 0);if (gap_pos_1 = std:wstring:npos)gap_pos_1 = 0xFFFFFFFF;if (gap_pos_2 = std:wstring:npos)gap_pos_2 = 0xFFFFFFFF;std:wstring:size_type gap_pos = min(gap_pos_1, gap_pos_2);if (gap_pos = 0xFFFFFFFF)return FALSE;BOOL bRet = TRUE;std:wstring:size_type gap_pos_bak = gap_pos;while(gap_pos != std:wstring:npos)std:wstring pre_dir = strDir.substr(0, gap_pos);if(!:PathIsDirectory(pre_dir.c_str()BOOL bCreate = :CreateDirectory(pre_dir.c_str(), NULL);if (bCreate = 0)DWORD dwError = :GetLastError();if (dwError != ERROR_ALREADY_EXISTS)bRet = FALSE;break;gap_pos_bak = gap_pos;std:wstring:size_type gap_pos_1 = sub_dir.find_first_of(L, gap_pos_bak+1);std:wstring:size_type gap_pos_2 = sub_dir.find_first_of(L/, gap_pos_bak+1);if (gap_pos_1 = std:wst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论