java läser 2 byte heltal i 239s komplement från binär fil till heltal Jag försöker att analysera en binär fil som innehåller värden. I specifikationerna står det att varje värde representeras som ett 2-byte heltal i 2s komplementformat. Jag läser filen i en byte-array som heter data: Värdena ser bra ut när jag försöker skriva tillbaka dem i filen: tempInt är värdet i int. När jag läste i filen som jag skrev, är inte alla värdena samma. Några av dem men inte alla. Saknar jag något här UPDATE: Jag plottade värdena för jämförelse. Den övre halvan är de värden som jag läste från filen. Den nedre halvan är de värden som jag läste från filen, skrev sedan till en ny fil och läste sedan igen. Jag tror att graferna ser för likartade ut för att det är helt fel. UPPDATERING 2: de byte jag läste från inmatningsfilen: de byte jag läste från den fil som jag skrev från ovanstående värden: UPDATE 3: Jag lägger upp koden nu. För att göra det måste förklara hur data lagras i filen (btw det är EDF-formatet). Det finns tre viktiga komponenter: Records. Signaler och prov. Ett prov representeras som ett 2-byte heltal i 2s komplementformat och det lagras som ett heltal. En signal är en samling prover. Signalerna lagras dock inte i följd i filen. Det här är var poster kommer in. En post innehåller en fördefinierad mängd prover från varje signal. Posterna lagras i följd i filen. Så varje post innehåller en del av varje signal. Mängden prover definieras i metafilerna, variabeln som håller detta värde heter nrOfSamplesPerSignalInEachRecordGlobal i min kod. Så du måste slingra över varje rekord för att klämma samman varje signal. Det här är den funktion som lagrar byte från filen till signaldatastrukturen: det här är den funktion som skriver proverna tillbaka till byte: Ja - du läser dem i små endianformat (det första värdet är minst viktigt) men du skriva dem i big endian format (det första värdet är det viktigaste), förutsatt att du skriver en då b. Justera omvänd ordning när du skriver dem, förutsatt att filen är tänkt att vara liten endian: Se mer på denna fråga vid StackoverflowDescription Skriv ut data till seriell port som läsbar ASCII-text. Detta kommando kan ta många former. Numren skrivs ut med ett ASCII-tecken för varje siffra. Floats skrivs på samma sätt som ASCII-siffror, med två decimaler. Byte skickas som enstaka tecken. Tecken och strängar skickas som det är. Till exempel: Serial. print (78) ger 78 Serial. print (1.23456) ger 1.23 Serial. print (N) ger N Serial. print (Hello world.) Ger Hello world. En valfri andra parameter anger basen (format) för att använda tillåtna värden är BIN (binär eller bas 2), OCT (oktal eller bas 8), DEC (decimal eller bas 10), HEX (hexadecimal eller bas 16) . För flytande punkttal anger denna parameter hur många decimaler som ska användas. Till exempel: Serial. print (78, BIN) ger 1001110 Serial. print (78, OCT) ger 116 Serial. print (78, DEC) ger 78 Serial. print (78, HEX) ger 4E Serial. println (1.23456, 0 ) ger 1 Serial. println (1.23456, 2) ger 1.23 Serial. println (1.23456, 4) ger 1.2346 Du kan skicka flash-minne baserade strängar till Serial. print () genom att omsluta dem med F (). Till exempel. Serial. print (val) Serial. print (val, format) Parameterval: det värde som ska skrivas ut - vilket datatypformat som anges: anger talbasen (för integrerade datatyper) eller antal decimaler (för floating point-typer) sizet lång): print () returnerar antalet byte skrivna, men läser det numret är valfritt Använder en FOR-slinga för data och skriver ut ett nummer i olika format. int x 0 variabel tomgångsinställning 40 41 123 Serial. starta 40 9600 41 öppna seriell port vid 9600 bps: 125 tomrumslopp 40 41 123 utskriftsetiketter Serial. skriv ut 40 quotNO FORMATquot 41 skriver ut en etikett Serial. skriv ut 40 citat 41, skriver ut en flik Serial. skriv ut 40 quotDECquot 41 Serial. skriv ut 40 citat 41 Serial. skriv ut 40 quotHEXquot 41 Serial. skriv ut 40 citat 41 Serial. skriv ut 40 quotOCTquot 41 Serial. skriv ut 40 citat 41 Serial. skriv ut 40 quotBINquot 41 Serial. skriv ut 40 citat 41 för 40 x 0 x lt 64 x 41 123 Endast en del av ASCII-diagrammet, ändra för att passa skriva ut det i många format: Serial. skriv ut 40 x 41 utskrift som en ASCII-kodad decimal - samma som quotDECquot Serial. skriv ut 40 citat 41, skriver ut en flik Serial. skriv ut 40 x. DEC 41 skrivs ut som en ASCII-kodad decimal Serial. skriv ut 40 citat 41, skriver ut en flik Serial. skriv ut 40 x. HEX 41 skrivs ut som en ASCII-kodad hexadecimal seriell. skriv ut 40 citat 41, skriver ut en flik Serial. skriv ut 40 x. OCT 41 skrivs ut som en ASCII-kodad oktal Serial. skriv ut 40 citat 41, skriver ut en flik Serial. println 40 x. BIN 41 skrivs ut som en ASCII-kodad binär, lägger sedan vagnreturet med quotprintlnquot delay 40 200 41 delay 200 millisekunder 125 Serial. println 40 kvot 41 skriver ut en annan vagnretur 125 Programmeringstips Från version 1.0 är seriell överföring asynkron Serial. print () kommer att återvända innan några tecken överförs. Säker, du kan använda masken först och flytta senare, samma sak händer - masken ser till att alla andra bitar är noll, skiftet flyttar värdet så att det är i heltalets högsta byte, följaktligen inom intervallet 0-255. 0xF8 å andra sidan skulle bara hålla de översta 5 bitarna av 8, så jag är inte säker på var du tycker det är användbart. ndash xs0 25 maj 11 kl 15:29 blir en av färgkomponenterna (antingen röda eller blåa, jag glömmer vilken). Om färgmaskan inte utförs, överväga RGB (0, 127, 0) och tröskeln 63. GetRGB (.) - samtalet skulle återvända. Det är klart mer än tröskeln 63. Men avsikt var att ignorera de andra två färgerna kanaler. Bitmasken får endast de lägsta 8 bitarna, med nollpunkten. Kontrollera om färgen är ljusare än ett visst tröskelvärde, b. Om tröskeln överskrids, är pixeln färgad vit, annars använder den svart färg med hjälp av Så det är en omvandling till svartvitt baserat på en enkel pixel-vid-pixel tröskel på en enda färgkanal. svarade 25 maj 11 kl 14:57 tack, ja jag förstår inte varför den delen är där ndash Lunar maj 25 11 kl 14:58 Uppdaterad svaret för att förklara bitmask ndash Dilum Ranatunga 25 maj 11 kl 15:03 Det är förmodligen för att Det finns en viss omvandling till eller från ARGB. Detta är ett riktigt bra blogginlägg om varför man gör bitvisa operationer för färger. svarade 25 maj 11 kl 14:59 Mycket bra länk. Den här länken rensade mer koncept om bitvisa operationer. ) ndash iankits 25 maj 11 kl 15:06 RGB-värdet är ett heltal så det representeras i minnet av 4 byte (eller motsvarande 32 bitar). Varje byte representerar en komponent i färgen: 1: a byte: alfa-värde (00000001 i exemplet) som motsvarar opaciteten 2: a byte: rött värde (00000010 i exemplet) 3: e byte: grönt värde (00000011 i exemplet) 4: blå värde (00000100 i exemplet) 0xff och 0xffffff symboler 0xff representerar hexadecimalt värde FF vilket är lika med heltalet 255. Dess binära representation är: På samma sätt representeras 0xffffff av: Den motsvarar färgvit (röd, grön och blå lika till 255). Den binära operatören och ampten appliceras på två heltal i1 och i2 (i1 amp i2). Den returnerar ett heltal med alla dess bitar lika med 0 utom de som är lika med 1 i både i1 och i2. Om vi till exempel tillämpar förstärkare i mitt första exempel och på 0xff erhåller vi: Som en följd kan (amp 0xff) endast hålla värdena för den sista byte (dvs värdet på den blå komponenten i färgen). Patch regtool: Lägg till loadunload kommandon och - binärt alternativ den bifogade patchen lägger till kommandon quotloadquot och quotunloadquot och alternativ quote-b, - binaryquot till regtool. Ladda in en registerhive från PATH till ny SUBKEY: regtool-last KEYSUBKEY PATH Lossa och ta bort SUBKEY senare: regtool loss KEYSUBKEY Skriv ut REGBINARY värde som hex: regtool - b få KEYVALUE Ange REGBINARY värde från hex args: regtool - b set KEYVALUE XX XX XX XX . Exempel: Antag att S: är en partition på en andra HD som innehåller en kopia av alla filer i XP-systempartition C :. Följande script fixar de logiska drivmappningarna av backupinstallationen. Detta möjliggör uppstart av säkerhetskopia S: som C: efter att original C: - driven har tagits bort. Ladda säkerhetskopiering SYSTEM bikupa som SYSTEM. TMP regtool last HKLMSYSTEM. TMP cygdrivesWINDOWSsystem32configsystem fälla regtool loss HKLMSYSTEM. TMP ERR Ta bort alla logiska drivmappningar i backup (Något knepigt, eftersom nyckelvärdenamn innehåller backslashes) för v in (regtool list HKLMSYSTEM. TMPMountedDevices sed - n DosDevicesC-Z: s ,,, gp) gör regtool - K, unset quotHKLMSYSTEM. TMPMountedDevices, vquot gjort Kartström S: som C: i backup m (regtool - K, - b få HKLMSYSTEMMountedDevices, DosDevicesS :) regtool - K, - b satt HKLMSYSTEM. TMPMountedDevices, DosDevicesC: m Lossa hivefälla ERR regtool lossa HKLMSYSTEM. TMP Tack för eventuella kommentarer --- regtool. cc. orig 2005-09-12 01: 48: 05.001000000 0200 regtool. cc 2006-01-24 15: 48: 55.750000000 0100 -10,15 10,17 inkluderar ltstdio. hgt include ltstdlib. hgt include lterrno. hgt include ltctype. hgt include ltgetopt. hgt include ltwindows. hgt include ltsyscygwin. hgt enum - KTAUTO, KTINT, KTSTRING, KTEXPAND , KTMULTI KTAUTO, KTBINARY, KTINT, KTSTRING, KTEXPAND, KTMULTI k eytype KTAUTO charger key DEFAULTKEYSEPARATOR -32,6 34,7 - statisk char opties quotehiklmpqsvVK: quot static char opts quotbehiklmpqsvVK: quot int listwhat 0 int postfix 0 -62,7 65,7 användning (FIL där stderr) fprintf (var kvot - kvitto: s OPTION (lägg till krysslistan, ta bort unset) KEYnquot quotUsage: s OPTION (addcheckgetlistremoveunsetloadunload) KEYnquot quotVisa eller redigera Win32 registrynquot quotnquot quototot, progname) -76,6 79,8 citera ta bort KEY ta bort KEYnquot quoted KEYVALUE data. ställa in VALUEnquot quot unset KEYVALUE tar bort VALUE från KEYnquot kvotbelastning KEYSUBKEY PATH belastningsbyte från PATH till ny SUBKEYnquot kvittoslut KEYSUBKEY avlastningsbyte och ta bort SUBKEYnquot quotnquot) fprintf (var citatnoteringar för lista Åtgärd: nquot -83,7 88,11 quot - l, --lista endast utskrift VALUEsnotot - p, --postfix som ls - p, lägger till postfix till KEY namesnquot quotnquot quotOptions för get Action: nquot quot - b, - binärt tryck REGBINARA data som hex bytesnquot quotnquot quotOptions for set Action : nquot quot - b, - binär uppsättningstyp till REGBINARYnquot quot - e, --expand-string set typ till REGEXPANDSZnquot quoti --i, --integer set typ till REGDWORDnquot quot - m, --multi-sträng uppsättningstyp till REGMULTISZnquot -348,9 357,30 tangentbasis annat - rv RegOpenKeyEx (bas, n, 0, åtkomst, ampkey) - om (rv ERRORSUCCESS) - Fel (rv) om (access) rv RegOpenKeyEx (bas, n, 0, ampkey) om (rv ERRORSUCCESS) Fel (rv) annars om (argv1) char win32pathMAXPATH cygwinconvtowin32path (argv 1, win32path) rv RegLoadKey (bas, n, win32path) om (rv ERRORSUCCESS) Fel (rv) om (verbose) printf (kvot s laddad från fil snquot, n, win32path) annars rv RegUnLoadKey (bas, n) om ERRORSUCCESS) Fel (rv) om (verbose) printf (kvot s lossad notot, n) printf (kvotvärde snquot, n, värde) -491,7 521,7 int i, n DWORD v, rv - char a argv1, data char a argv1, data 0 findkey (2, KEYALLACACESS) om (keytype KTAUTO) -510,6 540,27 switch (keytype) fallet KTBINARY: för (n 0 argvn1 n) om (n gt 0) data (char) malloc n) för (i 0 i lt) char e errno 0 v strtoul (argvi1, ampe, 16) om (errno v gt 0xff e) fprintf (stderr, quotInvalid hex konstant snquot, argvi1) utgång (1) data v rv RegSetValueEx (nyckel, värde, 0, REGBINÄR, (const BYTE) data, n) brytfall KTINT: v strtoul (a, 0, 0) rv RegSetValueEx (tangent, värde, 0, REGDWORD, -542,6 593,9 rv ERRORINVALIDCATEGORY bryt om (data) fri (data) om (r v felaktigt) fel quot02xcquot, (unsigned char) datai, (i dsize-1. . n)) annars skriva (data, dsize, 1, stdout) brytfall REGDWORD: printf (quotlunquot, (DWORD) data) -610,6 671,31 avkastning 0 -642,6 730,9 medan ((g getoptlong ), EOF) switch (g) fall b: keytype KTBINARY brytfall e: keytype KTEXPAND paus Den jan 24 21:00 skrev Christian Franke: gt Hej, gt gt den bifogade patchen lägger till kommandon quotloadquot och quotunloadquot och alternativ citationstecken, gt - binärkvot till regtool. gt gt Ladda in en registerhive från PATH till ny SUBKEY: gt gt regtool load KEYSUBKEY PATH gt gt Lossa och ta bort SUBKEY senare: gt gt regtool loss KEYSUBKEY gt gt Skriv ut REGBINARY värde som hex: gt gt regtool - b få KEYVALUE gt gt Ange REGBINARY värde från hex args: gt gt regtool - b set KEYVALUE XX XX XX XX. gt gt gt Exempel: gt Anta att S: är en partition på en andra HD som innehåller en kopia av alla gt-filer i XP-systempartitionen C :. gt Följande skript korrigerar de logiska drivmappningarna av backup gt-installationen. gt Detta möjliggör uppstart av säkerhetskopia S: som C: efter att original C: - driven har tagits bort. gt gt binsh gt set - e gt gt Ladda backup SYSTEM hive som SYSTEM. TMP gt regtool last HKLMSYSTEM. TMP cygdrivesWINDOWSsystem32configsystem gt fälla regtool loss HKLMSYSTEM. TMP ERR gt gt Ta bort alla logiska drivmappningar i backup gt (Något knepigt, eftersom nyckelvärdenamn innehåller backslashes) gt for v in (regtool-lista HKLMSYSTEM. TMPMountedDevices gt sed - n DosDevicesC-Z: s ,,, gp) gt gt gtk - K, unset quotHKLMSYSTEM. TMPMountedDevices, vquot gt gt gt gt Map current S: as C : i backup gt m (regtool - K, - b få HKLMSYSTEMMountedDevices, DosDevicesS :) gt regtool - K, - b set HKLMSYSTEM. TMPMountedDevices, DosDevicesC: m gt gt Avlägsna hive gt trap ERR gt regtool loss HKLMSYSTEM. TMP gt gt Slut av Skript gt gt gt gt Tack för eventuella kommentarer Tack för denna lapp, det ser ganska bra ut. Det saknas bara två saker. Först kan du skapa en matchande ChangeLog-post. För det andra, sämre, jag ser inte ditt namn på listan över personer som har ett upphovsrättsuppdrag på plats, vilket definitivt är nödvändigt för en korrigering av denna storlek. Vi behöver en skriftlig upphovsrättsuppgift från dig en gång, efter det kan du skapa så många korrigeringar som du vill. Vänligen se cygwincontrib. html för gory detaljerna om formuläret för upphovsrättsuppdrag och hur du skickar det till Red Hat. - Corinna Vinschen Var god, skicka mail om Cygwin till Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat Öppna det här inlägget i gängad vy Rapportera innehåll som olämpligt Re: Patch regtool: Lägg till loadunload kommandon och - binärt alternativ På onsdag, 25 Jan 2006 skrev Corinna Vinschen: gt Den 24 jan 21:00 skrev Christian Franke: gt gt Hej, gt gt gt gt den bifogade patchen lägger till kommandon quotloadquot och quotunloadquot och alternativ citationstecken, gt gt - binaryquot till regtool. gt gt gt gt Ladda upp en registerhive från PATH till ny SUBKEY: gt gt gt gt regtool-belastning KEYSUBKEY PATH gt gt gt Lossa och ta bort SUBKEY senare: gt gt gt gt töm regtool loss KEYSUBKEY gt gt gt gt Skriv ut REGBINARY värde som hex: gt gt gt gt regtool - b få KEYVALUE gt gt gt gt Ange REGBINARY värde från hex args: gt gt gt gtktool - b set KEYVALUE XX XX XX XX. gt gt gt gt gt gt gt gt Tack för eventuella kommentarer gt gt Tack för denna patch, det ser ganska bra ut. gt snip Jag undrar om det skulle vara bättre att använda stdinstdout för binär data (eller till och med lägga till - f alternativ för set). IMHO, regtool - b få KEY1VALUE regtool - b set KEY2VALUE regtool - b få KEY1VALUE regtool - b set - f - KEY2VALUE ser renare ut än att lagra hex-kodningen i en sträng. Om du vill ha en hex dump, kommer regtool - b KEY1VALUE od - t x1 kommer att göra det. Jag är inte medveten om något program som gör det omvända (hex dump-gtbinary), men att skriva ett perl-skript för det är trivialt. Som sagt tror jag också att denna funktionalitet skulle vara mycket användbar. Igor - cs. nyu. edu quotas du suis sot. - Maj, du behöver inte, du behöver inte göra det, men du är inte dumt, du kallar dig en dåre, det finns tillräckligt med bevis på det - Rostand, quotCyrano de Bergeracquot Som svar på det här inlägget av Igor Peshansky Igor Peshansky skrev: gtgtsnip gtgt gtgt gt gt Jag undrar om det skulle vara bättre att använda stdinstdout för binär data (eller lägg till ett - f alternativ för set). IMHO, gt gttool - b få KEY1VALUE regtool - b set KEY2VALUE gt gt gt gt gttool - b få KEY1VALUE regtool - b set - f - KEY2VALUE gt gtoks renare än att lagra hex-kodningen i en sträng. gt Åtminstone när regtool används interaktivt är det IMO inte särskilt användbart att ha modemlinje-brusliknande utmatning för REGBINARY men mänsklig läsbar utgång för de andra värdetyperna. Men detta är det nuvarande beteendet hos quotregtool get. quot. Föreslå att du kombinerar det bästa av båda världarna: regtool får KEYVALUE ska alltid producera mänsklig läsbar produktion, i synnerhet en hex dump för REGBINARY. (Men detta skulle ändra befintligt beteende på REGBINARY) regtool - b få KEYVALUE skriver REGBINARY som binär data till stdout. regtool - b set KEYVALUE 01 02 03 anger REGBINARY värde från hex byte i args. regtool - b set KEYVALUE - inställt värde från binär data läs från stdin gt. gt gt gtThat sa, jag tror också att denna funktionalitet skulle vara mycket användbar. gt gt On den 25 januari 2006 skrev Brian Dessent: gt Christian Franke skrev: gt gt gt Åtminstone när regtool används interaktivt är det IMO inte särskilt användbart gt gt att ha modemlinjeljudliknande utgång för REGBINARY, men human gt gt läsbar utgång för de andra värde typerna. Men det här är det nuvarande gt gt-beteendet hos quotregtool get. quot. gt gt I stället för en explicit - b-flagga, kanske det bara borde ringa isatty () och gt om den körs interaktivt, matar ut mänsklig läsbar hex dump, annars gt output raw binär. Vad händer om du vill omdirigera hex-dumpningen till en IMO-fil, är isatty () - kontrollerna endast användbara om utmatningen inte ändras kvalitativt vid omdirigering (t ex för färgning). Annars är det alltid bättre att använda en explicit flagga. Att säga att försök att quotregtool getquot ett binärt värde skiljer sig inte från att försöka katta en binär fil - och förändrade inte quotcatquot för att utföra hex-dumpningar. Det som är användbart är istället ett sätt att fråga typen av värde via regtool. Vi kan också lägga till en quot-hquot (för - humanläsbar) flagga för att alltid mata ut värdet i läsbar form (se nedan). FWIW, Aregtool får KEY1VAL regtool set KEY2VAL quotAquot bryter redan för REGMULTISZ typvärden. Det skulle vara bra att göra regtools beteende konsekvent: quotregtool set - f FILEquot läser värdet från FILE, vilket skulle fungera för alla värde typer. Igor - cs. nyu. edu quotas du suis sot. - Maj inte, du behöver inte, men du behöver inte göra det. Men du är ingen idiot, du kallar dig en idiot, det finns tillräckligt med bevis på det. Rostand, quotCyrano de Bergeracquot Öppna det här inlägget i gängad vy Rapportera innehåll Som olämpligt Re: Patch regtool: Lägg till loadunload-kommandon och - binary alternativ Igor Peshansky skrev: gt Vad händer om du vill omdirigera hex-dumpningen till en fil IMO, är isatty () - kontrollerna gt endast användbara om utmatningen inte ändras kvalitativt vid omdirigering gt (t. ex. för färgning). Annars är det alltid bättre att använda en explicit gt-flagga. Bra poäng. Varför inte vi bara efterliknar kattens beteende? Om isatty () är sant och icke-ascii-tecken finns i utmatningen, fråga sedan först innan du eventuellt fubar användarterminalen, annars matar du bara ut de råa data. Och precis som katten inte har någon intern kod för att formatera binär data som en hex-dump, ska inte heller regtool, eftersom od fungerar perfekt för det och har redan den verkliga diskbänken för formateringsalternativ. Öppna det här inlägget i gängad vy Rapportera innehåll som olämpligt Re: Patch regtool: Lägg till loadunload-kommandon och - binary alternativ I svar på det här inlägget av Christian Franke Den 25 januari 21:58 skrev Christian Franke: gt Kommer att skicka snigelposten med lagliga saker snart -) Tack, jag ser fram emot. Ledsen för krångel, men vi fick fortfarande tillstånd för en enklare metod. Var tålamod, det kan ta lite tid. - Corinna Vinschen Vänligen skicka mail om Cygwin till Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat Öppna det här inlägget i gängad vy Rapportera innehåll som olämpligt Re: Patch regtool: Lägg till loadunload-kommandon och - binärt alternativ den jan 26 10 : 19, Corinna Vinschen skrev: gt Den 25 jan 21:58 skrev Christian Franke: gt gt Kommer skicka snigelbrevet med de juridiska sakerna snart -) gt gt Tack, jag ser fram emot. Tyvärr för krångel, men vi fick fortfarande inte tillstånd för en enklare metod. gt gt Var försiktig, det kan ta lite tid. Ditt uppdrag har äntligen kommit och är undertecknat. Har du en ny version av din regtool patch tillgänglig, efter denna diskussion ägde rum - Corinna Vinschen Vänligen skicka mail om Cygwin till Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat Öppna det här inlägget i gängad vy Rapportera innehåll som olämpligt Re: Patch regtool: Lägg till loadunload kommandon och - binary option gt Hej kristen, gt gt Den jan 26 10:19, Corinna Vinschen skrev: gt gtgt Den 25 jan 21:58 skrev Christian Franke: gtgt gtgtgt Skickar snigelposten med de juridiska sakerna snart -) gtgtgt gtgt Tack, jag ser fram emot. Ledsen för krångel, men vi fick fortfarande inte tillåtelse för en enklare metod. gtgt gtgt Var god tålamod, det kan ta lite tid. gtgt gt gt ditt uppdrag har äntligen kommit och är undertecknat. Har du en gt ny version av din regtool patch tillgänglig, efter denna diskussion gt ägde rum gt Nej, förlåt. Hoppas att hitta lite tid på ungefär en vecka. Jag är fortfarande inte säker på hur man hanterar binära registervärden på ett sätt som är mest användbart inuti skript. Öppna det här inlägget i gängad vy Rapportera innehåll som olämpligt Re: Patch regtool: Lägg till loadunload-kommandon och - binary alternativ Den 13 feb 20:43 skrev Christian Franke: gt du skrev: gt gtyour-uppdraget har äntligen kommit och är undertecknat. Har du en gt gtw version av din regtool patch tillgänglig, efter denna diskussion gt gttook plats gt gt Nej, ledsen. Hoppas att hitta lite tid på ungefär en vecka. gt gt Jag är fortfarande inte säker på hur man hanterar binära registervärden på ett sätt som är mest användbart inom skript. Som standard bör binär data gå som binär data över röret. Och det här är allt som behövs, i teorin, eftersom verktyg som xxd existerar. - Corinna Vinschen Vänligen skicka mail om Cygwin till Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat Attached är version 2 av patchen, inklusive en uppdatering av utils. sgml REGBINARY kan nu vara eter läs som binär från stdin: echo 0: 01 02 FE FF xxd - r regtool - b uppsättning KEYBINVALUE - regtool få KEYBINVALUE regtool - b set KEYBINVALUE - eller angiven som hex-argument: regtool - b set KEYBINVALUE 01 02 FE FF x (regtool - b få KEYBINVALUE) regtool - b set KEYBINVALUE x Funktionerna för loadunload är oförändrade. 2006-03-01 Christian Franke lthidden email gt regtool. cc: Lägg till åtgärder loadunload och alternativ - b, - binary. utils. sgml (regtool): Dokumentera det. Index: regtool. cc RCS-fil: cvssrcsrcwinsuputilsregtool. cc, v hämtar revision 1.19 diff - u - r1.19 regtool. cc --- regtool. cc 15 feb 2006 10:57:17 -0000 1,19 regtool. cc 1 mar 2006 18 : 35: 01 -0000 -10,15 10,17 inkluderar ltstdio. hgt include ltstdlib. hgt include lterrno. hgt include ltctype. hgt include ltgetopt. hgt include ltwindows. hgt include ltsyscygwin. hgt enum - KTAUTO, KTINT, KTSTRING, KTEXPAND , KTMULTI KTAUTO, KTBINARY, KTINT, KTSTRING, KTEXPAND, KTMULTI keytype KTAUTO chargerknapp DEFAULTKEYSEPARATOR -32,6 34,7 - statisk charger quotehiklmpqsvVK: quot static char opts quotbehiklmpqsvVK: quot int listwhat 0 int postfix 0 -62,7 65, 7 användning (FIL där stderr) fprintf (var, kvot - quotUsage: s OPTION (lägg till krysslistan ta bort unset) KEYnquot quotUsage: s OPTION (addcheckgetlistremoveunsetloadunload) KEYnquot quotView eller redigera Win32 registrynquot quotnquot quototot, progname) -76,6 79 , 8 citat ta bort KEY ta bort KEYnquot quoted KEYVALUE data. ställa in VALUEnquot quot unset KEYVALUE tar bort VALUE från KEYnquot kvotbelastning KEYSUBKEY PATH belastningsbyte från PATH till ny SUBKEYnquot kvittoslut KEYSUBKEY avlastningsbyte och ta bort SUBKEYnquot quotnquot) fprintf (var citatnoteringar för lista Åtgärd: nquot -83,7 88,11 quot - l, --lista endast utskrift VALUEsnotot - p, --postfix som ls - p, lägger till postfix till KEY namesnquot quotnquot quotOptions för get Action: nquot quot - b, - binärt tryck REGBINARA data som hex bytesnquot quotnquot quotOptions for set Action : nquot quot - b, - binär uppsättningstyp till REGBINARY (hex args eller -) nquot quot - e, --expand-string set typ till REGEXPANDSZnquot quoti --i, --integer set typ till REGDWORDnquot quot - m, - multi-string set typ till REGMULTISZnquot -348,9 357,30 nyckelbas annorlunda - rv RegOpenKeyEx (bas, n, 0, åtkomst, ampkey) - om (rv ERRORSUCCESS) - Fel (rv) om (access) rv RegOpenKeyEx , n, 0, åtkomst, ampkey) om (rv ERRORSUCCESS) Fel (rv) annars om (argv1) char win32pathMAXPATH cygwinconv towin32path (argv1, win32path) rv RegLoadKey (bas, n, win32path) om (rv ERRORSUCCESS) Fel (rv) om (verbose) printf (quotkey s laddad från fil snquot, n, win32path) annars rv RegUnLoadKey (bas, n) om (rv ERRORSUCCESS) Fel (rv) om (verbose) printf (kvot s lossad notot, n) printf (kvotens värde snquot, n, värde) -491,7 521,7 int jag, n DWORD v, rv - char a argv1 , data char a argv1, data 0 findkey (2, KEYALLACACESS) om (keytype KTAUTO) -510,6 540,43 switch (keytype) fallet KTBINARY: för (n 0 argvn1 n) om (n 1 ampamp strcmp (argv1, quot - quot) 0) i 0 för () om (i lt n) i BUFSIZ-data (char) realloc (data, i) int r fread (datan, 1, in, stdin) om (r lt) bryt nr annat om (n 0 0) data (char) malloc (n) för (i 0 i lt) kännetecknar 0 v strtoul (argvi1, ampe, 16) om (errno v gt 0xff e) fprintf (stderr, quotInvalid hex constant snquot , argvi1) utgång (1) datai (char) v rv RegSetValueEx (tangent, värde, 0, REGBINÄR, (const BYTE) data, n) brytfall KTINT: v strtoul (a, 0, 0) rv RegSetValueEx (nyckel, värde, 0, REGDWORD, (const BYTE) ampv, -542,6 609,9 rv ERRORINVALIDCATEGORY bryta om (data) fri (data) om (rv ERRORSUCCESS) Fel (rv) -577,7 647,14 switch (vtype) fall REGBINÄR: - skriv (data, dsize, 1, stdout) om (keytype KTBINARY) hack för (unsigned i 0 i ltsize i) printf (quot02xcquot, (unsigned char) data, (det är dsize-1. . n)) annars skriva (data, dsize, 1, stdout) brytfall REGDWORD: printf (quotlunquot, (DWORD) data) -610,6 687,31 returnera 0 -642,6 746,9 medan ((G Getoptlong , arg) 58 utils. sgml --- utils. sgml 16 feb 2006 11:17:19 -0000 1,58 utils. sgml 1 mar 2006 18:35:09 -0000 -1023,7 1023,7 ltsect2 idquotregtoolquotgtlttitlegtregtoollttitlegt ltscreengt - Uppgift: regtool. exe OPTION (lägg till krysslistan ta bort unset) KEY Användning: regtool OPTION (addcheckgetlistremoveunsetloadunload) KEY Visa eller redigera Win32-registret Åtgärder: -1034,13 1034,19 ta bort KEY ta bort KEY set KEYVALUE data. ställa in VALUE unset KEYVALUE avlägsnar VALUE från KEY load KEYSUBKEY PATH lasthopp från PATH till ny SUBKEY lossa KEYSUBKEY lossa hive och ta bort SUBKEY Alternativ för lista Åtgärd: - k, - - knappar skrivs endast nycklar - l, - lista endast utskrift VALUEs - p , --postfix som ls - p, lägger till postfix till KEY namn Alternativ för få Action: - b, - binärt tryck REGBINÄR data som hex bytes Alternativ för set Action: - b, - binär uppsättningstyp till REGBINARY (hex args eller -) - e, - Expand-string uppsättningstyp till REGEXPANDSZ - i, --integer set typ till REGDWORD - m, --multi-string set typ till REGMULTISZ -1109,6 1115,10 ltparagt ltparagtThe ltliteralgtsetltliteralgt-åtgärden anger ett värde inom en nyckel. ltliteralgt-bltliteralgt betyder dess binära data (REGBINARY). De binära värdena anges som hexbyte i argumentlistan. Om argumentet är ltliteralgt-ltliteralgt, läses binär data från stdin istället. ltliteralgt-eltliteralgt betyder det en expanderande sträng (REGEXPANDSZ) som innehåller inbäddade miljövariabler. ltliteralgt-iltliteralgt betyder att värdet är ett heltal (REGDWORD). -1122,6 1132,13 Den ltliteralgtunsetltliteralgt-åtgärden tar bort ett värde från en nyckel. ltparagt ltparagtThe ltliteralgtloadltliteralgt-åtgärden lägger till en ny undernyckel och laddar innehållet i en registerhive i den. Föräldraknappen måste vara HKEYLOCALMACHINE eller HKEYUSERS. The ltliteralgtunloadltliteralgt-åtgärden tar bort filen och tar bort undernyckeln. ltparagt ltparagt Som standard antas den sista kvoten eller kvoten vara separatorn mellan nyckeln och värdet. Du kan använda alternativet ltliteralgt-Kltliteralgt för att ge On Mar 1 20:13 skrev Christian Franke: gt Attached är version 2 av korrigeringsfilen, inklusive en uppdatering av utils. sgml gt gt REGBINARY kan nu vara eter läs som binär från stdin: gt gt echo 0: 01 02 FE FF xxd - r regtool - b uppsättning KEYBINVALUE - gt gt regtool få KEYBINVALUE regtool - b set KEYBINVALUE - gt gt eller angiven som hex-argument: gt gt regtool - b set KEYBINVALUE 01 02 FE FF gt x (regtool - b få KEYBINVALUE) gt regtool - b set KEYBINVALUE x gt gt gt Funktionerna för loadunload är oförändrade. gt gt Christian gt gt gt gt 2006-03-01 Christian Franke lthidden email gt gt gt regtool. cc: Lägg till åtgärder loadunload och alternativ - b, - binary. gt utils. sgml (regtool): Dokumentera det. Din patch ser ganska bra ut för mig, men jag har några mindre nits. Först, var lite mer verbos i din ChangeLog-post. Lägg till explicit poster för varje ändrad funktion eller global datastruktur. gt hämta revision 1.19 gt diff - u - r1.19 regtool. cc Kan du snälla använda diff-up Det hjälper (åtminstone mig) att navigera genom en patch. gt cygwinconvtowin32path (argv1, win32path) Detta händer ett par gånger. När du ringer funktioner kan du alltid lägga till ett mellanslag mellan funktionsnamnet och öppnings parentesen gt rv RegLoadKey (bas, n, win32path) gt printf (quotkey s - värdet snquot, n, värde) Varför skrivs denna printf om behövs inte, ta bort. gt -577,7 647,14 gt switch (vtype) gt gt fall REGBINÄR: gt - fwrite (data, dsize, 1, stdout) gt om (keytype KTBINARY) hack Hack Varför hack Annars, ta bort den här kommentaren. - Corinna Vinschen Var god, skicka mail om Cygwin till Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat Corinna Vinschen skrev: gt. gt gtgt printf (quotkey s - värdet snquot, n, value) gtgt gt gt Varför har den här utskriften kommenterats Om det inte behövs, ta bort. gt cvs annotera regtool. cc. 1.1 (cgf 17-feb-00): 1.1 (cgf 17-feb-00): printf (kvotvärde snquot, n, värde) 1.1 (cgf 17-feb-00): Att göra kodvaktarbetare på historisk kod var inte meningen med min lapp -) Att inte kommentera den här raden under testningen var till hjälp, så jag lämnade den orörd. gtgt -577,7 647,14 gtgt switch (vtype) gtgt gtgt fall REGBINARY: gtgt - fwrite (data, dsize, 1, stdout) gtgt om (keytype KTBINARY) hack gtgt gt gt Hack Varför hack Annars, ta bort den här kommentaren. gt För att använda quotsetquot, har keytype för ett quotgetquot-alternativ kallats ett hack för många år sedan: 1.1 (cgf 17-feb-00): fall REGEXPANDSZ: 1.3 (cgf 10-jan-01): om (keytype KTEXPAND) hack 1.1 cgf 17-feb-00): Bifogad är en ny version av patchen. Tack vare din hjälp angående SEBACKUPNAME är quotsavequot-åtgärden nu inkluderad. Exempel: Backup System Registry Hives (aka dessa fula-föråldrade filer i windowssystem32config -) för K i SAM SECURITY SOFTWARE SYSTEM gör regtool spara HKLMk quotdkquot gjort regtool spara HKU. DEFAULT quotdDEFAULTquot Slut på script Hoppa de nya funktionerna är användbara. 2006-03-02 Christian Franke lthidden email gt regtool. cc (alternativ): Lägg till binärt. (användning): Dokument loadunloadsave och - b. (findkey): Lägg till alternativparametern, lägg till loadunload. (cmdset): Lägg till KTBINARY fall. (cmdget): Lägg till hex-utgång i KTBINARY-fallet. (cmdload): Ny funktion. (cmdunload): Ny funktion. (setprivilege): Ny funktion. (cmdsave): Ny funktion. (kommandon): Lägg till belastning, lossa och spara. (huvud): Add - b utils. sgml (regtool): Dokumentera det. Index: regtool. cc RCS-fil: cvssrcsrcwinsuputilsregtool. cc, v hämtar revision 1.19 diff - u - p - r1.19 regtool. cc --- regtool. cc 15 feb 2006 10:57:17 -0000 1,19 regtool. cc 2 mar 2006 20:46:24 -0000 -10,15 10,17 detaljer. inkluderar ltstdio. hgt include ltstdlib. hgt include lterrno. hgt include ltctype. hgt include ltgetind. hgt include ltwindows. hgt include ltsyscygwin. hgt enum - KTAUTO, KTINT, KTSTRING, KTEXPAND, KTMULTI KTAUTO, KTBINARY, KTINT, KTSTRING, KTEXPAND, KTMULTI keytype KTAUTO char keyskey DEFAULTKEYSEPARATOR -32,6 34,7 statisk char progname - statisk char opties quotehiklmpqsvVK: quot static char opts quotbehiklmpqsvVK: quot int listwhat 0 int postfix 0 -62,7 65,7 statisk tomgång (FIL där stderr) fprintf (where, quotquot - quotUsage: s OPTION (add check get list remove unset) KEYnquot quotUsage: s OPTION (addcheckgetlistremoveunsetloadunloadsave) KEYnquot quotView or edit the Win32 registrynquot quotnquot quotquot, progname) -76,6 79,9 usage (FILE where stderr) quot remove KEY remove KEYnquot quot set KEYVALUE data. set VALUEnquot quot unset KEYVALUE removes VALUE from KEYnquot quot load KEYSUBKEY PATH load hive from PATH into new SUBKEYnquot quot unload KEYSUBKEY unload hive and remove SUBKEYnquot quot save KEYSUBKEY PATH save SUBKEY into new hive PATHnquot quotnquot) fprintf (where, quotquot quotOptions for list Action:nquot -83,7 89,11 usage (FILE where stderr) quot - l, --list print only VALUEsnquot quot - p, --postfix like ls - p, appends postfix to KEY namesnquot quotnquot quotOptions for get Action:nquot quot - b, --binary print REGBINARY data as hex bytesnquot quotnquot quotOptions for set Action:nquot quot - b, --binary set type to REGBINARY (hex args or -)nquot quot - e, --expand-string set type to REGEXPANDSZnquot quot - i, --integer set type to REGDWORDnquot quot - m, --multi-string set type to REGMULTISZnquot -265,7 275,7 translate (char key) void - findkey (int howmanyparts, REGSAM access) findkey (int howmanyparts, REGSAM access, int option 0) HKEY base int rv -348,9 358,44 findkey (int howmanyparts, REGSAM acces key base else - rv RegOpenKeyEx (base, n, 0, access, ampkey) - if (rv ERRORSUCCESS) - Fail (rv) if (access) rv RegOpenKeyEx (base, n, 0, access, ampkey) if (option ampamp (rv ERRORSUCCESS rv ERRORACCESSDENIED)) reopen with desired option due to missing option support in RegOpenKeyE FIXME: may create the key in rare cases (e. g. access denied in parent) HKEY key2 if (RegCreateKeyEx (base, n, 0, NULL, option, access, NULL, ampkey2, NULL) ERRORSUCCESS) if (rv ERRORSUCCESS) RegCloseKey (key) key key2 rv ERRORSUCCESS if (rv ERRORSUCCESS) Fail (rv) else if (argv1) char win32pathMAXPATH cygwinconvtowin32path (argv1, win32path) rv RegLoadKey (base, n, win32path) if (rv ERRORSUCCESS) Fail (rv) if (verbose) printf (quotkey s loaded from file snquot, n, win32path) else rv RegUnLoadKey (base, n) if (rv ERRORSUCCESS) Fail (rv) if (verbose) printf (quotkey s unloadednquot, n) printf(quotkey s value snquot, n, value) -491,7 536,7 cmdset () int i, n DWORD v, rv - char a argv1, data char a argv1, data 0 findkey (2, KEYALLACCESS) if (keytype KTAUTO) -510,6 555,43 cmdset () switch (keytype) case KTBINARY: for (n 0 argvn1 n) if (n 1 ampamp strcmp (argv1, quot-quot) 0) i n 0 for () if (i lt n) i n BUFSIZ data (char ) realloc (data, i) int r fread (d atan, 1, i-n, stdin) if (r lt 0) break n r else if (n gt 0) data (char ) malloc (n) for (i 0 i lt n i) char e errno 0 v strtoul (argvi1, ampe, 16) if (errno v gt 0xff e) fprintf (stderr, quotInvalid hex constant snquot, argvi1) exit (1) datai (char) v rv RegSetValueEx (key, value, 0, REGBINARY, (const BYTE ) data, n) break case KTINT: v strtoul (a, 0, 0) rv RegSetValueEx (key, value, 0, REGDWORD, (const BYTE ) ampv, -542,6 624,9 cmdset () rv ERRORINVALIDCATEGORY break if (data) free(data) if (rv ERRORSUCCESS) Fail (rv) -577,7 662,14 cmdget () switch (vtype) case REGBINARY: - fwrite (data, dsize, 1, stdout) if (keytype KTBINARY) hack for (unsigned i 0 i lt dsize i) printf (quot02xcquot, (unsigned char)datai, (i lt dsize-1. . n)) else fwrite (data, dsize, 1, stdout) break case REGDWORD: printf (quotlunquot, (DWORD ) data) -610,6 702,72 cmdget () return 0 int cmdload () if (argv1) usage () return 1 findkey (1, 0) return 0 int cmdunload () if (argv1) usage () return 1 findkey (1, 0) return 0 DWORD setprivilege (const char name) TOKENPRIVILEGES tp if (LookupPrivilegeValue (NULL, name, amptp. Privileges0.Luid)) return GetLastError () tp. PrivilegeCount 1 tp. Privileges0.Attributes SEPRIVILEGEENABLED HANDLE t OpenProcessToken does not work here, because main thread has its own impersonation token if (OpenThreadToken (GetCurrentThread (), TOKENADJUSTPRIVILEGES, FALSE, ampt)) return GetLastError () AdjustTokenPrivileges (t, FALSE, amptp, 0, NULL, NULL) DWORD rv GetLastError () CloseHandle (t) return rv int cmdsave () if (argv1) usage () return 1 try to set SeBackupPrivilege, let RegSaveKey report the error setprivilege (SEBACKUPNAME) REGOPTIONBACKUPREST ORE is necessary to save HKLMSECURITY findkey (1, KEYQUERYVALUE, REGOPTIONBACKUPRESTORE) char win32pathMAXPATH cygwinconvtowin32path (argv1, win32path) DWORD rv RegSaveKey (key, win32path, NULL) if (rv ERRORSUCCESS) Fail (rv) if (verbose) printf (quotkey saved to snquot, win32path) return 0 struct const char name -623,6 781,9 struct , , , , , , -642,6 803,9 main (int argc, char argv) while ((g getoptlong (argc, argv, opts, longopts, NULL)) EOF) switch (g) case b: keytype KTBINARY break case e: keytype KTEXPAND break Index: utils. sgml RCS file: cvssrcsrcwinsuputilsutils. sgml, v retrieving revision 1.58 diff - u - p - r1.58 utils. sgml --- utils. sgml 16 Feb 2006 11:17:19 -0000 1.58 utils. sgml 2 Mar 2006 20:46:30 -0000 -1023,7 1023,7 option. ltsect2 idquotregtoolquotgtlttitlegtregtoollttitlegt ltscreengt - Usage: regtool. exe OPTION (add check get list remove unset) KEY Usage: regtool OPTION (addcheckgetlistremoveunsetloadunloadsave) KEY View or edit the Win32 registry Actions: -1034,13 1034,20 Actions: remove KEY remove KEY set KEYVALUE data. set VALUE unset KEYVALUE removes VALUE from KEY load KEYSUBKEY PATH load hive from PATH into new SUBKEY unload KEYSUBKEY unload hive and remove SUBKEY save KEYSUBKEY PATH save SUBKEY into new hive PATH Options for list Action: - k, --keys print only KEYs - l, --list print only VALUEs - p, --postfix like ls - p, appends postfix to KEY names Options for get Action: - b, --binary print REGBINARY data as hex bytes Options for set Action: - b, --binary set type to REGBINARY (hex args or -) - e, --expand-string set type to REGEXPANDSZ - i, --integer set type to REGDWORD - m, --multi-string set type to REGMULTISZ -1109,6 1116,10 accidentally removing too much. ltparagt ltparagtThe ltliteralgtsetltliteralgt action sets a value within a key. ltliteralgt-bltliteralgt means its binary data (REGBINARY). The binary values are specified as hex bytes in the argument list. If the argument is ltliteralgt-ltliteralgt, binary data is read from stdin instead. ltliteralgt-eltliteralgt means its an expanding string (REGEXPANDSZ) that contains embedded environment variables. ltliteralgt-iltliteralgt means the value is an integer (REGDWORD). -1122,6 1133,17 a regular string. The ltliteralgtunsetltliteralgt action removes a value from a key. ltparagt ltparagtThe ltliteralgtloadltliteralgt action adds a new subkey and loads the contents of a registry hive into it. The parent key must be HKEYLOCALMACHINE or HKEYUSERS. The ltliteralgtunloadltliteralgt action unloads the file and removes the subkey. ltparagt ltparagtThe ltliteralgtsaveltliteralgt action saves a subkey into a registry hive. ltparagt ltparagt By default, the last quotquot or quotquot is assumed to be the separator between the key and the value. You can use the ltliteralgt-Kltliteralgt option to provide On Mar 2 21:59, Christian Franke wrote: gt Corinna Vinschen wrote: gt gt. gt gt gt gtgt printf(quotkey s value snquot, n, value) gt gtgt gt gt gt gtWhy is this printf commented out If its not needed, please remove. gt gt gt gt cvs annotate regtool. cc gt. gt 1.1 (cgf 17-Feb-00): gt 1.1 (cgf 17-Feb-00): printf(quotkey s value snquot, n, value) gt 1.1 (cgf 17-Feb-00): gt gt Doing code-janitor work on historic code was not the intent of my patch -) Urgh, sorry about that. While scanning your patch I missed that this printf isnt new but already in the code. gt gtgt -577,7 647,14 gt gtgt switch (vtype) gt gtgt gt gtgt case REGBINARY: gt gtgt - fwrite (data, dsize, 1, stdout) gt gtgt if (keytype KTBINARY) hack gt gtgt gt gt gt gtHack Why hack Otherwise, please remove this comment. gt gt gt gt Because using quotsetquot keytype for as a quotgetquot option has been gt called a hack many years ago: gt gt 1.1 (cgf 17-Feb-00): case REGEXPANDSZ: gt 1.3 (cgf 10-Jan-01): if (keytype KTEXPAND) hack gt 1.1 (cgf 17-Feb-00): Well, I cant see a hack in what youre using KTBINARY here. I removed the comment from your patch. gt Attached is a new version of the patch. gt Thanks to your help regarding SEBACKUPNAME, the quotsavequot action is now gt included. gt 2006-03-02 Christian Franke lthidden email gt gt gt regtool. cc (options): Add binary. gt (usage): Document loadunloadsave and - b. gt (findkey): Add options parameter, add loadunload. gt (cmdset): Add KTBINARY case. gt (cmdget): Add hex output in KTBINARY case. gt (cmdload): New function. gt (cmdunload): New function. gt (setprivilege): New function. gt (cmdsave): New function. gt (commands): Add load, unload and save. gt (main): Add - b gt utils. sgml (regtool): Document it. I applied the patch. I just had to reformat your ChangeLog slightly (a TAB before all lines, no extra indentation for lines which dont start with a ). Btw. since you seem to be interested in hacking the registry. would you also be interested to introduce registry write access below procregistry inside of the Cygwin DLL That would be extra cool. Im not quite sure how to handle the mapping from file types to registry key types, but there might be some simple way which Im just too blind to see. -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat On 03 March 2006 09:46, Corinna Vinschen wrote: gt gt Btw. since you seem to be interested in hacking the registry. would gt you also be interested to introduce registry write access below gt procregistry inside of the Cygwin DLL That would be extra cool. gt Im not quite sure how to handle the mapping from file types to gt registry key types, but there might be some simple way which Im just gt too blind to see. Hey, how about using pseudo filename-extensions on the pseudo-files that represent registry keys echo quotFooquot gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. sz creates procregistryHKEYCURRENTUSERSoftwareAppKeyValueName, type REGSZ, content quotFooltNULgtquot echo quotWINDIRquot gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. xsz creates procregistryHKEYCURRENTUSERSoftwareAppKeyValueName as REGEXPANDSZ echo quot23quot gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. dword echo quot0x17quot gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. dword dd bs1024 count3 ifdevrandom ofprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. bin etc etc. (We might even want a CYGWIN option to make the extension show up in dir listings, but it wouldnt be backwardly-compatible to do so in general). Hmm, and how about for MULTISZ taking account of the open mode echo quotString1quot gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz echo quotString2quot gtgtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz echo quotString3quot gtgtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz echo quotString4quot gtgtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz od - c lt procregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz String10String20String30String400 cheers, DaveK -- Cant think of a witty. sigline today. On Mar 3 13:12, Dave Korn wrote: gt On 03 March 2006 09:46, Corinna Vinschen wrote: gt gt gt gt gt Btw. since you seem to be interested in hacking the registry. would gt gt you also be interested to introduce registry write access below gt gt procregistry inside of the Cygwin DLL That would be extra cool. gt gt Im not quite sure how to handle the mapping from file types to gt gt registry key types, but there might be some simple way which Im just gt gt too blind to see. gt gt gt Hey, how about using pseudo filename-extensions on the pseudo-files that gt represent registry keys gt gt i. e gt gt echo quotFooquot gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. sz gt creates procregistryHKEYCURRENTUSERSoftwareAppKeyValueName, type gt REGSZ, content quotFooltNULgtquot gt gt echo quotWINDIRquot gt gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. xsz gt creates procregistryHKEYCURRENTUSERSoftwareAppKeyValueName as gt REGEXPANDSZ gt gt echo quot23quot gt gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. dword gt echo quot0x17quot gt gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. dword gt gt dd bs1024 count3 ifdevrandom gt ofprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. bin gt gt touch procregistryHKEYCURRENTUSERSoftwareAppKeyValueName. none gt gt etc etc. (We might even want a CYGWIN option to make the extension show up gt in dir listings, but it wouldnt be backwardly-compatible to do so in gt general). gt gt Hmm, and how about for MULTISZ taking account of the open mode gt gt echo quotString1quot gt gtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz gt echo quotString2quot gt gtgtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz gt echo quotString3quot gt gtgtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz gt echo quotString4quot gt gtgtprocregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz gt od - c lt procregistryHKEYCURRENTUSERSoftwareAppKeyValueName. msz gt String10String20String30String400 Thats actually an interesting idea. I was always thinking along the lines of using POSIX file types (plain, socket, pipe. ). However, file suffixes is something were already suffering from a lot (its not by chance that SUFFix and SUFFer are so similar, IMHO). What if a key quotfoo. szquot really exists and somebody wants to create a registry key quotfooquot When reading quotfooquot, which file is meant Whats the order of checking suffixes When somebody writes to a key quotfooquot, whats the default suffix, er. key type Or does that fail with an error message -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat Open this post in threaded view Report Content as Inappropriate RE: Patch regtool: Add loadunload commands and --binary option gt Thats actually an interesting idea. I was always thinking along gt the lines of using POSIX file types (plain, socket, pipe. ). gt gt However, file suffixes is something were already suffering from gt a lot (its not by chance that SUFFix and SUFFer are so similar, IMHO). Heh, yeh, who could ever forget the. exe. lnk. exe. lnk. lnk. exe troubles However, were in a special situation here, its not really a dir tree and the things in it arent really files, and we may be able to get away with it. I posted the idea so that others could see if it works or if they can see problems with the approach. gt What if a key quotfoo. szquot really exists and somebody wants to create gt a registry key quotfooquot No problem. If you want to create foo, you write to quotfoo. szquot. If you want to create foo. sz, you have to write to quotfoo. sz. szquot. Unless of course foo. sz is a dword, in which case youd write to quotfoo. sz. dwquot, etc etc. gt When reading quotfooquot, which file is meant There can only be one at a time, because in the registry there can only be one value with the name foo, regardless of what type it has. gt Whats the order of checking suffixes Im proposing that the suffix is only used when creating or writing to the file, to determine the type, but the suffix is stripped off for generating the actual name, and is not shown in dir listings, and is not required to open the file for read. gt When somebody writes to a key quotfooquot, whats the default suffix, gt er. key type Or does that fail with an error message Either I havent a strong opinion on the matter. cheers, DaveK -- Cant think of a witty. sigline today.
No comments:
Post a Comment