file name management l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
File Name Management PowerPoint Presentation
Download Presentation
File Name Management

Loading in 2 Seconds...

play fullscreen
1 / 26

File Name Management - PowerPoint PPT Presentation


  • 359 Views
  • Uploaded on

File Name Management. What does Filter Manager’s Name Support Do?. Copy-free retrieval of file names Gets the name for a given file object as appropriate for the current operation Can get the name in one of three formats: Normalized name Opened name Short name.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'File Name Management' - ziva


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
file name management

File Name Management

© 2004 Microsoft Corporation. All rights reserved.

what does filter manager s name support do
What does Filter Manager’s Name Support Do?
  • Copy-free retrieval of file names
  • Gets the name for a given file object as appropriate for the current operation
  • Can get the name in one of three formats:
    • Normalized name
    • Opened name
    • Short name

© 2004 Microsoft Corporation. All rights reserved.

what does filter manager s name support do cont
What does Filter Manager’s Name Support Do? (cont)
  • When possible, name is cached
  • Allow caller to specify whether to query cache or file system, just file system, or just cache
  • FltMgr manages when names are invalidated due to renames, hardlink creations, etc.

© 2004 Microsoft Corporation. All rights reserved.

what does filter manager s name support do cont4
What does Filter Manager’s Name Support Do? (cont)
  • The case of returned names may not match how they are actually stored on disk
  • Support for filters that modify the name space
    • Use the name provider interfaces to properly work with Filter Manager’s name support
  • Returned name information structures are allocated from PagedPool
    • Can not access them at DPC level

© 2004 Microsoft Corporation. All rights reserved.

performance benefits
Performance Benefits
  • Cache is shared among all filters in the system
    • Reduced duplication of name retrieval work among filters
  • When requesting a name, you get a referenced counted structure containing the name
    • No copying of the name is done

© 2004 Microsoft Corporation. All rights reserved.

name provider support
Name Provider Support
  • Filters which affect the name space must register additional callbacks so they see they can intercept the name query operations
  • PFLT_GENERATE_FILE_NAME
    • Called when a filter above provider has requested a name
  • PFLT_NORMALIZE_NAME_COMPONENT
    • Called when a path component of name this filter has provided needs to be expanded to a long name
  • PFLT_NORMALIZE_CONTEXT_CLEANUP
    • Called when all components in a path are normalized
    • Name provider may need some context between path components and this context allows that to be passed
  • A name provider sample is coming

© 2004 Microsoft Corporation. All rights reserved.

flt file name information
FLT_FILE_NAME_INFORMATION
  • NOTE: Filter should NEVER modify any data in this structure

typedef struct _FLT_FILE_NAME_INFORMATION {

USHORT Size;

FLT_FILE_NAME_PARSED_FLAGS NamesParsed;

FLT_FILE_NAME_OPTIONS Format;

UNICODE_STRING Name;

UNICODE_STRING Volume;

UNICODE_STRING Share;

// Set by calling FltParseFileNameInformation()

UNICODE_STRING Extension;

UNICODE_STRING Stream;

UNICODE_STRING FinalComponent;

UNICODE_STRING ParentDir;

} FLT_FILE_NAME_INFORMATION, *PFLT_FILE_NAME_INFORMATION;

© 2004 Microsoft Corporation. All rights reserved.

flt file name options
FLT_FILE_NAME_OPTIONS
  • Contains flags that are broken into 3 parts:
    • Name format
      • Normalized, Opened, or Short
    • Query method
    • Control flags for name providers

© 2004 Microsoft Corporation. All rights reserved.

name format options
Name Format Options
  • Caller specifies the type of name to get:
    • FLT_FILE_NAME_NORMALIZED
      • Contains full path
      • All short names have been converted to long names
    • FLT_FILE_NAME_OPENED
      • Contains full path
      • May contain combination of short & long names
    • FLT_FILE_NAME_SHORT
      • Does not contain any path/volume information
      • Contains the short name only
  • FltGetFileNameFormat()

© 2004 Microsoft Corporation. All rights reserved.

name query options
Name Query Options
  • Caller specifies how the name should be retrieved through the query method:
    • FLT_FILE_NAME_QUERY_DEFAULT
      • Cache or file system are only queried if it is safe to query the operating system
      • Get consistent behavior as to whether or not you can get the name, doesn’t rely on caching behavior
    • FLT_FILE_NAME_QUERY_CACHE_ONLY
      • Will check the cache, but will not query the file system if cache miss
    • FLT_FILE_NAME_QUERY_FILESYSTEM_ONLY
      • Will never look in cache (for testing purposes only)
      • WARNING: Should avoid because of negative performance impacts
    • FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP
      • Regardless of whether it is safe to query file system, check cache for the name and return it if present
      • If not present query the file system if safe
  • FltGetFileNameQueryMethod()

© 2004 Microsoft Corporation. All rights reserved.

name query flags
Name Query Flags
  • Useful for filters that are name providers since they may have to use the name routines to generate names
    • FLT_FILE_NAME_REQUEST_FROM_CURRENT_PROVIDER
      • Name query request will come back to this provider, not just the providers lower in the stack
    • FLT_FILE_NAME_DO_NOT_CACHE
      • Tells the filter manager not to cache the results of this query

© 2004 Microsoft Corporation. All rights reserved.

file name retrieval apis
File Name Retrieval APIs
  • FltGetFileNameInformation()
    • Given a CallbackData, retrieves the file name in the format requested for the TargetFileObject
    • Specify name format, query method via flags
    • Will fail if detected that name query at current call location will lead to system deadlock
    • Name, Volume and Share components of structure already parsed on return

© 2004 Microsoft Corporation. All rights reserved.

file name retrieval apis13
File Name Retrieval APIs
  • FltGetFileNameInformationUnsafe()
    • Given a FileObject and Instance, retrieves the file name in the format requested for the FileObject
    • Specify name format and query type – same as FltGetFileNameInformation()
    • Does not do additional checks to ensure against deadlock during name query
    • Name, Volume, Share components of structure already parsed on return

© 2004 Microsoft Corporation. All rights reserved.

parsing file name api
Parsing File Name API
  • FltParseFileNameInformation()
    • Parses the remaining fields of the FLT_FILE_NAME_INFORMATION structure as necessary
    • Does not copy names, initializes existing UNICODE_STRINGS with address and length from the original full file name

© 2004 Microsoft Corporation. All rights reserved.

releasing name information structures
Releasing Name Information Structures
  • FltReleaseFileNameInformation()
    • Called when finished using a FLT_FILE_NAME_INFORMATION structure
    • A name information structure may be held from the preOperation callback
  • FltReferenceFileNameInformation()
    • Adds reference to the name information structure
    • Call FltReleaseFileNameInformation() to remove added reference

© 2004 Microsoft Corporation. All rights reserved.

destination name support api
Destination Name Support API
  • FltGetDestinationFileNameInformation()
    • Used during rename and hardlink creation to get the full name for the target file in the operation
    • Can retrieve normalized or opened name

© 2004 Microsoft Corporation. All rights reserved.

name tunneling
Name Tunneling
  • Preserves a set of file characteristics when a file is removed and then quickly added back to the name space using the same name for both operations
    • Default – within 15 seconds
  • Characteristics that are tunneled:
    • Long Name
    • Short Name
    • Object ID
    • Creation Time
  • Operations which may tunnel
    • Create file
    • Rename file
    • Create HardLink

© 2004 Microsoft Corporation. All rights reserved.

name tunneling api
Name Tunneling API
  • FltGetTunneledName()
    • Used to get the tunneled name if tunneling occurred
    • Needed for NORMALIZED names only
    • Should be called from postOperation if:
      • a name was already retrieved during the preOperation
      • you care that the preOperation name could be invalidated by tunneling
    • Names and operations that may be affected by name tunneling:
      • File name from pre-CREATE
      • Destination name from pre-RENAME
      • Destination name from pre-HARDLINK_CREATE

© 2004 Microsoft Corporation. All rights reserved.

normalized name
Normalized Name
  • All short names expanded
  • Any extraneous :$DATA has been removed from stream name
  • All mount points have been resolved

© 2004 Microsoft Corporation. All rights reserved.

normalized name example local file
Normalized Name Example – Local File

\Device\HarddiskVolume1\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

  • Name: (above)
  • Volume: “\Device\HarddiskVolume1”
  • Share: NULL
  • Extension: “.txt”
  • Stream: “:stream1”
  • FinalComponent: “Test Results.txt:stream1”
  • ParentDir: “\Documents and Settings\MyUser\My Documents\”

© 2004 Microsoft Corporation. All rights reserved.

normalized name example remote file
Normalized Name Example – Remote File

\Device\LanManRedirector\mollybro-dev\c_drive\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

  • Name: (above)
  • Volume: “\Device\LanManRedirector”
  • Share: “\mollybro-dev\c_drive”
  • Extension: “.txt”
  • Stream: “:stream1”
  • FinalComponent: “Test Results.txt:stream1”
  • ParentDir: “\Documents and Settings\MyUser\My Documents\”

© 2004 Microsoft Corporation. All rights reserved.

opened name
Opened Name
  • Get the name the user used to open this handle
  • Could have short or long names
  • If a related file object is specified
    • Its name is expanded
    • Its name and the original name are concatenated together

© 2004 Microsoft Corporation. All rights reserved.

opened name example local file system
Opened Name Example – Local File System

\Device\HarddiskVolume1\Docume~1\MyUser\My Documents\TestRe~1.txt:stream1

  • Name: (above)
  • Volume: “\Device\HarddiskVolume1”
  • Share: NULL
  • Extension: “.txt”
  • Stream: “:stream1”
  • FinalComponent: “TestRe~1.txt:stream1”
  • ParentDir: “\Docume~1\MyUser\My Documents\”

© 2004 Microsoft Corporation. All rights reserved.

opened name example remote file system
Opened Name Example – Remote File System

\Device\LanManRedirector\mollybro-dev\c_drive\Docume~1\MyUser\My Documents\TestRe~1.txt:stream1

  • Name: (above)
  • Volume: “\Device\LanManRedirector”
  • Share: “\mollybro-dev\c_drive”
  • Extension: “.txt”
  • Stream: “:stream1”
  • FinalComponent: “TestRe~1.txt:stream1”
  • ParentDir: “\Docume~1\MyUser\My Documents\”

© 2004 Microsoft Corporation. All rights reserved.

short name
Short Name
  • Returns the short name for the final component of the file object specified
    • No path components are returned
  • Not available for unopened file objects, e.g., in Pre-CREATE operation
  • Not available for stream file objects
  • Can still get STATUS_OBJECT_NAME_NOT_FOUNDif there is no short name for this file

© 2004 Microsoft Corporation. All rights reserved.

short name example
Short Name Example

\Device\HarddiskVolume1\Documents and Settings\MyUser\My Documents\TestResults.txt

  • Name:“TestRe~1.txt”
  • Volume:NULL
  • Share: NULL
  • Extension: “.txt”
  • Stream:NULL
  • FinalComponent: “TestRe~1.txt”
  • ParentDir:NULL

© 2004 Microsoft Corporation. All rights reserved.