private void Initialize(BinaryReader Reader, long CmdPtr) { int Word0 = Reader.ReadInt32(); int Word1 = Reader.ReadInt32(); Type = (IpcMessageType)(Word0 & 0xffff); int PtrBuffCount = (Word0 >> 16) & 0xf; int SendBuffCount = (Word0 >> 20) & 0xf; int RecvBuffCount = (Word0 >> 24) & 0xf; int XchgBuffCount = (Word0 >> 28) & 0xf; int RawDataSize = (Word1 >> 0) & 0x3ff; int RecvListFlags = (Word1 >> 10) & 0xf; bool HndDescEnable = ((Word1 >> 31) & 0x1) != 0; if (HndDescEnable) { HandleDesc = new IpcHandleDesc(Reader); } for (int Index = 0; Index < PtrBuffCount; Index++) { PtrBuff.Add(new IpcPtrBuffDesc(Reader)); } void ReadBuff(List <IpcBuffDesc> Buff, int Count) { for (int Index = 0; Index < Count; Index++) { Buff.Add(new IpcBuffDesc(Reader)); } } ReadBuff(SendBuff, SendBuffCount); ReadBuff(ReceiveBuff, RecvBuffCount); ReadBuff(ExchangeBuff, XchgBuffCount); RawDataSize *= 4; long RecvListPos = Reader.BaseStream.Position + RawDataSize; long Pad0 = GetPadSize16(Reader.BaseStream.Position + CmdPtr); Reader.BaseStream.Seek(Pad0, SeekOrigin.Current); int RecvListCount = RecvListFlags - 2; if (RecvListCount == 0) { RecvListCount = 1; } else if (RecvListCount < 0) { RecvListCount = 0; } RawData = Reader.ReadBytes(RawDataSize); Reader.BaseStream.Seek(RecvListPos, SeekOrigin.Begin); for (int Index = 0; Index < RecvListCount; Index++) { RecvListBuff.Add(new IpcRecvListBuffDesc(Reader)); } }