#define _LARGEFILE_SOURCE #define _FILE_OFFSET_BITS 64 #include #include #include #include #include "lzx.h" #include "wim.h" int main(int argc, char **argv) { FILE *fp; size_t result; if (argc != 4 ) { printf("Usage: wimextract \n"); exit(0); } // Open input file for reading fp = fopen(argv[1],"r"); if (fp == NULL) { printf("Error opening file\n"); exit(3); } LARGE_INTEGER numoffsets=0; WIM_HEADER Header; ReadWimHeader(fp,&Header); FILE_RESOURCE_HEADER *frh=ReadLookupTable(fp,Header.OffsetTable.Offset,Header.OffsetTable.Size,&numoffsets); qsort(frh,numoffsets,sizeof(FILE_RESOURCE_HEADER),comparehashes); BYTE *xml=ReadXML(fp,Header.XmlData.Offset,Header.XmlData.Size); BOOT_META_DATA bmd = ReadBootMetaDataTable(fp,Header.BootMetaData); DIRENTRY *extractfile=FindFile2(bmd.DirEntry,argv[2],argv[3]); ExtractFile(extractfile,frh,numoffsets,fp,argv[3]); if( fclose( fp )) printf("Input File close error.\n"); exit(0); }