📄 resourcece.cpp
字号:
#include "stdafx.h"
#include "resourceCE.h"
typedef BOOL (*EnumResCallBack) (HMODULE hModule, LPTSTR lpszType, LONG_PTR lParam );
#if 0
LONG WINAPI LdrFindResourceDirectory_U( HMODULE hmod, const LDR_RESOURCE_INFO *info,
ULONG level, const IMAGE_RESOURCE_DIRECTORY **dir )
{
const void *res;
NTSTATUS status;
__try
{
status = find_entry( hmod, info, level, &res, TRUE );
if (status == STATUS_SUCCESS) *dir = res;
}
__except(1)
{
return GetExceptionCode();
}
return status;
}
BOOL WINAPI EnumResourceTypesW( HMODULE hmod, ENUMRESTYPEPROCW lpfun, LONG_PTR lparam )
{
int i, len = 0;
BOOL ret = FALSE;
LPWSTR type = NULL;
NTSTATUS status;
const IMAGE_RESOURCE_DIRECTORY *resdir;
const IMAGE_RESOURCE_DIRECTORY_ENTRY *et;
const IMAGE_RESOURCE_DIR_STRING_U *str;
EnumResCallBack lpCallBack = (EnumResCallBack)lpfun;
//TRACE( "%p %p %lx\n", hmod, lpfun, lparam );
if (hmod == NULL)
hmod = GetModuleHandle( NULL );
if ((status = LdrFindResourceDirectory_U( hmod, NULL, 0, &resdir )) != STATUS_SUCCESS)
{
//SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
et = (const IMAGE_RESOURCE_DIRECTORY_ENTRY *)(resdir + 1);
for (i = 0; i < resdir->NumberOfNamedEntries + resdir->NumberOfIdEntries; i++)
{
if (et[i].NameIsString)
{
str = (const IMAGE_RESOURCE_DIR_STRING_U *)((const BYTE *)resdir + et[i].NameOffset);
if (str->Length + 1 > len)
{
len = str->Length + 1;
HeapFree( GetProcessHeap(), 0, type );
if (!(type = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return FALSE;
}
memcpy(type, str->NameString, str->Length * sizeof (WCHAR));
type[str->Length] = 0;
ret = lpCallBack(hmod,type,lparam);
}
else
{
ret = lpCallBack( hmod, (LPTSTR)et[i].Id, lparam );
}
if (!ret) break;
}
HeapFree( GetProcessHeap(), 0, type );
return ret;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -