#ifndef __FILEHANDLE300_H__ typedef struct _FHANDLE FHANDLE, *PFHANDLE; typedef struct _DSTREAM DSTREAM, *PDSTREAM; typedef struct _VOLUME VOLUME, *PVOLUME; typedef struct _BUF BUF, *PBUF; typedef struct _STM_DLINK { PDSTREAM pstmNext; // ptr to next item in list PDSTREAM pstmPrev; // ptr to previous item in list } STM_DLINK, *PSTM_DLINK; typedef struct _FH_DLINK { PFHANDLE pfhNext; // ptr to next item in list PFHANDLE pfhPrev; // ptr to previous item in list } FH_DLINK, *PFH_DLINK; struct _FHANDLE { FH_DLINK fh_dlOpenHandles; PDSTREAM fh_pstm; // DSTREAM for the file BYTE fh_flags; // handle status flags (see FHF_*) BYTE fh_mode; // file access & sharing modes WORD fh_pad; DWORD fh_pos; // current file position HANDLE fh_h; // kernel handle to this FHANDLE HANDLE fh_hProc; // process that opened the file }; typedef struct _DSID { // structure for unique data stream IDs (similar to OIDs) DWORD sid_ordDir; // ordinal in directory of stream's DIRENTRY DWORD sid_clusDir; // cluster of dir containing stream's DIRENTRY } DSID; typedef DSID *PDSID; typedef struct _RUN { DWORD r_start; // starting byte position of run DWORD r_end; // ending byte of run + 1 DWORD r_blk; // first block of run DWORD r_clusThis; // first cluster of this run DWORD r_clusNext; // next cluster after this run DWORD r_clusPrev; // cluster preceding this run (0 if none) } RUN, *PRUN; #define OEMNAMESIZE 11 struct _DSTREAM { STM_DLINK s_dlOpenStreams;// linkage for v_dlOpenStreams FH_DLINK s_dlOpenHandles;// list of FHANDLE's or SHANDLE's PVOLUME s_pvol; // VOLUME the DSTREAM is open on long s_refs; // usage count for the stream WORD s_flags; // stream status flags (see STF_*) WORD s_cwPath; // # characters in path to this stream (excluding NULL) RUN s_run; // run info from current/last operation PBUF s_pbufCur; // pointer to stream's current buffer, if any DWORD s_offbufCur; // stream offset associated with current buffer DWORD s_size; // length of the stream CRITICAL_SECTION s_cs; // critical section for this stream #ifdef TFAT PDSTREAM s_pstmParent; // parent stream: TFAT only #endif // // Beginning of portion that actually relates to non-STF_VOLUME streams only! // (actually, s_cwPath belongs down here as well, but since it's a WORD, it fits // better up above) // DSID s_sid; // unique stream ID DSID s_sidParent; // unique stream ID for parent DWORD s_offDir; // offset in block of stream's DIRENTRY DWORD s_blkDir; // block of dir containing stream's DIRENTRY DWORD s_clusFirst; // first cluster in stream FILETIME s_ftCreate; // creation time from DIRENTRY FILETIME s_ftAccess; // last access time from DIRENTRY FILETIME s_ftWrite; // last write time from DIRENTRY BYTE s_attr; // file attribute byte BYTE s_achOEM[OEMNAMESIZE+1]; }; #define __FILEHANDLE300_H__ #endif