Read ADS Alternate Data Stream windows ntfs

Share your advanced PureBasic knowledge/code with the community.
User avatar
idle
Always Here
Always Here
Posts: 5903
Joined: Fri Sep 21, 2007 5:52 am
Location: New Zealand

Read ADS Alternate Data Stream windows ntfs

Post by idle »

read ADS on files windows

Code: Select all

EnableExplicit 

Global path.s = OpenFileRequester("ADS",GetUserDirectory(#PB_Directory_Downloads),"*.*",1)

Structure WIN32_FIND_STREAM_DATA
  StreamSize.q;
  cStreamName.s{#MAX_PATH+36} 
EndStructure  

Prototype.i FindFirstStreamW(filename.s,infolevel,*out,flags.l)
Prototype.i FindNextStreamW(hFindStream.l,*out) 
Global FindFirstStream.FindFirstStreamW
Global FindNextStream.FindNextStreamW 

Procedure.s ReadADS(file.s) 
  Protected handle,out.s,lib,*mem ,fn 
  Protected NewList sinfo.WIN32_FIND_STREAM_DATA()
  lib = OpenLibrary(-1,"Kernel32.dll") 
  
  If lib 
    FindFirstStream.FindFirstStreamW = GetFunction(lib,"FindFirstStreamW") 
    FindNextStream.FindNextStreamW = GetFunction(lib,"FindNextStreamW") 
    If path <> "" 
      AddElement(sinfo())
      handle  = FindFirstStream(path,0,@sinfo(),0)  
      If handle > 0
        While FindNextStream(Handle,@sinfo()) > 0  
          AddElement(sinfo())  
        Wend    
      EndIf 
      ForEach sinfo()
        If sinfo()\StreamSize 
          *mem = AllocateMemory(sinfo()\StreamSize) 
          out.s = PeekS(@sinfo()\cStreamName,-1) 
          fn = OpenFile(-1,path+out) 
          If fn 
            ReadData(fn,*mem,sinfo()\StreamSize) 
            out + PeekS(*mem,sinfo()\StreamSize,#PB_Ascii) + #CRLF$
            CloseFile(fn) 
          EndIf
          FreeMemory(*mem) 
        EndIf   
      Next   
    EndIf
    CloseLibrary(lib)  
  EndIf
  
  ProcedureReturn out 
  
EndProcedure 

Debug ReadADS(path) 
Little John
Addict
Addict
Posts: 4789
Joined: Thu Jun 07, 2007 3:25 pm
Location: Berlin, Germany

Re: Read ADS Alternate Data Stream windows ntfs

Post by Little John »

Thank you, idle!
This is a good addition to the ADS functions we already have here.
Post Reply