def parseDirEntry(self, bytes): entry = Directory.Entry() entry.bytes = bytes name = globals.getUTF8FromUTF16(bytes[0:64]) entry.Name = name entry.CharBufferSize = getSignedInt(bytes[64:66]) entry.Type = getSignedInt(bytes[66:67]) entry.NodeColor = getSignedInt(bytes[67:68]) entry.DirIDLeft = getSignedInt(bytes[68:72]) entry.DirIDRight = getSignedInt(bytes[72:76]) entry.DirIDRoot = getSignedInt(bytes[76:80]) entry.UniqueID = bytes[80:96] entry.UserFlags = bytes[96:100] entry.TimeCreated = bytes[100:108] entry.TimeModified = bytes[108:116] entry.StreamSectorID = getSignedInt(bytes[116:120]) entry.StreamSize = getSignedInt(bytes[120:124]) entry.StreamLocation = StreamLocation.SAT if entry.Type != Directory.Type.RootStorage and \ entry.StreamSize < self.header.minStreamSize: entry.StreamLocation = StreamLocation.SSAT if entry.Type == Directory.Type.RootStorage and entry.StreamSectorID >= 0: # This is an existing root storage. self.RootStorage = entry return entry
def parseDirEntry(self, bytes): entry = Directory.Entry() entry.bytes = bytes name = globals.getUTF8FromUTF16(bytes[0:64]) entry.Name = name entry.CharBufferSize = getSignedInt(bytes[64:66]) entry.Type = getSignedInt(bytes[66:67]) entry.NodeColor = getSignedInt(bytes[67:68]) entry.DirIDLeft = getSignedInt(bytes[68:72]) entry.DirIDRight = getSignedInt(bytes[72:76]) entry.DirIDRoot = getSignedInt(bytes[76:80]) entry.UniqueID = bytes[80:96] entry.UserFlags = bytes[96:100] entry.TimeCreated = bytes[100:108] entry.TimeModified = bytes[108:116] entry.StreamSectorID = getSignedInt(bytes[116:120]) entry.StreamSize = getSignedInt(bytes[120:124]) entry.StreamLocation = StreamLocation.SAT if entry.Type != Directory.Type.RootStorage and entry.StreamSize < self.header.minStreamSize: entry.StreamLocation = StreamLocation.SSAT if entry.Type == Directory.Type.RootStorage and entry.StreamSectorID >= 0: # This is an existing root storage. self.RootStorage = entry return entry
def getString(self, limit=None): bytes = [] count = 0 while True: if (not limit is None) and count == limit: break i = self.readuInt8() j = self.readuInt8() if i != 0 or j != 0: bytes.append(i) bytes.append(j) else: break count += 1 return globals.getUTF8FromUTF16("".join(map(lambda x: chr(x), bytes)))
def getString(self, limit = None): bytes = [] count = 0 while True: if (not limit is None) and count == limit: break i = self.readuInt8() j = self.readuInt8() if i != 0 or j != 0: bytes.append(i) bytes.append(j) else: break count += 1 return globals.getUTF8FromUTF16("".join(map(lambda x: chr(x), bytes)))
def __getString(self, limit): bytes = [] count = 0 pos = self.pos while True: if (limit is not None) and count == limit: break i = self.getuInt8(pos=pos) pos += 1 j = self.getuInt8(pos=pos) pos += 1 if i != 0 or j != 0: bytes.append(i) bytes.append(j) else: break count += 1 return (self.quoteAttr(globals.encodeName(globals.getUTF8FromUTF16("".join(map(lambda x: chr(x), bytes))))), pos)
def read(self): # CompObjHeader reserved = self.strm.readBytes(4) ver = self.strm.readUnsignedInt(4) reserved = self.strm.readBytes(20) globals.outputln("version: 0x%4.4X" % ver) # LengthPrefixedAnsiString length = self.strm.readUnsignedInt(4) displayName = self.strm.readBytes(length) if ord(displayName[-1]) != 0x00: # must be null-terminated. raise CompObjStreamError() globals.outputln("display name: " + displayName[:-1]) # ClipboardFormatOrAnsiString marker = self.strm.readUnsignedInt(4) if marker == 0: # Don't do anything. pass elif marker == 0xFFFFFFFF or marker == 0xFFFFFFFE: clipFormatID = self.strm.readUnsignedInt(4) globals.outputln("clipboard format ID: %d" % clipFormatID) else: clipName = self.strm.readBytes(marker) if ord(clipName[-1]) != 0x00: # must be null-terminated. raise CompObjStreamError() globals.outputln("clipboard format name: %s" % clipName[:-1]) # LengthPrefixedAnsiString length = self.strm.readUnsignedInt(4) if length == 0 or length > 0x00000028: # the spec says this stream is now invalid. raise CompObjStreamError() reserved = self.strm.readBytes(length) if ord(reserved[-1]) != 0x00: # must be null-terminated. raise CompObjStreamError() globals.outputln("reserved name : %s" % reserved[:-1]) unicodeMarker = self.strm.readUnsignedInt(4) if unicodeMarker != 0x71B239F4: raise CompObjStreamError() # LengthPrefixedUnicodeString length = self.strm.readUnsignedInt(4) if length > 0: s = globals.getUTF8FromUTF16(self.strm.readBytes(length * 2)) globals.outputln("display name (unicode): %s" % s) # ClipboardFormatOrAnsiString marker = self.strm.readUnsignedInt(4) if marker == 0: # Don't do anything. pass elif marker == 0xFFFFFFFF or marker == 0xFFFFFFFE: clipFormatID = self.strm.readUnsignedInt(4) globals.outputln("clipboard format ID: %d" % clipFormatID) else: clipName = globals.getUTF8FromUTF16(self.strm.readBytes(marker * 2)) if ord(clipName[-1]) != 0x00: # must be null-terminated. raise CompObjStreamError() globals.outputln("clipboard format name: %s" % clipName[:-1])
def read (self): # CompObjHeader reserved = self.strm.readBytes(4) ver = self.strm.readUnsignedInt(4) reserved = self.strm.readBytes(20) globals.outputln("version: 0x%4.4X"%ver) # LengthPrefixedAnsiString length = self.strm.readUnsignedInt(4) displayName = self.strm.readBytes(length) if ord(displayName[-1]) != 0x00: # must be null-terminated. raise CompObjStreamError() globals.outputln("display name: " + displayName[:-1]) # ClipboardFormatOrAnsiString marker = self.strm.readUnsignedInt(4) if marker == 0: # Don't do anything. pass elif marker == 0xFFFFFFFF or marker == 0xFFFFFFFE: clipFormatID = self.strm.readUnsignedInt(4) globals.outputln("clipboard format ID: %d"%clipFormatID) else: clipName = self.strm.readBytes(marker) if ord(clipName[-1]) != 0x00: # must be null-terminated. raise CompObjStreamError() globals.outputln("clipboard format name: %s"%clipName[:-1]) # LengthPrefixedAnsiString length = self.strm.readUnsignedInt(4) if length == 0 or length > 0x00000028: # the spec says this stream is now invalid. raise CompObjStreamError() reserved = self.strm.readBytes(length) if ord(reserved[-1]) != 0x00: # must be null-terminated. raise CompObjStreamError() globals.outputln("reserved name : %s"%reserved[:-1]) unicodeMarker = self.strm.readUnsignedInt(4) if unicodeMarker != 0x71B239F4: raise CompObjStreamError() # LengthPrefixedUnicodeString length = self.strm.readUnsignedInt(4) if length > 0: s = globals.getUTF8FromUTF16(self.strm.readBytes(length*2)) globals.outputln("display name (unicode): %s"%s) # ClipboardFormatOrAnsiString marker = self.strm.readUnsignedInt(4) if marker == 0: # Don't do anything. pass elif marker == 0xFFFFFFFF or marker == 0xFFFFFFFE: clipFormatID = self.strm.readUnsignedInt(4) globals.outputln("clipboard format ID: %d"%clipFormatID) else: clipName = globals.getUTF8FromUTF16(self.strm.readBytes(marker*2)) if ord(clipName[-1]) != 0x00: # must be null-terminated. raise CompObjStreamError() globals.outputln("clipboard format name: %s"%clipName[:-1])