Dela via


Filströmmar (lokala filsystem)

En ström är en sekvens med byte. I NTFS-filsystemet innehåller strömmar de data som skrivs till en fil och som ger mer information om en fil än attribut och egenskaper. Du kan till exempel skapa en ström som innehåller nyckelord för sökning eller identiteten för det användarkonto som skapar en fil.

Varje dataström som är associerad med en fil har en egen allokeringsstorlek, faktisk storlek och giltig datalängd:

  • Allokeringsstorleken är mängden diskutrymme som är reserverat för en ström.
  • Den faktiska storleken är antalet byte som används av en anropare.
  • Den giltiga datalängden (VDL) är antalet byte som initieras från allokeringsstorleken för dataströmmen.

Varje ström behåller också sitt eget tillstånd för komprimering, kryptering och gleshet. Attributet FILE_ATTRIBUTE_SPARSE_FILE i filen anges i dwFileAttributes medlem i WIN32_FIND_DATA-strukturen som returneras från FindFirstFile, FindFirstFileExoch FindNextFile funktioner om någon av strömmarna någonsin har varit gles. GetFileAttributes, GetFileAttributesEx, GetFileAttributesTransacted, GetFileInformationByHandleoch GetFileInformationByHandleEx returnerar det glesa tillståndet för standarddataströmmen om ingen ström anges.

Det finns inga filtider som är associerade med en ström. Filtiderna för en fil uppdateras när dataströmmen i en fil uppdateras.

Opportunistiska lås underhålls per ström. Delningslägen underhålls också per ström. När borttagningsåtkomst begärs för en fil söker operativsystemet efter borttagningsåtkomst på alla öppna strömmar i en fil. Om en annan process har öppnat en ström utan behörigheten FILE_SHARE_DELETE kan du inte öppna filen för borttagningsåtkomst.

Om en fil som kopieras har en dataström och nätverksomdirigering används kan filen bara kopieras om klienten har både läsbehörigheten och behörigheten läsattribut.

Namngivningskonventioner för strömmar

När det anges från Windows Shell-kommandoraden är det fullständiga namnet på en dataström "filnamn:stream name:stream type", som i följande exempel: "myfile.dat:stream1:$DATA".

Alla tecken som är lagliga för ett filnamn är också lagliga för strömnamnet, inklusive blanksteg. Mer information finns i Namnge en fil. Dataströmtypen (kallas även för en attributtypskod) är intern för NTFS-filsystemet. Användarna kan därför inte skapa nya strömtyper, men de kan öppna befintliga NTFS-filsystemtyper. Dataströmtypsspecificerarens värden börjar alltid med dollartecknet ($). Se nedan för en lista över strömtyper.

Standarddataströmmen är som standard namnlös. Om du vill ange standarddataströmmen fullt ut använder du "filnamn::$DATA", där $DATA är strömtypen. Detta motsvarar "filnamn". Du kan skapa en namngiven ström i filen med hjälp av namngivningskonventionerna för -filer. Observera att "$DATA" är ett namn på en juridisk dataström. Det fullständiga namnet på en ström med namnet "$DATA" på en fil med namnet "exempel" skulle till exempel vara "exempel:$DATA:$DATA". Om du skapade en ström med namnet "bar" på samma fil skulle dess fullständiga namn vara "exempel:bar:$DATA".

När du skapar och arbetar med filer som har namn med ett tecken prefixar du filnamnet med punkt följt av ett omvänt snedstreck (.) eller använder ett fullständigt kvalificerat sökvägsnamn. Anledningen till detta är att Windows behandlar filnamn med ett tecken som enhetsbeteckningar. När en enhetsbeteckning anges med en relativ sökväg separerar ett kolon enhetsbeteckningen från sökvägen. När det finns en tvetydighet om huruvida ett namn med ett tecken är en enhetsbeteckning eller ett filnamn, förutsätter Windows att det är en enhetsbeteckning om strängen som följer kolonet är en giltig sökväg, även om enhetsbeteckningen är ogiltig.

Strömtyper

Följande är listan över NTFS-strömtyper, även kallade attributtypskoder. Vissa av strömtyperna är interna för NTFS och deras format är odokumenterad.

Strömtyp Beskrivning
::$ATTRIBUTE_LIST Innehåller en lista över alla attribut som utgör filen och identifierar var varje attribut finns.
::$BITMAP En bitmapp som används av index för att hantera det lediga utrymmet i b-träd för en katalog. B-trädet hanteras i 4 KB-segment (oavsett klusterstorlek) och det används för att hantera allokeringen av dessa segment. Den här strömtypen finns i varje katalog.
::$DATA Dataström. Standarddataströmmen har inget namn. Dataströmmar kan räknas upp med hjälp av funktionerna FindFirstStreamW och FindNextStreamW.
::$EA Innehåller data om utökade attribut.
::$EA_INFORMATION Innehåller supportinformation om utökade attribut.
::$FILE_NAME Namnet på filen i Unicode-tecken. Detta inkluderar det korta namnet på filen samt eventuella hårda länkar.
::$INDEX_ALLOCATION Dataströmtypen för en katalog. Används för att implementera filnamnsallokering för stora kataloger. Den här strömmen representerar själva katalogen och innehåller alla data i katalogen. Ändringar i strömmar av den här typen loggas i NTFS-ändringsjournalen. Standardströmnamnet för en $INDEX_ALLOCATION-strömtyp är $I 30 så "DirName", "DirName::$INDEX_ALLOCATION" och "DirName:$I 30:$INDEX_ALLOCATION" är alla likvärdiga.
::$INDEX_ROOT Den här strömmen representerar roten i ett indexs b-träd. Den här strömtypen finns i varje katalog.
::$LOGGED_UTILITY_STREAM Liknar ::$DATA men åtgärder loggas i NTFS-ändringsjournalen. Används av EFS och Transactional NTFS (TxF). Paret ":StreamName:$StreamType" för EFS är ":$EFS:$LOGGED_UTILITY_STREAM" och för TxF är ":$TXF_DATA:$LOGGED_UTILITY_STREAM".
::$OBJECT_ID Ett ID på 16 byte som används för att identifiera filen för länkspårningstjänsten.
::$REPARSE_POINT Den referenspunkten data.

 

Använda strömmar