2013-04-08 4 views
0

Какие привилегии для Windows-сообщений?Привилегии сообщений Windows

В Заявке 1, я отправил сообщение на приложение 2:

PostMessage(handle, WM_LOCAL, 0, Integer(Lst)); 

В Заявке 2, реализация Сообщение:

var l: TStringList; 
begin  
    ShowMessage('got 1'); 
    l := TStringList(Message.LParam); 
    ShowMessage('got 2'); 
    Memo1.Clear; 
    ShowMessage('got 3'); 

    if Memo1 = nil then 
    ShowMessage('nil'); 

    //HERE : Access violation. 
    //Memo1.Text := l.Text; 
    //ShowMessage('got 4'); 

    Memo1.Lines.Add('good!'); 
    ShowMessage('got 5'); 

    l.Free;  
    ShowMessage('got 6'); 

    //Access violation Too.. 
    Memo1.Repaint; 
    ShowMessage('got 7'); 

Почему это происходит?

Ни я не могу перекрасить памятку и не получить доступ к текстуу.

ответ

5

Вы не можете обмениваться объектами между приложениями. Даже указатель указывает на адресное пространство адресата.
Возможно, WM_COPYDATA будет соответствовать вашим требованиям при копировании данных.

+0

Я не могу сериализовать объект? – EProgrammerNotFound

+0

thats другой вопрос ... – bummi

3

Это не сообщения, которые имеют привилегии, а скорее процессы. Функциональность называется User Interface Privilege Isolation (UIPI). Эта функция останавливает более низкие процессы уровня целостности, отправляя сообщения на более высокие процессы уровня целостности.

Но это не ваша проблема. Ваша проблема в том, что каждый процесс имеет отдельное адресное пространство. И поэтому указатель из одного процесса ничего не значит в другом процессе. Вот почему вы сталкиваетесь с нарушением доступа. Указатель, который вы получаете, указывает на память в другом процессе и поэтому не имеет смысла.

Необходимо использовать механизм межпроцессного взаимодействия (IPC). Например, отправив сообщение WM_COPYDATA или именованные каналы или сокеты и так далее.

+0

Я не могу сериализовать объект? – EProgrammerNotFound

+0

Я изменю тему ... – EProgrammerNotFound

+4

Пожалуйста, не меняйте тему. Вы задали этот вопрос, и мы ответили на этот вопрос. Если вы измените вопрос, наши усилия будут потрачены впустую. –