Есть два процесса на одном компе - клиент и сервер.
Клиент обращается к серверу следующим образом:
1) hProcess=OpenProcess(PROCESS_ALL_ACCESS,...)
2) mem=VirtualAllocEx(hProcess,...)
3) WriteProcessMemory(hProcess,mem,...)
4) CreateRemoteThread(hProcess, 0,0, mem,...)
Пока сервер и клиент работают в одной терминальной сессии - все нормально.
Если запустить их в разных терминальных сессиях - CreateRemoteThread
возвращает 0, а GetLastError() - ERROR_NOT_ENOUGH_MEMORY.
При этом в MSDN сказано:
Terminal Services: Terminal Services isolates each terminal session by
design. Therefore, CreateRemoteThread fails if the target process is in a
different session than the calling process.
Я бы мог поверить сказанному в MSDN, если бы GetLastError() возвращал
ERROR_ACCESS_DENIED, притом в момент вызова OpenProcess, а не в момент
CreateRemoteThread.
А так мне кажется, что это баг, прикрытый отмазкой в документации. Как вы
считаете, правильно ли мне кажется?
На всякий случай уточню ОС, на которой я это тестировал: Windows 2000 Server
+ SP4 + Rollup.