Énumère tous les flux avec un type de flux ::$DATA dans le fichier ou le répertoire spécifié
#include <WinAPIFiles.au3>
_WinAPI_EnumFileStreams ( $sFilePath )
$sFilePath | Le chemin d'accès au fichier ou au répertoire. Le fichier doit se trouver sur un volume avec le système de fichiers NTFS. |
Succès: | Retourne le tableau 2D des noms des flux et de leur taille. [0][0] - Nombre de lignes du tableau (n) [0][1] - Inutilisé [n][0] - Nom du flux. [n][1] - Taille du flux, en octets. |
Échec: | Définit @error <> 0, @extended contient le code d'erreur NTSTATUS. |
Consultez ZwQueryInformationFile dans la librairie MSDN.
#include <Array.au3> #include <MsgBoxConstants.au3> #include <WinAPIFiles.au3> #include <WinAPIHObj.au3> #include <WinAPIMem.au3> #include <WinAPIMisc.au3> #include <WinAPIShPath.au3> Local Const $sFile = @TempDir & '\Test.txt' ; Vérifie le système de fichiers NTFS If StringCompare(DriveGetFileSystem(_WinAPI_PathStripToRoot($sFile)), 'NTFS') Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Le fichier doit se trouver sur un volume avec un système de fichier NTFS.') Exit EndIf Local $hFile, $pData, $sName, $iBytes ; Crée un fichier texte avec trois flux alternatifs nommés AS1, AS2, AS3 For $i = 0 To 3 If $i > 0 Then $pData = _WinAPI_CreateString('Flux Alternatif ' & $i) $sName = ':AS' & $i Else $pData = _WinAPI_CreateString('Flux principal') $sName = '' EndIf $hFile = _WinAPI_CreateFile($sFile & $sName, 1, 4) _WinAPI_WriteFile($hFile, $pData, _WinAPI_GetMemorySize($pData) - 2, $iBytes) _WinAPI_CloseHandle($hFile) _WinAPI_FreeMemory($pData) Next ; Énumére tous les flux existants dans le fichier Local $aData = _WinAPI_EnumFileStreams($sFile) _ArrayDisplay($aData, '_WinAPI_EnumFileStreams') ; Lit les données texte de chaque flux $pData = _WinAPI_CreateBuffer(1024) For $i = 1 To $aData[0][0] $hFile = _WinAPI_CreateFile($sFile & $aData[$i][0], 2, 2, 6) _WinAPI_ReadFile($hFile, $pData, $aData[$i][1], $iBytes) _WinAPI_CloseHandle($hFile) $aData[$i][1] = _WinAPI_GetString($pData) Next _WinAPI_FreeMemory($pData) _ArrayDisplay($aData, '_WinAPI_EnumFileStreams') FileDelete($sFile)