CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3
  1. #1
    Join Date
    Aug 2001
    Posts
    11

    How to access ADS(treams)?

    Hi,
    I'm looking for a way to access (read/write)Alternate Data Streams (ADS) on a NTFS-Drive.
    Can anyone give me code, links or tips how to do this under win2k. I need, at best, code for VB and VC++.

    Thanks in advance,
    Kan


  2. #2
    Join Date
    Aug 2001
    Posts
    11

    How to access ADS(treams)?

    So no one knows something about this NTFS-feature?
    That's not good!
    Even no one knows where I might get an answer (other Board, Person, etc.)?

    Thx,
    Kan


  3. #3
    Join Date
    Nov 2001
    Posts
    1

    Re: How to access ADS(treams)?

    Hi!
    I did some demonstration with ADS. Explanations are in my language (Croatian), so if you need them I can translate them for You. This is very simple code for demonstrating purpose only but it shows how to write and read them. It's in C.
    It's not finished because I need to determine the real size of complete file with ADS in it.
    Hope I was helpful!
    Tanja



    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <iostream>
    #include <string>
    #define MAXN 255




    int WINAPI WinMain (HINSTANCE hinstExe, HINSTANCE hinstPrev,
    LPSTR pszCmdLine, int nCmdShow)

    {
    //varijable za dobivanje podataka o volumenu iz fje GetVolumeInformation

    char NazivSustava[MAXN];
    char Disk[MAXN];
    char ImeVolumena[MAXN];
    DWORD SerijskiBroj;
    DWORD DuljinaSus;
    DWORD Zastavice;

    //pomocne - kontrolne varijable

    char Provjera[MAXN]="NTFS"; // za usporedbu s NazivSustava
    char Direktorij[MAXN]="Test\\"; // ime direktorija u kojem cemo raditi
    char Putanja[MAXN]; // putanja direktorija "Test"
    int ProvjeraNTFS; // kontrola da li je dat.sustav NTFS

    //varijable za rad s datotekom

    HANDLE hdat; //potrebno za rukovanje s datotekama
    LPCTSTR ImeDat=TEXT("Proba.txt"); //naziv datoteke
    LPCTSTR ImeSlijed=TEXT("Proba.txt:Slijed.txt"); //naziv imenovanog slijeda
    char TekstZaUpisat[MAXN]="Ovo je tekst unutar imenovanog slijeda";
    char TekstZaProcitat[MAXN]={0}; //polje za smještanje procitanog teksta
    //kod funkcije ReadFile
    DWORD BrUpisanihBajtova; //potrebno za funkciju WriteFile
    DWORD VelicinaSlijed;
    DWORD VelicinaGlavniTok;

    //pocetak rada

    printf("\n*****************************************************************");
    printf("\n Program za demonstraciju podatkovnih slijedova na NTFS volumenu!\n");
    printf("*****************************************************************");
    printf("\n\n Na kojem volumenu zelite raditi (format upisa je npr. c:\\):\n\n");
    scanf (" %s", &Disk);

    //dobivanje informacija o zeljenom volumenu

    GetVolumeInformation(
    Disk,
    ImeVolumena,
    MAXN,
    &SerijskiBroj,
    &DuljinaSus,
    &Zastavice,
    NazivSustava,
    MAXN);
    printf("\n Izabrali ste disk s %s datotecnim sustavom.\n", NazivSustava);

    //provjera da li je datotecni sustav NTFS

    ProvjeraNTFS=strcmp(Provjera, NazivSustava); //usporedjivanje stringova

    // ovisno o ProvjeraNTFS nastavlja se s programom ili se on prekida

    if (ProvjeraNTFS==0) { //ako nema razlike u stringovima nastavlja se
    printf("\n Mozemo nastaviti s demonstracijom datotecnih slijedova.\n");

    //kreiranje putanje direktorija za nasu datoteku

    strcpy(Putanja, Disk); //dodatna varijabla s istom vrijednoscu kao i Disk
    strcat(Putanja, Direktorij); //zadanom disku pridružujem direktorij Test
    printf("\n Direktorij s kojim radimo je: %s.\n", Putanja);

    //kreiranje direktorija sa zadanom putanjom

    CreateDirectory( //API funkcija prima 2 argumenta:
    Putanja, //putanja i naziv direktorija
    NULL); //atributi sigurnosti, u ovom slucaju defaultni

    //postavljanje aktivnog direktorija u kojem cemo raditi

    SetCurrentDirectory( //ova funkcija prima samo jedan argument
    Putanja);

    //kreiranje datoteke Proba.txt koja je prazna ujedno je to i glavni, neimenovani slijed

    hdat=CreateFile( //funkcija za kreiranje datoteke s argumentima:
    ImeDat, //naziv datoteke
    GENERIC_WRITE, //mod pristupa
    0, //mod dijeljena resursa(share mode)
    NULL, //atribut zastite
    CREATE_ALWAYS, // ako vec postoji obrisi i kreiraj ponovo
    FILE_ATTRIBUTE_NORMAL, //atributi kao sto su: readonly,archive,hidden...
    NULL); //veza prema template-datoteci koja sadrzi
    //atribute za datoteku koja se kreira
    CloseHandle (hdat);

    // datoteka je kreirana, a sad dolazi provjera da li je stvarno tako

    printf("\n Kreirana je datoteka Proba.txt, ali bez podataka.\n");
    printf("\n Naredbom dir dobivamo ovaj ispis direktorija Test:\n\n");
    printf("--------------------------------------------------------\n");
    system("dir *.txt");
    printf("--------------------------------------------------------\n");

    //kreiranje imenovanog slijeda unutar datoteke Proba.txt i upisivanje
    //jednog niza znakova u slijed

    hdat=CreateFile( //svi argumenti su isti osim naziva
    ImeSlijed,
    GENERIC_WRITE,
    0,
    NULL,
    CREATE_ALWAYS,
    FILE_ATTRIBUTE_NORMAL,
    NULL);
    WriteFile(
    hdat,
    (PVOID)TekstZaUpisat,
    strlen(TekstZaUpisat),
    &BrUpisanihBajtova,
    NULL);
    CloseHandle (hdat);

    //ovime je kreiran slijed i upisan je tekst
    //sad je potrebno to i provijeriti i to pomoæu Notepad-a

    printf("\n Slijed je kreiran i upisan je tekst.\n");
    printf("\n Za provjeru koristimo Notepad\n");
    printf("--------------------------------------------------------\n");
    system(" Notepad Proba.txt:Slijed.txt");

    //sad smo sigurni da podaci postoje, pa provjerimo jos i naredbom dir

    printf("\n Da vidimo kolika je velicina datoteke: \n");
    printf("--------------------------------------------------------\n");
    system("dir *.txt");
    printf("--------------------------------------------------------\n");
    printf("\n Naredba dir ne prepoznaje slijedove i ne vidi stvarnu");
    printf(" velicinu datoteke!\n");

    // Funkcijom GetFileSize utvrdit cemo velicinu imenovanog slijeda

    hdat=CreateFile(
    ImeSlijed,
    0,
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);
    VelicinaSlijed=GetFileSize( //trazimo velicinu slijeda
    hdat,
    NULL);
    CloseHandle (hdat);

    // sad trazimo i velicinu glavnog toka

    hdat=CreateFile(
    ImeDat,
    0,
    0,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);
    VelicinaGlavniTok=GetFileSize(
    hdat,
    NULL);
    CloseHandle (hdat);

    //sto smo dobili

    printf("\n Velicina glavnog toka iznosi %ld bajta.\n", VelicinaGlavniTok);
    printf("\n Velicina slijeda iznosi %ld bajta.\n ", VelicinaSlijed);
    }






Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured