Ik ben voor een afstudeeropdracht bezig met hardeschijven waar een apart filesystem opstaat, en moet een applicatie onder windows schrijven die de data daarop kan gebruiken. Hiervoor moet ik dus bij de sectoren komen. Het leek me een beetje overdreven om een volledige filesystem driver te schrijven, dus was ik benieuwd of ik met bepaalde functies gewoon het filesystem kon omzeilen, of MOET ik perse een kerneldriver schrijven om die data via driver-read- en write-routines door te geven?
Misschien kun je met een speciaal device naam ( zoiets als "\\.\a" ) bij je device komen en dan met ReadFile wat doen, of met speciale DeviceIoCtl's, maar ik geef je niet veel kans.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Zelfs als je het filesystem zomaar kon omzeilen, hoe weet je computer dan met wat voor bestandssysteem hij te maken heeft? Hoe weet hij welke file waar staat? Je zal toch ergens een indicatie moeten hebben van wat waar staat. En als je dat geïmplementeerd wil hebben, dan zul je toch echt een eigen driver moeten hebben, lijkt me. 
(Dit zeg ik puur op basis van logisch nadenken, en niet op basis van feitelijke kennis, dus schop me maar als het niet klopt.
)
(Dit zeg ik puur op basis van logisch nadenken, en niet op basis van feitelijke kennis, dus schop me maar als het niet klopt.
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Misschien dat je in de code van explore2fs kunt ontdekken hoe ze het daar doen. (Vast al bekend, maar dit is een tool waarme je ext2 of ext3 filesystems kan lezen.)
How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.
Bestaat er al geen driver voor dit "aparte" bestandssysteem? Welke is het trouwens, of mag/kan je dat niet zeggen?
Om een disk met daarop een-of-anders filesysteem te kunnen benaderen vanuit Windows moet je inderdaad een filesystem-driver ontwikkelen.
Maar dat is toch ook precies wat je opdracht vereist? Of wil je afstudeerbegeleider niets met de bestanden doen, maar alleen de bitjes van die schijf met dat een-of-andere filesysteem zien?
Maar dat is toch ook precies wat je opdracht vereist? Of wil je afstudeerbegeleider niets met de bestanden doen, maar alleen de bitjes van die schijf met dat een-of-andere filesysteem zien?
Siditamentis astuentis pactum.
Ik krijg de indruk dat TS dit stuk al wel weet; als hij rauwe sector data van de disk kan lezen kan TS hetgene eruit halen wat hij nodig heeft.-NMe- schreef op dinsdag 05 april 2005 @ 17:33:
Zelfs als je het filesystem zomaar kon omzeilen, hoe weet je computer dan met wat voor bestandssysteem hij te maken heeft? Hoe weet hij welke file waar staat? Je zal toch ergens een indicatie moeten hebben van wat waar staat.
Volgens mij zint het TS niet om het daadwerkelijk als driver te implementeren (want hoe moet dat dan, aan welke API moet het voldoen, etc). Gewoon lompe IO-Control calls werken makkelijker denk ik...En als je dat geïmplementeerd wil hebben, dan zul je toch echt een eigen driver moeten hebben, lijkt me.
correct?
Uit de MSDN:
The CreateFile function creates or opens a file, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, or pipe
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
De openingspost zegt niet of het om een bestaand filesystem gaat, of om een denkbeeldig filesystem. Begin eens met de specs van het te targetten filesysteem.
Dan nog vraag ik me af of je wel rauwe sectors mag lezen van DeviceIoCtl.
Hmm, lijkt erop dat je dan gewoon met ReadFile mag lezen ...
[ Voor 14% gewijzigd door farlane op 05-04-2005 21:54 ]
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Aangezien MSSQL ook raw kan lezen en schrijven, zonder afaik een fs driver te gebruiken, moet het mogelijk zijn.
Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.
FS driver is volgens mij alleen nodig als je wilt dan Windows weet dat het een file systeem is, en dat het dus verschijnt in Explorer etcetera.
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Zie in de code van die explore2fs dat ze wel een interne ReadFile API aanroepen, wat zo te zien iets te maken heeft met een 'file pointer'. Zal wel met de grootte van die pointer te maken hebben denk ik.
Waarom gebruikt MSSQL niet de normale manier dan?StevenK schreef op dinsdag 05 april 2005 @ 22:18:
Aangezien MSSQL ook raw kan lezen en schrijven, zonder afaik een fs driver te gebruiken, moet het mogelijk zijn.
[ Voor 42% gewijzigd door farlane op 05-04-2005 23:24 ]
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Minder overhead? Als je niet alle functies van het filesysteem nodig hebt, en je weet wat voor activiteiten je met die data gaat doen, is het heel goed mogelijk om dat efficiënter op te slaan dan met huis-tuin-en-keuken fs'enfarlane schreef op dinsdag 05 april 2005 @ 23:23:
Waarom gebruikt MSSQL niet de normale manier dan?
MSSQL kan beide gebruiken; maar zeker met heel grote databases is een filesystem een enorme overhead, wanneer je op een volume maar één bestand neerzet. Denk bij NTFS alleen al aan de transactie-logging, die op een MSSQL database niet nodig is.farlane schreef op dinsdag 05 april 2005 @ 23:23:
Waarom gebruikt MSSQL niet de normale manier dan?
Overigens kun je met raw partitions onder MSSQL dus ook maar één log of data per partitie hebben.
Het ging er mij om dat MSSQL kan werken op raw partitions zonder FS driver.
Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.
Je kan met DeviceIoControl direct de diskdriver aanspreken. Je moet dan alleen wel weten hoe die interface in elkaar zit. De NTFS en FAT driver interface is grotendeels beschreven in de DDK; waar je informatie over de disk driver interface kan vinden, weet ik niet.
Correct!MrBucket schreef op dinsdag 05 april 2005 @ 17:52:
[...]
Ik krijg de indruk dat TS dit stuk al wel weet; als hij rauwe sector data van de disk kan lezen kan TS hetgene eruit halen wat hij nodig heeft.
[...]
Volgens mij zint het TS niet om het daadwerkelijk als driver te implementeren (want hoe moet dat dan, aan welke API moet het voldoen, etc). Gewoon lompe IO-Control calls werken makkelijker denk ik...
correct?
Ik hoef niet aan MS-Explorer duidelijk te maken hoe de bestandjes en filestructuur eruit ziet, zolang ik maar blok voor blok de data eruit kan halen.
Er is idd al eens eerder een filesystemdriver voor dit "aparte" FS geschreven (mag niet zeggen waar het voor is, bedrijfsgeheim enzo), maar dat was voor een embedded platform, en de documentatie is niet echt fatsoenlijk geschreven, dus dat ben ik nog aan het ontcijferen...
Ook ben ik ook wel bezig om de DDK te leren, maar jullie begrijpen maybe wel dat dat niet eenvoudig is.
Ik zal eens proberen om gewoon met readfile wat dingen te forceren, en anders zal ik idd een drivertje met eenvoudige read en write-functies moeten schrijven, en al het complexere op een hoger niveautje uitvoeren.
Das een probleem want je moet hier niet de FileSystem driver aanspreken, maar je fysieke drive. Anywayz, met CreateFile je fysieke drive openen en dan ReadFile en consorten gebruiken lijkt voldoende.The End schreef op woensdag 06 april 2005 @ 11:26:
Je kan met DeviceIoControl direct de diskdriver aanspreken. Je moet dan alleen wel weten hoe die interface in elkaar zit. De NTFS en FAT driver interface is grotendeels beschreven in de DDK; waar je informatie over de disk driver interface kan vinden, weet ik niet.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Exact, de DDK en gedoe met drivers zal niet nodig zijn.
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
Ik weet niet of hier wat nuttige documentatie staat? Het gaat niet alleen over ext2, maar ook over hoe je hier drivers voor schrijft voor Windows; misschien staat er een aanwijzing hoe je het af kunt zonder drivers.
[ Voor 14% gewijzigd door Verwijderd op 06-04-2005 14:20 ]
<kuch>[rml]zwippie in "[ Win32]Filesystem omzeilen"[/rml]</kuch>Verwijderd schreef op woensdag 06 april 2005 @ 14:19:
Ik weet niet of hier wat nuttige documentatie staat? Het gaat niet alleen over ext2, maar ook over hoe je hier drivers voor schrijft voor Windows; misschien staat er een aanwijzing hoe je het af kunt zonder drivers.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
So far so good, ik ben al in staat geweest om een binair image te maken van een 128MB USB-stick, en die image bekeken met de binaire editor van Visual Studio.NET, en daar kan je idd de filesystem data in herkennen. Daar was ik dus wel blij om... maar het is me nog niet gelukt om mijn USB-stick te vullen met 0-etjes (errorcode=5) maar misschien is dat ook een slecht idee? Heeft iemand daar ervaring mee?
Ik was gewoon benieuwd of ik ook WriteFile kon gebruiken, maar blijkbaar niet... of zal ik een fout hebben gemaakt?
Naja, ik ben het zat hier op kantoor, ik ga even terug naar huis om GTR te spelen
Ik was gewoon benieuwd of ik ook WriteFile kon gebruiken, maar blijkbaar niet... of zal ik een fout hebben gemaakt?
Naja, ik ben het zat hier op kantoor, ik ga even terug naar huis om GTR te spelen
Errorcode 5 is Access Denied. Wat zijn de parameters die je meegeeft aan CreateFile?Grimm9mm schreef op woensdag 06 april 2005 @ 17:07:
So far so good, ik ben al in staat geweest om een binair image te maken van een 128MB USB-stick, en die image bekeken met de binaire editor van Visual Studio.NET, en daar kan je idd de filesystem data in herkennen. Daar was ik dus wel blij om... maar het is me nog niet gelukt om mijn USB-stick te vullen met 0-etjes (errorcode=5) maar misschien is dat ook een slecht idee? Heeft iemand daar ervaring mee?
Ik was gewoon benieuwd of ik ook WriteFile kon gebruiken, maar blijkbaar niet... of zal ik een fout hebben gemaakt?
Naja, ik ben het zat hier op kantoor, ik ga even terug naar huis om GTR te spelen
En heb je wel administrator rechten?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Physical Disks and Volumes
You can use the CreateFile function to open a physical disk drive or a volume. The function returns a handle that can be used with the DeviceIoControl function. This enables you to access the disk's partition table. It is potentially dangerous to do so, since an incorrect write to a disk could make its contents inaccessible. The following requirements must be met for such a call to succeed:
* The caller must have administrative privileges. For more information, see Running with Special Privileges.
* The dwCreationDisposition parameter must have the OPEN_EXISTING flag.
* When opening a volume or floppy disk, the dwShareMode parameter must have the FILE_SHARE_WRITE flag.
When opening a physical drive, x, the lpFileName string should be of the form \\.\PHYSICALDRIVE<x>. Hard disk numbers start at zero. The following table shows some example physical drive strings.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Mijn useraccount is wel lid van de groep administrators, maar ik krijg nog steeds error #5... dus ik zal wel ingelogd moeten zijn als local administrator. Is er geen manier om dat te ontwijken? Het zou lullig zijn alsik daarvoor toch een kerneldriver zou moeten schrijven. Hoe ontwijkt een applicatie als partitionmagic en format dat soort limitaties? Die hebben immers ook geen drivers geinstalleerd.
Heb je de source van die explore2fs al gechecked?
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Het maakt niet uit of je lid bent van de local administrators groep of dat je als administrator inlogd. Je hebt dezelfde rechten bij beide. Het kan zijn dat je restore (en backup?) rechten aan moet zetten. Of 'act as part of the operating system'.Grimm9mm schreef op donderdag 07 april 2005 @ 09:27:
Mijn useraccount is wel lid van de groep administrators, maar ik krijg nog steeds error #5... dus ik zal wel ingelogd moeten zijn als local administrator. Is er geen manier om dat te ontwijken? Het zou lullig zijn alsik daarvoor toch een kerneldriver zou moeten schrijven. Hoe ontwijkt een applicatie als partitionmagic en format dat soort limitaties? Die hebben immers ook geen drivers geinstalleerd.
Wat je ook kan proberen om niet helemaal aan het begin te schrijven. Misschien zijn er stukjes readonly?
Post eens hoe je die CreateFile en je WriteFile aanroept?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
op de volgende manier probeerde ik allemaal nulletjes op een USB-stick te schrijven, in essentie hoort het volledige oppervlak van zon flashstick toch beschrijfbaar te zijn? Of begint dat pas vanaf een bepaald adres?
Hierbij is buffer een array van bytes met de waarde 0
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| device = CreateFile(
deviceName,
GENERIC_READ,
FILE_SHARE_WRITE,NULL,
OPEN_EXISTING,
0,NULL);
if (device==INVALID_HANDLE_VALUE)
return FALSE;
while (result)
{
result = WriteFile(device,&buffer,BUFFERSIZE,&nbw,NULL);
if (!result)
printf("Errorcode: %d", GetLastError());
} |
Hierbij is buffer een array van bytes met de waarde 0
Er staat me er iets van bij dat je voor het schrijven naar een physical drive volume eerst het ding moest locken, probeer eens de FSCTL_LOCK_VOLUME operation uit te voeren op je handle met DeviceIoControl en dan vervolgens te schrijven (en unlocken).
Edit: Die control code is trouwens wel alleen voor volumes (\\.\x:), niet voor physical drives (\\.\PHYSICALDRIVEx), weet niet welke je nu gebruikt...
Edit: Die control code is trouwens wel alleen voor volumes (\\.\x:), niet voor physical drives (\\.\PHYSICALDRIVEx), weet niet welke je nu gebruikt...
[ Voor 40% gewijzigd door madwizard op 07-04-2005 14:54 ]
Tja, ik gebruik toch \\.\PhysicalDrive1 als apparaat, dus ik werk niet met volumes... die schijf is immers niet voor een OS gepartitioneerd.
Misschien handig om ook GENERIC_WRITE access te vragen, anders mag je uberhaupt niet schrijven naar die handleGrimm9mm schreef op donderdag 07 april 2005 @ 14:22:
code:
1 2 3 4 5 6device = CreateFile( deviceName, GENERIC_READ, FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0,NULL);
lijkt mij correct, als ik in de source van truecrypt -> format.c kijk zie ik dit:
/edit: dat is dus wel WRITE ipv READ wat JIJ probeert.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| if (bDevice == TRUE) { dev = CreateFile (lpszFilename, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (dev == INVALID_HANDLE_VALUE) { // Try opening device in shared mode dev = CreateFile (lpszFilename, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (dev != INVALID_HANDLE_VALUE) { if (IDNO == MessageBox (hwndDlg, getstr (IDS_DEVICE_IN_USE_FORMAT), lpszTitle, MB_YESNO|MB_ICONWARNING|MB_DEFBUTTON2)) { CloseHandle (dev); dev = INVALID_HANDLE_VALUE; } } } } |
/edit: dat is dus wel WRITE ipv READ wat JIJ probeert.
[ Voor 7% gewijzigd door leuk_he op 07-04-2005 15:24 ]
Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.
Ja, dat uitlezen is dus allang gelukt, maar het liefst zou ik graag gewoon een 1-on-1 on the fly kopie willen maken tussen 2 USB-sticks van gelijke grootte, of van andere gelijkwaardige schijven.leuk_he schreef op donderdag 07 april 2005 @ 15:15:
/edit: dat is dus wel WRITE ipv READ wat JIJ probeerd.
In principe zou dat niet uit mogen maken nee, maar ik heb meerdere keren installatie problemen gehad omdat ik niet als Administrator ingelogd was, maar met een account dat lid was van de Administrators group. Het is dus niet zo zwart/wit...The End schreef op donderdag 07 april 2005 @ 11:03:
[...]
Het maakt niet uit of je lid bent van de local administrators groep of dat je als administrator inlogd. Je hebt dezelfde rechten bij beide. Het kan zijn dat je restore (en backup?) rechten aan moet zetten. Of 'act as part of the operating system'.
Wat je ook kan proberen om niet helemaal aan het begin te schrijven. Misschien zijn er stukjes readonly?
Vroeger was alles beter... Geniet dan maar van vandaag, morgen is alles nog slechter!
Duh, je opent 'm voor GENERIC_READ, en vervolgens ga je WriteFile aanroepen. What's wrong with this pictureGrimm9mm schreef op donderdag 07 april 2005 @ 14:22:
op de volgende manier probeerde ik allemaal nulletjes op een USB-stick te schrijven, in essentie hoort het volledige oppervlak van zon flashstick toch beschrijfbaar te zijn? Of begint dat pas vanaf een bepaald adres?
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14device = CreateFile( deviceName, GENERIC_READ, FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0,NULL); if (device==INVALID_HANDLE_VALUE) return FALSE; while (result) { result = WriteFile(device,&buffer,BUFFERSIZE,&nbw,NULL); if (!result) printf("Errorcode: %d", GetLastError()); }
Hierbij is buffer een array van bytes met de waarde 0
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Grimm9mm schreef op donderdag 07 april 2005 @ 15:19:
[...]
Ja, dat uitlezen is dus allang gelukt, maar het liefst zou ik graag gewoon een 1-on-1 on the fly kopie willen maken tussen 2 USB-sticks van gelijke grootte, of van andere gelijkwaardige schijven.
edit:
sick proxy hier
sick proxy hier
Met mini stukje code probeert iets naar een file die je voor read hebt geopend te schrijven. Logisch toch dat dat niet lukt.
Maar ik probeerde ook al te hinten: het open source programma truecrypt (ff googlen
[ Voor 17% gewijzigd door leuk_he op 07-04-2005 15:35 ]
Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.
Het kan zijn dat bijvoorbeeld alleen de administrator rechten heeft op een bepaald deel van de registry, of bepaalde bestanden/directories via ACLs.c70070540 schreef op donderdag 07 april 2005 @ 15:20:
[...]
In principe zou dat niet uit mogen maken nee, maar ik heb meerdere keren installatie problemen gehad omdat ik niet als Administrator ingelogd was, maar met een account dat lid was van de Administrators group. Het is dus niet zo zwart/wit...
Dat heeft echter niks te maken met de privileges van je account. CreateFile checkt of je account bepaalde 'privileges' heeft. (Act as part of the operation system, Backup/Restore rights e.d. Alles wat je in de security policies kan vinden). Daarnaast kijkt hij of je rechten hebt via de ACL.
Je kan de security policy natuurlijk wel aanpassen om ervoor te zorgen dat alleen administrator bepaalde rechten heeft. Echter is het bij een installatie van Windows default zo, dat de administrators groep rechten toegekend krijgen en niet het administrator account.
Shit,idd, ik zat me te druk te maken om dat administratorgedoe om te zien dat hij nog op GENERIC_READ stond.
Ik heb em dus idd nu vol kunnen schrijven met 0'etjes, maar wat me opviel, hij blijft doorschrijven voorbij de limieten dat er gelezen kan worden, WriteFile blijft elke keer de waarde 1 retourneren.
Ik heb em dus idd nu vol kunnen schrijven met 0'etjes, maar wat me opviel, hij blijft doorschrijven voorbij de limieten dat er gelezen kan worden, WriteFile blijft elke keer de waarde 1 retourneren.
En wat zegt de lpNumberOfBytesWritten parameter? Staat daarin ook doodleuk het aantal bytes dat je hebt opgedragen om te schrijven?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Het is al vaak gezegd dat je GENERIC_WRITE moet gebruiken en het staat ook heel duidelijk in de documentatie van WriteFile.Grimm9mm schreef op donderdag 07 april 2005 @ 16:23:
Shit,idd, ik zat me te druk te maken om dat administratorgedoe om te zien dat hij nog op GENERIC_READ stond.
Ik heb em dus idd nu vol kunnen schrijven met 0'etjes, maar wat me opviel, hij blijft doorschrijven voorbij de limieten dat er gelezen kan worden, WriteFile blijft elke keer de waarde 1 retourneren.
Je krijg een parameter terug 'lpNumberOfBytesWritten'. Als die 0 is, is er niks geschreven.
Verwijderd
/vrijwel geheel offtopic:
Gezondheid. Voor zover ik het zie zijn het twee verschillende projecten, en de link die ik gaf was naar de resources-sectie, welke meer informatie mbt. fs drivers dan die andere link dus ik zie je probleem niet.
[ Voor 7% gewijzigd door Verwijderd op 07-04-2005 19:40 ]
Pagina: 1