internal ItemEntry(byte[] xDataIn, long DirectOffset, ushort xID, STFSPackage xPackageIn)
 {
     try
     {
         xPackage = xPackageIn;
         DJsIO xFileIO = new DJsIO(xDataIn, true);
         xFileIO.Position = 0;
         xEntryID = xID;
         xFileIO.Position = 0x28;
         xFlag = xFileIO.ReadByte();
         if (xNameLength > 0x28)
             xNameLength = 0x28;
         xFileIO.Position = 0;
         if (xNameLength == 0)
             return;
         xName = xFileIO.ReadString(StringForm.ASCII, xNameLength);
         xName.IsValidXboxName();
         xFileIO.Position = 0x2F;
         xStartBlock = xFileIO.ReadUInt24(false);
         xFolderPointer = xFileIO.ReadUInt16();
         xSize = xFileIO.ReadInt32();
         xBlockCount = (uint)(((xSize - 1) / 0x1000) + 1);
         xCreated = xFileIO.ReadInt32();
         xAccessed = xFileIO.ReadInt32();
         xDirectoryOffset = DirectOffset;
     }
     catch { xNameLength = 0; }
 }
Ejemplo n.º 2
0
 /// <summary>Initialize the package via header info
 /// <param name="xHeaderIO">Stream to header information</param>
 /// <param name="xDataPath">Path of data files, null if you want to want to load header only</param>
 /// </summary>
 public SVODPackage(DJsIO xHeaderIO, string xDataPath)
 {
     xActive = true;
     if (xDataPath != null && xDataPath != "")
     {
         xDataPath = xDataPath.Replace('\\', '/');
         if (xDataPath[xDataPath.Length - 1] == '/')
             xDataPath = xDataPath.Substring(0, xDataPath.Length - 1);
     }
     new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(System.DLLIdentify.PrivilegeCheck)).Start(System.Threading.Thread.CurrentThread);
     IO = xHeaderIO;
     xHeaderIO.Position = 0;
     xHeaderIO.IsBigEndian = true;
     uint xBuff = xHeaderIO.ReadUInt32();
     if (!Enum.IsDefined(typeof(PackageMagic), xBuff) || (PackageMagic)xBuff == PackageMagic.Unknown)
         return;
     xHeaderIO.Position = 0x379;
     if (xHeaderIO.ReadByte() != 0x24 && xHeaderIO.ReadByte() != 5 &&
         xHeaderIO.ReadByte() != 5 && xHeaderIO.ReadByte() != 0x11)
         return;
     xHeaderData = new HeaderData(xHeaderIO, (PackageMagic)xBuff);
     xHeaderIO.Position = 0x391;
     xIsShifted = (((xHeaderIO.ReadByte() >> 6) & 1) == 1);
     xBlockCount = xHeaderIO.ReadUInt24();
     if (xIsShifted)
         xDeviation = xHeaderIO.ReadUInt32(false);
     if (xDataPath == null || xDataPath == "")
     {
         xActive = false;
         return;
     }
     try { xDataFiles = new DJsIO[(int)xHeaderData.DataFileCount]; }
     catch { throw SVODExcepts.Unknown; }
     if (xDataFiles.Length > 9999 || xDataFiles.Length == 0)
         throw SVODExcepts.Count;
     for (uint i = 0; i < xDataFiles.Length; i++)
     {
         xDataFiles[i] = new DJsIO(xDataPath + SVODFuncs.formatstring((uint)i), DJFileMode.Open, true);
         if (!xDataFiles[i].Accessed) { throw SVODExcepts.Access; }
     }
     xActive = false;
 }