NtProtectVirtualMemory

Robert Shearman rob at codeweavers.com
Wed Apr 5 17:16:59 CDT 2006


Segin wrote:

> Robert Shearman wrote:
>
>> Segin wrote:
>>
>>> Could someone clue me in to just what this means and why it is:
>>> err:virtual:NtProtectVirtualMemory Unsupported on other process
>>>
>>> A quick Google comes up that function is undocumented, so I don't 
>>> have much info on it.
>>>
>>> From the wine source:
>>>
>>>    if (!is_current_process( process ))
>>>    {
>>>        ERR("Unsupported on other process\n");
>>>        return STATUS_ACCESS_DENIED;
>>>    }
>>>
>>> And that's self explanitory, but why is it "Unsupported on other 
>>> process"?
>>
>>
>>
>>
>> The POSIX & Linux equivalent doesn't take a process ID as an 
>> argument, hence it only operates on the current process.
>>
> Hmm... Intresting. I am going to assume, from what I have seen, that 
> emulated Win32 processes have a represenative POSIX process. Is it 
> possible to implement a lookup table of sorts to make it work 
> cross-process?
>

There is already a lookup in the server, but there is no cross-process 
syscall for NtProtectVirtualMemory (and in fact for all of the other 
virtual memory functions). The cleanest fix is to get the kernel to 
support this. One suggested way of fixing this and other cross-process 
problems in Wine without kernel support is to change the context of the 
target process to set up a call to the relevant function and restore the 
registers afterwards. AFAIK, no one has tried to implement this yet.

-- 
Rob Shearman




More information about the wine-devel mailing list