mirror of
https://github.com/CookiePLMonster/SilentPatch.git
synced 2025-01-01 16:53:01 +05:00
Updated ModuleList.hpp
This commit is contained in:
parent
a76b06a400
commit
614354ec8a
1 changed files with 34 additions and 11 deletions
|
@ -108,24 +108,47 @@ public:
|
||||||
private:
|
private:
|
||||||
void EnumerateInternal( HMODULE* modules, size_t numModules )
|
void EnumerateInternal( HMODULE* modules, size_t numModules )
|
||||||
{
|
{
|
||||||
m_moduleList.reserve( numModules );
|
size_t moduleNameLength = MAX_PATH;
|
||||||
for ( size_t i = 0; i < numModules; i++ )
|
wchar_t* moduleName = static_cast<wchar_t*>( malloc( moduleNameLength * sizeof(moduleName[0]) ) );
|
||||||
|
if ( moduleName != nullptr )
|
||||||
{
|
{
|
||||||
wchar_t moduleName[MAX_PATH];
|
m_moduleList.reserve( numModules );
|
||||||
if ( GetModuleFileNameW( *modules, moduleName, MAX_PATH ) != 0 )
|
for ( size_t i = 0; i < numModules; i++ )
|
||||||
{
|
{
|
||||||
const wchar_t* nameBegin = wcsrchr( moduleName, '\\' ) + 1;
|
// Obtain module name, with resizing if necessary
|
||||||
const wchar_t* dotPos = wcsrchr( nameBegin, '.' );
|
DWORD size;
|
||||||
if ( dotPos != nullptr )
|
while ( size = GetModuleFileNameW( *modules, moduleName, moduleNameLength ), size == moduleNameLength )
|
||||||
{
|
{
|
||||||
m_moduleList.emplace_back( *modules, std::wstring( nameBegin, std::distance( nameBegin, dotPos ) ) );
|
wchar_t* newName = static_cast<wchar_t*>( realloc( moduleName, 2 * moduleNameLength * sizeof(moduleName[0]) ) );
|
||||||
|
if ( newName != nullptr )
|
||||||
|
{
|
||||||
|
moduleName = newName;
|
||||||
|
moduleNameLength *= 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if ( size != 0 )
|
||||||
{
|
{
|
||||||
m_moduleList.emplace_back( *modules, nameBegin );
|
const wchar_t* nameBegin = wcsrchr( moduleName, '\\' ) + 1;
|
||||||
|
const wchar_t* dotPos = wcsrchr( nameBegin, '.' );
|
||||||
|
if ( dotPos != nullptr )
|
||||||
|
{
|
||||||
|
m_moduleList.emplace_back( *modules, std::wstring( nameBegin, std::distance( nameBegin, dotPos ) ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_moduleList.emplace_back( *modules, nameBegin );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
modules++;
|
||||||
}
|
}
|
||||||
modules++;
|
|
||||||
|
free( moduleName );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue