| 822 | } |
| 823 | |
| 824 | DWORD ProcessAccessHelp::getModuleHandlesFromProcess(const HANDLE hProcess, HMODULE ** hMods) |
| 825 | { |
| 826 | DWORD count = 30; |
| 827 | DWORD cbNeeded = 0; |
| 828 | bool notEnough = true; |
| 829 | |
| 830 | *hMods = new HMODULE[count]; |
| 831 | |
| 832 | do |
| 833 | { |
| 834 | if (!EnumProcessModules(hProcess, *hMods, count * sizeof(HMODULE), &cbNeeded)) |
| 835 | { |
| 836 | #ifdef DEBUG_COMMENTS |
| 837 | Scylla::debugLog.log(L"getModuleHandlesFromProcess :: EnumProcessModules failed count %d", count); |
| 838 | #endif |
| 839 | delete [] *hMods; |
| 840 | return 0; |
| 841 | } |
| 842 | |
| 843 | if ((count * sizeof(HMODULE)) < cbNeeded) |
| 844 | { |
| 845 | delete [] *hMods; |
| 846 | count = cbNeeded / sizeof(HMODULE); |
| 847 | *hMods = new HMODULE[count]; |
| 848 | } |
| 849 | else |
| 850 | { |
| 851 | notEnough = false; |
| 852 | } |
| 853 | } while (notEnough); |
| 854 | |
| 855 | return cbNeeded / sizeof(HMODULE); |
| 856 | } |
| 857 | |
| 858 | void ProcessAccessHelp::setCurrentProcessAsTarget() |
| 859 | { |