#define _LARGEFILE_SOURCE #define _FILE_OFFSET_BITS 64 #include #include #include #include #include "lzx.h" #include "wim.h" BYTE *InitHash(DWORD myint) { unsigned char *mystr=(unsigned char *) &myint; BYTE *result=(BYTE *)malloc(sizeof(BYTE)*20); int i=0; int j=0; for(j=0;j<5;j++) { for(i=0;i<4;i++) { result[i+j*5]=mystr[i]; } } return result; } int main(int argc, char **argv) { FILE *fp; size_t result; if (argc != 2 && argc != 3) { printf("Usage: wiminfo [info]\n"); printf(" info can be:\n"); printf(" all : Prints all categories\n"); printf(" header : Printf WIM Header\n"); printf(" meta : Prints Boot Metadata\n"); printf(" lookup : Prints Lookup Table\n"); printf(" xml : Prints XML Data\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); BYTE *xml=ReadXML(fp,Header.XmlData.Offset,Header.XmlData.Size); BOOT_META_DATA bmd = ReadBootMetaDataTable(fp,Header.BootMetaData); if( fclose( fp )) printf("Input File close error.\n"); if (argc == 2 || (!strcmp(argv[2],strdup("header")) || !strcmp(argv[2],strdup("all")))) { PrintHeader(Header); } if (argc == 2 || (!strcmp(argv[2],strdup("lookup")) || !strcmp(argv[2],strdup("all")))) { PrintLookupTable(frh,numoffsets); } if (argc == 2 || (!strcmp(argv[2],strdup("xml")) || !strcmp(argv[2],strdup("all")))) { PrintXML(xml,Header.XmlData.Size); } if (argc == 2 || (!strcmp(argv[2],strdup("meta")) || !strcmp(argv[2],strdup("all")))) { PrintBootMetaData(bmd); } exit(0); }