⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sisfields.py

📁 SeesInfo application for Symbian
💻 PY
📖 第 1 页 / 共 2 页
字号:
	def __init__(self) :
		SISField.__init__(self)
		self.operation = None
		self.operationOptions = None
		self.compressedLength = None
		self.uncompressedLength = None
		self.fileIndex = None
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		
		self.subFields.append(fieldParser.parseField(fileReader))
		self.subFields.append(fieldParser.parseField(fileReader))
		field = fieldParser.parseField(fileReader)
		self.subFields.append(field)
		if field.type == 41 : # read field was capabilities ==> there is one more field left
			self.subFields.append(fieldParser.parseField(fileReader))
		
		self.operation = fileReader.readBytesAsUint(4)
		self.operationOptions = fileReader.readBytesAsUint(4)
		self.compressedLength = fileReader.readBytesAsUint(8)
		self.uncompressedLength = fileReader.readBytesAsUint(8)
		self.fileIndex = fileReader.readBytesAsUint(4)
		
	def readableStr(self) :
		return "index: " + str(self.fileIndex)
	
class SISHashField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		self.algorithm = None

	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.algorithm = fileReader.readBytesAsUint(4)
		self.subFields.append(fieldParser.parseField(fileReader)) # logo file
	
class SISIfField(SISField) :
	def __init__(self) :
		SISField.__init__(self)

	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # expression
		self.subFields.append(fieldParser.parseField(fileReader)) # install block
		self.subFields.append(fieldParser.parseField(fileReader)) # else ifs

class SISElseIfField(SISField) :
	def __init__(self) :
		SISField.__init__(self)

	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # expression
		self.subFields.append(fieldParser.parseField(fileReader)) # install block
	
class SISInstallBlockField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		self.files = None
		self.embeddedSISFiles = None
		self.ifBlocks = None
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader))
		self.subFields.append(fieldParser.parseField(fileReader))
		self.subFields.append(fieldParser.parseField(fileReader))

class SISExpressionField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		self.operator = None
		self.integerValue = None
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.operator = fileReader.readBytesAsUint(4)
		self.integerValue = fileReader.readBytesAsInt(4)
		
		if self.operator == 10 or self.operator == 13 :
			self.subFields.append(fieldParser.parseField(fileReader))
		if self.operator == 1 or self.operator == 2 or self.operator == 3 or self.operator == 4 or self.operator == 5 or self.operator == 6 or self.operator == 7 or self.operator == 8 or self.operator == 11 or self.operator == 12 :
			self.subFields.append(fieldParser.parseField(fileReader))
		if not (self.operator == 13 or self.operator == 14 or self.operator == 15 or self.operator == 16 or self.operator == 10) :
			self.subFields.append(fieldParser.parseField(fileReader))
		
class SISDataField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # data units
	
class SISDataUnitField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # file data
	
class SISFileDataField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # raw file data
	
class SISSupportedOptionField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # names
	
class SISControllerChecksumField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		self.checksum = None
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		self.checksum = fileReader.readBytesAsUint(2)
	
class SISDataChecksumField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		self.checksum = None
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		self.checksum = fileReader.readBytesAsUint(2)
	
class SISSignatureField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # signature algorithm
		self.subFields.append(fieldParser.parseField(fileReader)) # signature data
	
class SISBlobField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		self.data = None
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		self.data = fileReader.readPlainBytes(self.length)
	
class SISSignatureAlgorithmField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # algorithm identifier
	
class SISSignatureCertificateChainField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		fieldParser = sisreader.SISFieldParser()
		self.subFields.append(fieldParser.parseField(fileReader)) # signatures
		self.subFields.append(fieldParser.parseField(fileReader)) # certificate chain
	
class SISDataIndexField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		self.dataIndex = None
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		self.dataIndex = fileReader.readBytesAsUint(4)

class SISCapabilitiesField(SISField) :
	def __init__(self) :
		SISField.__init__(self)
		self.capabilities = 0
		self.readableCaps = []
		
	def initFromFile(self, fileReader) :
		self.length = self.readFieldLength(fileReader)
		self.capabilities = fileReader.readBytesAsUint(self.length)
		
		for i in range(20) :
			if (self.capabilities >> i) & 0x01 :
				self.readableCaps.append(CapabilityNames[i])
				
	def readableStr(self) :
		return " ".join(self.readableCaps)
	
SISFieldTypes = { 
	1 : SISStringField,
	2 : SISArrayField,
	3 : SISCompressedField,
	4 : SISVersionField,
	5 : SISVersionRangeField,
	6 : SISDateField,
	7 : SISTimeField,
	8 : SISDateTimeField,
	9 : SISUidField,
	10 : SISUnsupportedField,
	11 : SISLanguageField,
	12 : SISContentsField,
	13 : SISControllerField,
	14 : SISInfoField,
	15 : SISSupportedLanguagesField,
	16 : SISSupportedOptionsField,
	17 : SISPrerequisitiesField,
	18 : SISDependencyField,
	19 : SISPropertiesField,
	20 : SISPropertyField,
	21 : SISSignaturesField,
	22 : SISCertificateChainField,
	23 : SISLogoField,
	24 : SISFileDescriptionField,
	25 : SISHashField,
	26 : SISIfField,
	27 : SISElseIfField,
	28 : SISInstallBlockField,
	29 : SISExpressionField,
	30 : SISDataField,
	31 : SISDataUnitField,
	32 : SISFileDataField,
	33 : SISSupportedOptionField,
	34 : SISControllerChecksumField,
	35 : SISDataChecksumField,
	36 : SISSignatureField,
	37 : SISBlobField,
	38 : SISSignatureAlgorithmField,
	39 : SISSignatureCertificateChainField,
	40 : SISDataIndexField,
	41 : SISCapabilitiesField
	}

[StringField, 
 ArrayField, 
 CompressedField,
 VersionField,
 VersionRangeField,
 DateField,
 TimeField,
 DateTimeField,
 UidField,
 UnusedField,
 LanguageField,
 ContentsField,
 ControllerField,
 InfoField,
 SupportedLanguagesField,
 SupportedOptionsField,
 PrerequisitiesField,
 DependencyField,
 PropertiesField,
 PropertyField,
 SignaturesField,
 CertificateChainField,
 LogoField,
 FileDescriptionField,
 HashField,
 IfField,
 ElseIfField,
 InstallBlockField,
 ExpressionField,
 DataField,
 DataUnitField,
 FileDataField,
 SupportedOptionField,
 ControllerChecksumField,
 DataChecksumField,
 SignatureField,
 BlobField,
 SignatureAlgorithmField,
 SignatureCertificateChainField,
 DataIndexField,
 CapabilitiesField] = range(1, 42)
	 
FieldNames = {
 0 : "ROOT",
 StringField : "StringField", 
 ArrayField : "ArrayField", 
 CompressedField : "CompressedField",
 VersionField : "VersionField",
 VersionRangeField : "VersionRangeField",
 DateField : "DateField",
 TimeField : "TimeField",
 DateTimeField : "DateTimeField",
 UidField : "UidField",
 UnusedField : "UnusedField",
 LanguageField : "LanguageField",
 ContentsField : "ContentsField",
 ControllerField : "ControllerField",
 InfoField : "InfoField",
 SupportedLanguagesField : "SupportedLanguagesField",
 SupportedOptionsField : "SupportedOptionsField",
 PrerequisitiesField : "PrerequisitiesField",
 DependencyField : "DependencyField",
 PropertiesField : "PropertiesField",
 PropertyField : "PropertyField",
 SignaturesField : "SignaturesField",
 CertificateChainField : "CertificateChainField",
 LogoField : "LogoField",
 FileDescriptionField : "FileDescriptionField",
 HashField : "HashField",
 IfField : "IfField",
 ElseIfField : "ElseIfField",
 InstallBlockField : "InstallBlockField",
 ExpressionField : "ExpressionField",
 DataField : "DataField",
 DataUnitField : "DataUnitField",
 FileDataField : "FileDataField",
 SupportedOptionField : "SupportedOptionField",
 ControllerChecksumField : "ControllerChecksumField",
 DataChecksumField : "DataChecksumField",
 SignatureField : "SignatureField",
 BlobField : "BlobField",
 SignatureAlgorithmField : "SignatureAlgorithmField",
 SignatureCertificateChainField : "SignatureCertificateChainField",
 DataIndexField : "DataIndexField",
 CapabilitiesField : "CapabilitiesField"
}
	 
CapabilityNames = {
	0 : "TCB",
	1 : "CommDD",
	2 : "PowerMgmt",
	3 : "MultimediaDD",
	4 : "ReadDeviceData",
	5 : "WriteDeviceData",
	6 : "DRM",
	7 : "TrustedUI",
	8 : "ProtServ",
	9 : "DiskAdmin",
	10 : "NetworkControl",
	11 : "AllFiles",
	12 : "SwEvent",
	13 : "NetworkServices",
	14 : "LocalServices",
	15 : "ReadUserData",
    16 : "WriteUserData",
	17 : "Location",
	18 : "SurroundingsDD",
	19 : "UserEnvironment"
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -