C# Only part of a ReadProcessMemory or WriteProcessMemory request was completed during Process.Kill()

As detailed in the comments of the MSDN page for Process.Modules and this thread there is a known issue in Process.Modules when enumerating 32 bit processes from a 64 bit process and visa-versa:

Internally .NET’s Process.Modules is using function EnumProcessModules
from PSAPI.dll. This function has a known issue that it cannot work
across 32/64 bit process boundary. Therefore enumerating another
64-bit process from 32-bit process or vice versa doesn’t work
correctly.

The solution seems to be to use the EnumProcessModulesEx function, (which must be called via P/Invoke), however this function is only available on later versions of Windows.

We fixed this issue by adding
a new function called EnumProcessModulesEx to PSAPI.dll
(http://msdn2.microsoft.com/en-us/library/ms682633.aspx), but we
currently cannot use it in this case:

  • it only works on Windows Vista or Windows Server 2008
  • currently .NET 2.0 Framework don’t have a service pack or hotfix to make Process.Modules use this new API

Leave a Comment