📄 udf102fvd.cpp
字号:
eahd->impAttrLocation = 24;//sizeof(struct ExtendedAttrHeaderDesc); eahd->appAttrLocation = udf_version > 0x102 ? ULONG_MAX : leattr; RMMemcpy(buffer+16+176 ,&(eahd->impAttrLocation) ,4); RMMemcpy(buffer+20+176 ,&(eahd->appAttrLocation) ,4); eahd->descTag = get_tag(TID_EXTENDED_ATTRI_HEADER_DESC, desc_version, snum, icb, buffer+176, 24);//sizeof(struct ExtendedAttrHeaderDesc)); RMMemcpy(buffer+176 ,&(eahd->descTag.tagIdent),2); RMMemcpy(buffer+2+176 ,&(eahd->descTag.descVersion),2); RMMemcpy(buffer+4+176 ,&(eahd->descTag.tagChecksum),1); RMMemcpy(buffer+5+176 ,&(eahd->descTag.reserved),1); RMMemcpy(buffer+6 +176,&(eahd->descTag.tagSerialNum),2); RMMemcpy(buffer+8+176 ,&(eahd->descTag.descCRC),2); RMMemcpy(buffer+10+176 ,&(eahd->descTag.descCRCLength),2); RMMemcpy(buffer+12+176 ,&(eahd->descTag.tagLocation),4); iuea = (struct ImpUseExtendedAttr *)&fe->extendedAttr[eahd->impAttrLocation]; iuea->attrType = EXTATTR_IMP_USE; iuea->attrSubtype = 1; iuea->impUseLength = 8; iuea->attrLength = 48 + 8; iuea->impIdent.flags = 0; RMMemcpy(iuea->impIdent.ident, UDF_ID_FREE_EA, strlen(UDF_ID_FREE_EA)); ((Uint16 *)iuea->impIdent.identSuffix)[0] = udf_version; iuea->impIdent.identSuffix[2] = os_class; iuea->impIdent.identSuffix[3] = os_id; RMMemcpy(buffer+200 ,&(iuea->attrType) ,4); RMMemcpy(buffer+204 ,&(iuea->attrSubtype) ,1); RMMemcpy(buffer+208 ,&(iuea->attrLength) ,4); RMMemcpy(buffer+212 ,&(iuea->impUseLength) ,4); RMMemcpy(buffer+216 ,&(iuea->impIdent.flags) ,1); RMMemcpy(buffer+217 ,iuea->impIdent.ident ,strlen(UDF_ID_DVD_CGMS)); RMMemcpy(buffer+ 240,iuea->impIdent.identSuffix ,8); ((struct FreeEASpace *)iuea->impUse)->headerChecksum = ComputeEAChecksum((RMint8 *)buffer+200); RMMemcpy(buffer+ 248,&(((struct FreeEASpace *)iuea->impUse)->headerChecksum),4); iuea = (struct ImpUseExtendedAttr *)&fe->extendedAttr[eahd->impAttrLocation + iuea->attrLength]; iuea->attrType = EXTATTR_IMP_USE; iuea->attrSubtype = 1; iuea->impUseLength = 8; iuea->attrLength = 48 + 8; iuea->impIdent.flags = 0; RMMemcpy(iuea->impIdent.ident, UDF_ID_DVD_CGMS, strlen(UDF_ID_DVD_CGMS)); ((Uint16 *)iuea->impIdent.identSuffix)[0] = udf_version; iuea->impIdent.identSuffix[2] = os_class; iuea->impIdent.identSuffix[3] = os_id; //改寫 RMMemcpy(buffer+252 ,&(iuea->attrType) ,4); RMMemcpy(buffer+256 ,&(iuea->attrSubtype) ,1); RMMemcpy(buffer+260 ,&(iuea->attrLength) ,4); RMMemcpy(buffer+264 ,&(iuea->impUseLength) ,4); RMMemcpy(buffer+268 ,&(iuea->impIdent.flags) ,1); RMMemcpy(buffer+269 ,iuea->impIdent.ident ,strlen(UDF_ID_DVD_CGMS)); RMMemcpy(buffer+ 292,iuea->impIdent.identSuffix ,8); dciu = (struct DVDCopyrightImpUse *)iuea->impUse; dciu->headerChecksum = ComputeEAChecksum((RMint8 *)buffer+252); dciu->CGMSInfo = 0; dciu->dataType = 0; dciu->protectionSystemInfo[0] = 0; //改寫 RMMemcpy(buffer+300 ,&(dciu->headerChecksum) ,2); RMMemcpy(buffer+302 ,&(dciu->CGMSInfo) ,1); RMMemcpy(buffer+303 ,&(dciu->dataType) ,1); //RMMemcpy(buffer+304 ,dciu->protectionSystemInfo ,4); sad = (struct short_ad *)&(fe->allocDescs[leattr]); putInt64L((RMuint8 *)&(sad->extLength),length); fe->permissions = PERM_U_READ|PERM_G_READ|PERM_O_READ; putInt32L((RMuint8 *)&fe->permissions,fe->permissions); putInt32L((RMuint8 *)&sad->extPosition,position); if ((attr==0x01)||(attr==0x02)||(attr==0x03)||(attr==0x04)) { //sad->extPosition = fr->position; type = ICB_FILE_TYPE_REGULAR; } else //DIR { type = ICB_FILE_TYPE_DIRECTORY; fe->permissions |= PERM_U_EXEC|PERM_G_EXEC|PERM_O_EXEC; } flags = ICB_FLAG_AD_SHORT; if (access_type == PARTITION_ACCESS_R) flags |= ICB_FLAG_CONTIGUOUS|ICB_FLAG_NONRELOCATABLE; else fe->permissions |= PERM_U_WRITE|PERM_U_CHATTR|PERM_U_DELETE| PERM_G_WRITE|PERM_G_CHATTR|PERM_G_DELETE| PERM_O_WRITE|PERM_O_CHATTR|PERM_O_DELETE; RMMemcpy(buffer+308 ,&(sad->extLength) ,4); RMMemcpy(buffer+312 ,&(sad->extPosition) ,4); RMMemcpy(buffer+44 ,&(fe->permissions) ,4); fe->icbTag = get_icbtag(0, icb_strategy, 0, 1, type, 0, 0, flags); RMMemcpy(buffer+16,&(fe->icbTag.priorRecordedNumDirectEntries),4); RMMemcpy(buffer+20,&(fe->icbTag.strategyType) ,2); RMMemcpy(buffer+22,&(fe->icbTag.strategyParameter) ,2); RMMemcpy(buffer+24,&(fe->icbTag.numEntries) ,2); RMMemcpy(buffer+26,&(fe->icbTag.reserved ),1); RMMemcpy(buffer+27,&(fe->icbTag.fileType) ,1); RMMemcpy(buffer+28,&(fe->icbTag.parentICBLocation.logicalBlockNum) ,4); RMMemcpy(buffer+32,&(fe->icbTag.parentICBLocation.partitionReferenceNum) ,2); RMMemcpy(buffer+34,&(fe->icbTag.flags) ,2); fe->descTag = get_tag(TID_FILE_ENTRY, desc_version, snum, icb, buffer, totsize); RMMemcpy(buffer , &(fe->descTag.tagIdent),2); RMMemcpy(buffer+2 ,&(fe->descTag.descVersion),2); RMMemcpy(buffer+4 ,&(fe->descTag.tagChecksum),1); RMMemcpy(buffer+5 ,&(fe->descTag.reserved),1); RMMemcpy(buffer+6 ,&(fe->descTag.tagSerialNum),2); RMMemcpy(buffer+8 ,&(fe->descTag.descCRC),2); RMMemcpy(buffer+10 ,&(fe->descTag.descCRCLength),2); RMMemcpy(buffer+12 ,&(fe->descTag.tagLocation),4); memcpy(udf_ptr+(icb-44)*2048,buffer,2048); sad=NULL;eahd=NULL; iuea=NULL; dciu=NULL; //free(fe);//free(buffer); //return 0;}void SetISO9660_Movies_DR(RMuint32 loc, RMuint8 *pattern)//268,pattern_info);{ ISODirRecord DirRecord; RMuint16 i,file_num; typeUdfPath filename; typeICBDir *icbPtr=NULL; typeUdfFile *UdfNodePtr=NULL; RMuint32 startAddr,FileLength; RMMemcpy(&file_num,ICBFidPtr,2); RMMemset(buffer, 0x00, 4096); pbuf = buffer; SetFirstDir(&DirRecord, (loc+Offset_NWA)); WriteDirectoryRecord(&DirRecord); SetFirstDir(&DirRecord, 261+Offset_NWA); DirRecord.name[0] = 0x01; //DR€€ªº²Ä€Gµ§°O¿ý WriteDirectoryRecord(&DirRecord); for (i=file_num-6;i<file_num;i++) { UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "PASS_MOVIES.PVM")) { startAddr=UdfNodePtr->FileAddr; FileLength=UdfNodePtr->F_Lengh; SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE); WriteDirectoryRecord(&DirRecord); } } for (i=0;i<file_num-6;i++) { icbPtr = (typeICBDir *)(ICBFidPtr+2+i*sizeof(typeICBDir)); UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); if ((icbPtr->attr)==0x03) //找到該類型file,count &calculate it { RMCopyAscii(filename,UdfNodePtr->F_name); startAddr=UdfNodePtr->FileAddr; FileLength=UdfNodePtr->F_Lengh; SetDirectoryRecord(&DirRecord, filename, startAddr, FileLength, ISO_FILE); WriteDirectoryRecord(&DirRecord); } } RMMemcpy(udf_ptr+ loc*2048,buffer,4096);pbuf=NULL;}void SetISO9660_Audio_DR(RMuint32 loc, RMuint8 *pattern)//270,pattern_info);{ ISODirRecord DirRecord; RMuint16 i,file_num; typeUdfPath filename; typeICBDir *icbPtr=NULL; typeUdfFile *UdfNodePtr=NULL; RMuint32 startAddr,FileLength; RMMemcpy(&file_num,ICBFidPtr,2); RMMemset(buffer, 0x00, 4096); pbuf = buffer; SetFirstDir(&DirRecord, (loc+Offset_NWA)); WriteDirectoryRecord(&DirRecord); SetFirstDir(&DirRecord, 261+Offset_NWA); DirRecord.name[0] = 0x01; //DR€€ªº²Ä€Gµ§°O¿ý WriteDirectoryRecord(&DirRecord); for (i=file_num-6;i<file_num;i++) { UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "PASS_AUDIO.PVM")) { startAddr=UdfNodePtr->FileAddr; FileLength=UdfNodePtr->F_Lengh; SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE); WriteDirectoryRecord(&DirRecord); } } for (i=0;i<file_num-6;i++) { icbPtr = (typeICBDir *)(ICBFidPtr+2+i*sizeof(typeICBDir)); UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); if ((icbPtr->attr)==0x02) //找到該類型file,count &calculate it { RMCopyAscii(filename,UdfNodePtr->F_name); startAddr=UdfNodePtr->FileAddr; FileLength=UdfNodePtr->F_Lengh; SetDirectoryRecord(&DirRecord, filename, startAddr, FileLength, ISO_FILE); WriteDirectoryRecord(&DirRecord); } } RMMemcpy(udf_ptr+ loc*2048,buffer,4096);pbuf=NULL;}void SetISO9660_JPG_DR(RMuint32 loc, RMuint8 *pattern)//262 ,pattern_info);{ ISODirRecord DirRecord; RMuint16 i,file_num; typeUdfPath filename; //typeICBDir *icbPtr=NULL; typeUdfFile *UdfNodePtr=NULL; RMuint32 startAddr,FileLength; RMMemcpy(&file_num,ICBFidPtr,2); RMMemset(buffer, 0x00, 4096); pbuf = buffer; SetFirstDir(&DirRecord, (loc+Offset_NWA)); WriteDirectoryRecord(&DirRecord); SetFirstDir(&DirRecord, 261+Offset_NWA); DirRecord.name[0] = 0x01; //DR€€ªº²Ä€Gµ§°O¿ý WriteDirectoryRecord(&DirRecord); for (i=file_num-6;i<file_num;i++) { UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "PASS_PICTURES.PVM")) { startAddr=UdfNodePtr->FileAddr; FileLength=UdfNodePtr->F_Lengh; SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE); WriteDirectoryRecord(&DirRecord); } } for (i=0;i<file_num-6;i++) { //icbPtr = (typeICBDir *)(ICBFidPtr+2+i*sizeof(typeICBDir)); UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); printf("#### @@@@%d filename=%s ,nwa=%ld\n",i,UdfNodePtr->F_name,UdfNodePtr->FileAddr); if ((UdfNodePtr->Attribute)==0x01) //找到該類型file,count &calculate it { RMCopyAscii(filename,UdfNodePtr->F_name); startAddr=UdfNodePtr->FileAddr; FileLength=UdfNodePtr->F_Lengh; printf("JPG DR#%d file:%s \n",i,UdfNodePtr->F_name); SetDirectoryRecord(&DirRecord, filename, startAddr, FileLength, ISO_FILE); WriteDirectoryRecord(&DirRecord); } } RMMemcpy(udf_ptr+ loc*2048,buffer,4096);pbuf=NULL;}void SetISO9660_Assets_DR(RMuint32 loc, RMuint8 *pattern){ ISODirRecord DirRecord; RMuint16 i,file_num; RMuint32 startAddr,FileLength; typeUdfFile *UdfNodePtr=NULL; RMMemcpy(&file_num,ICBFidPtr,2); RMMemset(buffer, 0x00, 4096); pbuf = buffer; SetFirstDir(&DirRecord, (loc+Offset_NWA)); WriteDirectoryRecord(&DirRecord); SetFirstDir(&DirRecord, 259+Offset_NWA); DirRecord.name[0] = 0x01; //DR€€ªº²Ä€Gµ§°O¿ý WriteDirectoryRecord(&DirRecord); SetDirectoryRecord(&DirRecord, "ITRI_JPEG", (262+Offset_NWA), 2048, ISO_DIRECTORY); WriteDirectoryRecord(&DirRecord); SetDirectoryRecord(&DirRecord, "ITRI_MOVIES", (268+Offset_NWA), 2048, ISO_DIRECTORY); WriteDirectoryRecord(&DirRecord); SetDirectoryRecord(&DirRecord, "ITRI_MP3", (270+Offset_NWA), 2048, ISO_DIRECTORY); WriteDirectoryRecord(&DirRecord); /* RMMemcpy(udf_ptr+ loc*2048,buffer,2048); SetISO9660_DR(262,pattern,0x01); SetISO9660_DR(268,pattern,0x03); SetISO9660_DR(270,pattern,0x02); */ for (i=file_num-6;i<file_num;i++) { UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "ASSET_LIST.PVM")) { startAddr=UdfNodePtr->FileAddr; FileLength=UdfNodePtr->F_Lengh; SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE); WriteDirectoryRecord(&DirRecord); } } RMMemcpy(udf_ptr+ loc*2048,buffer,2048);pbuf=NULL;}void SetISO9660_Album_DR(RMuint32 loc, RMuint8 *pattern){ ISODirRecord DirRecord; RMuint16 i,file_num; RMuint32 startAddr,FileLength; typeUdfFile *UdfNodePtr=NULL; RMMemcpy(&file_num,ICBFidPtr,2); RMMemset(buffer, 0x00, 2048); pbuf = buffer; SetFirstDir(&DirRecord, (loc+Offset_NWA)); WriteDirectoryRecord(&DirRecord); SetFirstDir(&DirRecord, 259+Offset_NWA); DirRecord.name[0] = 0x01; //DR€€ªº²Ä€Gµ§°O¿ý /*printf("\n\n@@@@@@@@@@@@@ SetISO9660_Album_DR() ENTRY @@@@@@@@@@@@@@@@@@@@@@@@@\n\n"); for (i=file_num-6;i<file_num;i++) { UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); printf("@@@@ %d pvm=%s @@@\n",i,UdfNodePtr->F_name); } */ WriteDirectoryRecord(&DirRecord); for (i=file_num-6;i<file_num;i++) { UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile)); if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "ALBUM.PVM")) { startAddr=UdfNodePtr->FileAddr; FileLength=UdfNodePtr->F_Lengh; SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE); WriteDirectoryRecord(&DirRecord); } } RMMemcpy(udf_ptr+ loc*2048,buffer,2048); pbuf =NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -