type
TLpcMessageData = array [0..59] of dword;
TLpcMessagePrivate = packed record
pid : dword;
msgLen : dword;
counter : dword;
session : dword;
answerLen : dword;
data : TLpcMessageData;
end;
TPLpcMessage = ^TLpcMessage;
TLpcMessage = packed record
next : TPLpcMessage;
name : AnsiString;
callback : TIpcCallback;
answer : TIpcAnswer;
prv : dword;
actualMessageLength : word;
totalMessageLength : word;
messageType : word;
dataInfoOffset : word;
clientProcessId : dword;
clientThreadId : dword;
messageId : dword;
sharedSectionSize : dword;
end;
위와 같이 스트럭쳐가 있구요
==========================================
var c1 : dword;
pm1, pm2 : TPLpcMessage;
ppm : ^TPLpcMessage;
mi : ^TLpcSectionMapInfo;
prv : ^TLpcMessagePrivate;
pm1 := pointer(LocalAlloc(LPTR, 512));
if (NtReplyWaitReceivePort(iq.port, 0, nil, @pm1.actualMessageLength) = 0) and
(pm1.messageType = LPC_CONNECTION_REQUEST) then
begin
????????????????????
pm1.prv := dword(@pm1.actualMessageLength) - dword(pm1) + pm1.totalMessageLength - sizeOf(TLpcMessagePrivate); -->> 뭘 계산하겠다는건지 prv에 넣으려는 값이 뭘까요?
dword(prv) := dword(pm1) + pm1.prv;
글구 이상태론 영문 해서 밖에는 안될꺼 같은데요..대략 문자 길이값을 넘겨준다...문장뒤에 길이값을 붙여준다..이정도.아닐까요..파일01같은...