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; // only HIPC have the padding requirements. if (Type < IpcMessageType.TipcCloseSession) { long pad0 = GetPadSize16(reader.BaseStream.Position + cmdPtr); if (rawDataSize != 0) { rawDataSize -= (int)pad0; } 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)); } }
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)); } }