@@ -1054,26 +1054,27 @@ IsCoreClrWithGoodHeader(
1054
1054
}
1055
1055
1056
1056
static
1057
- HMODULE*
1057
+ HRESULT
1058
1058
EnumProcessModulesInternal (
1059
1059
HANDLE hProcess,
1060
- DWORD *pCountModules)
1061
- {
1060
+ DWORD *pCountModules,
1061
+ HMODULE** ppModules)
1062
+ {
1062
1063
*pCountModules = 0 ;
1064
+ *ppModules = nullptr ;
1063
1065
1064
1066
// Start with 1024 modules
1065
1067
DWORD cbNeeded = sizeof (HMODULE) * 1024 ;
1066
1068
1067
1069
ArrayHolder<HMODULE> modules = new (nothrow) HMODULE[cbNeeded / sizeof (HMODULE)];
1068
1070
if (modules == nullptr )
1069
1071
{
1070
- SetLastError (ERROR_OUTOFMEMORY);
1071
- return nullptr ;
1072
+ return HRESULT_FROM_WIN32 (ERROR_OUTOFMEMORY);
1072
1073
}
1073
1074
1074
1075
if (!EnumProcessModules (hProcess, modules, cbNeeded, &cbNeeded))
1075
1076
{
1076
- return nullptr ;
1077
+ return HRESULT_FROM_WIN32 ( GetLastError ()) ;
1077
1078
}
1078
1079
1079
1080
// If 1024 isn't enough, try the modules array size returned (cbNeeded)
@@ -1082,14 +1083,13 @@ EnumProcessModulesInternal(
1082
1083
modules = new (nothrow) HMODULE[cbNeeded / sizeof (HMODULE)];
1083
1084
if (modules == nullptr )
1084
1085
{
1085
- SetLastError (ERROR_OUTOFMEMORY);
1086
- return nullptr ;
1086
+ return HRESULT_FROM_WIN32 (ERROR_OUTOFMEMORY);
1087
1087
}
1088
1088
1089
1089
DWORD cbNeeded2;
1090
1090
if (!EnumProcessModules (hProcess, modules, cbNeeded, &cbNeeded2))
1091
1091
{
1092
- return nullptr ;
1092
+ return HRESULT_FROM_WIN32 ( GetLastError ()) ;
1093
1093
}
1094
1094
1095
1095
// The only way cbNeeded2 could change on the second call is if number of
@@ -1101,7 +1101,8 @@ EnumProcessModulesInternal(
1101
1101
}
1102
1102
1103
1103
*pCountModules = cbNeeded / sizeof (HMODULE);
1104
- return modules.Detach ();
1104
+ *ppModules = modules.Detach ();
1105
+ return S_OK;
1105
1106
}
1106
1107
1107
1108
// -----------------------------------------------------------------------------
@@ -1143,10 +1144,11 @@ EnumerateCLRs(
1143
1144
1144
1145
// The modules in the array returned don't need to be closed
1145
1146
DWORD countModules;
1146
- ArrayHolder<HMODULE> modules = EnumProcessModulesInternal (hProcess, &countModules);
1147
- if (modules == nullptr )
1147
+ ArrayHolder<HMODULE> modules = nullptr ;
1148
+ HRESULT hr = EnumProcessModulesInternal (hProcess, &countModules, &modules);
1149
+ if (FAILED (hr))
1148
1150
{
1149
- return HRESULT_FROM_WIN32 ( GetLastError ()) ;
1151
+ return hr ;
1150
1152
}
1151
1153
1152
1154
//
@@ -1321,10 +1323,11 @@ GetRemoteModuleBaseAddress(
1321
1323
1322
1324
// The modules in the array returned don't need to be closed
1323
1325
DWORD countModules;
1324
- ArrayHolder<HMODULE> modules = EnumProcessModulesInternal (hProcess, &countModules);
1325
- if (modules == nullptr )
1326
+ ArrayHolder<HMODULE> modules = nullptr ;
1327
+ HRESULT hr = EnumProcessModulesInternal (hProcess, &countModules, &modules);
1328
+ if (FAILED (hr))
1326
1329
{
1327
- ThrowHR (HRESULT_FROM_WIN32 ( GetLastError ()) );
1330
+ ThrowHR (hr );
1328
1331
}
1329
1332
1330
1333
for (DWORD i = 0 ; i < countModules; i++)
0 commit comments