[c++]low-level fat32 schrijven

Pagina: 1
Acties:

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
Ik ben dus bezig om low-level (sector voor sector) in een bestaand fat32 systeem te schrijven. Momenteel alleen attributen, maar later meer. Ik loop nu tegen een probleem aan. Ik schrijv namelijk in wat sectoren (attributen verandere), writefile geefct aan dat het correct gedaan is, winhex (hex-editor) ook, maar windows verkenner zelf niet. Ik denk dat het aan de cache ofzo ligt.

Heeft iemand hier meer ervaring mee?

if broken it is, fix it you should


Verwijderd

Ik heb een keer een FAT16 bestandssysteem gemaakt, maar als jij buiten windows om een wijziging maakt zal je eerst je computer opnieuw moeten opstarten. Anders pakt windows het niet.

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
Verwijderd schreef op 17 februari 2003 @ 13:35:
Ik heb een keer een FAT16 bestandssysteem gemaakt, maar als jij buiten windows om een wijziging maakt zal je eerst je computer opnieuw moeten opstarten. Anders pakt windows het niet.
Wat is buiten windows? ik bedoel als ik een attribuut wijzig moet dit toch meteen te zien zijn....

if broken it is, fix it you should


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:30

Dido

heforshe

elgringo schreef op 17 February 2003 @ 13:40:
Wat is buiten windows? ik bedoel als ik een attribuut wijzig moet dit toch meteen te zien zijn....

Als een programma direct low-level gaat klooien op een schijf heeft dat niets meer met windows te maken, dus is het buiten windows.

Was het niet zo dat er sowieso een aantal kopien van je FAT op de schijf staan? Pas je die allemaal aan?

Verder kan het natuurlijk heel goed zijn dat windows een kopie van de FAT bewaart (in RAM bijv.) en die alleen maar refresht als ie daar een reden toe heeft. Als jij windows vertelt dat er iest gewijzigd is of moet worden dus, of na een reboot.

Wat betekent mijn avatar?


  • Exirion
  • Registratie: Februari 2000
  • Laatst online: 19:24

Exirion

Gadgetfetisjist

Dido schreef op 17 februari 2003 @ 13:43:
Verder kan het natuurlijk heel goed zijn dat windows een kopie van de FAT bewaart (in RAM bijv.) en die alleen maar refresht als ie daar een reden toe heeft. Als jij windows vertelt dat er iest gewijzigd is of moet worden dus, of na een reboot.
Je kunt via de API exclusieve rechten voor een schijf krijgen door 'm te locken. Ik heb het truucje zelf wel eens uitgehaald voor een eigen kopieerbeveiliging op een floppy.

"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
Dido schreef op 17 February 2003 @ 13:43:

[...]

Als een programma direct low-level gaat klooien op een schijf heeft dat niets meer met windows te maken, dus is het buiten windows.

Was het niet zo dat er sowieso een aantal kopien van je FAT op de schijf staan? Pas je die allemaal aan?

Verder kan het natuurlijk heel goed zijn dat windows een kopie van de FAT bewaart (in RAM bijv.) en die alleen maar refresht als ie daar een reden toe heeft. Als jij windows vertelt dat er iest gewijzigd is of moet worden dus, of na een reboot.
Het is nog geen fat wijziging, alleen een attribuut (van een diretorie entry) en deze moet zo aan te passen zijn (wat ook wel gebeurd maar niet meteen, een soort niet gewenste tussenliggende cache)

if broken it is, fix it you should


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
Exirion schreef op 17 February 2003 @ 13:48:
[...]

Je kunt via de API exclusieve rechten voor een schijf krijgen door 'm te locken. Ik heb het truucje zelf wel eens uitgehaald voor een eigen kopieerbeveiliging op een floppy.
Kan je hier wat meer info over geven?

if broken it is, fix it you should


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

CreateFile kan ook schijven in raw-mode openen met een speciale vorm als bestandsnaam (wel 2k/XP only), zoals \\.\C:, of \\.\PHYSICALDRIVE2. De handle die je dan krijgt kun je gebruiken voor DeviceIoControl (en ook Read/WriteFile voor zover ik weet). Ik dacht dat je automatisch een lock kreeg als je deze methode gebruikt.
edit:
Hmm zie net dat je WriteFile gebruikt dus je zal deze methode al wel gebruikt hebben...


edit2:
Er is wel een FSCTL_(UN)LOCK_VOLUME control code voor DeviceIoControl waarmee je een volume kan (un)locken. In de documentatie staat:

This operation is useful for applications that need exclusive access to a volume for a period of time—for example, disk utility programs. [...] The system flushes all cached data to the volume before locking it. For example, any data held in a lazy-write cache is written to the volume.

[ Voor 62% gewijzigd door madwizard op 17-02-2003 17:40 ]

www.madwizard.org

Pagina: 1