//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1998. // // File: DIRSTK.CXX // // Contents: Directory entry stack // // History: 07-Aug-92 KyleP Added header // //-------------------------------------------------------------------------- #include #pragma hdrstop #include //+------------------------------------------------------------------------- // // Member: CDirStackEntry::CDirStackEntry // // Synopsis: CDirStackEntry constructor // // Arguments: [str] -- Unicode string (null terminated) for path // [ccStr[ -- Size in chars of [str] // [numHighValue] -- numerator's high watermark // [numLowValue] -- numerator's low watermark // [fDeep] -- TRUE for additional dir recursion // [pwcsVRoot] -- Virtual root (or zero if none) // [ccVRoot] -- Size in chars of [pwcsVRoot] // [ccReplaceVRoot] -- Number of chars in phys root to replace // // History: 20-Jun-95 SitaramR Created // 11-Feb-96 KyleP Add support for virtual roots // //-------------------------------------------------------------------------- CDirStackEntry::CDirStackEntry ( const CFunnyPath & funnyPath, ULONG numHighValue, ULONG numLowValue, BOOL fDeep, WCHAR const * pwcsVRoot, unsigned ccVRoot, unsigned ccReplacePRoot ) : _numHighValue( numHighValue ), _numLowValue( numLowValue ), _fDeep( fDeep ), _xwcsVirtualRoot( 0 ) { _funnyPath = funnyPath; if ( 0 != pwcsVRoot ) { _ccVirtualRoot = ccVRoot; _ccReplacePhysRoot = ccReplacePRoot; _xwcsVirtualRoot.Set( new WCHAR[_ccVirtualRoot] ); RtlCopyMemory( _xwcsVirtualRoot.GetPointer(), pwcsVRoot, _ccVirtualRoot * sizeof(WCHAR) ); } } CDirStackEntry::CDirStackEntry ( const WCHAR * pwcPath, unsigned ccStr, ULONG numHighValue, ULONG numLowValue, BOOL fDeep, WCHAR const * pwcsVRoot, unsigned ccVRoot, unsigned ccReplacePRoot ) : _numHighValue( numHighValue ), _numLowValue( numLowValue ), _fDeep( fDeep ), _xwcsVirtualRoot( 0 ) { _funnyPath.SetPath( pwcPath, ccStr ); if ( 0 != pwcsVRoot ) { _ccVirtualRoot = ccVRoot; _ccReplacePhysRoot = ccReplacePRoot; _xwcsVirtualRoot.Set( new WCHAR[_ccVirtualRoot] ); RtlCopyMemory( _xwcsVirtualRoot.GetPointer(), pwcsVRoot, _ccVirtualRoot * sizeof(WCHAR) ); } } //+------------------------------------------------------------------------- // // Member: CDirStackEntry::CDirStackEntry // // Synopsis: CDirStackEntry constructor // // Arguments: [path] -- Nt string of path sans final directory name // [name] -- Nt string of final directory name // [numHighValue] -- numerator's high watermark // [numLowValue] -- numerator's low watermark // [fDeep] -- TRUE for additional dir recursion // [pParent] -- Parent of this scope (for virtual root copy) // // History: 20-Jun-95 SitaramR Created // //-------------------------------------------------------------------------- CDirStackEntry::CDirStackEntry ( UNICODE_STRING const * path, UNICODE_STRING const * name, ULONG numHighValue, ULONG numLowValue, BOOL fDeep, CDirStackEntry * pParent ) : _numHighValue( numHighValue ), _numLowValue( numLowValue ), _fDeep( fDeep ), _xwcsVirtualRoot( 0 ) { // // Copy physical path // WCHAR* pwcsActualFileName; _funnyPath.SetPath( path->Buffer, path->Length/sizeof(WCHAR) ); _funnyPath.AppendBackSlash(); _funnyPath.AppendPath( name->Buffer, name->Length/sizeof(WCHAR) ); if ( 0 != pParent && 0 != pParent->GetVirtualRoot() ) { _ccVirtualRoot = pParent->VirtualRootLength(); _ccReplacePhysRoot = pParent->ReplaceLength(); _xwcsVirtualRoot.Set( new WCHAR[_ccVirtualRoot] ); RtlCopyMemory( _xwcsVirtualRoot.GetPointer(), pParent->GetVirtualRoot(), _ccVirtualRoot * sizeof(WCHAR) ); } }