Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+----------------------------------------------------------------------------
//
// Copyright (C) 1992, Microsoft Corporation.
//
// File: attach.h
//
// Contents: This module defines the data structures used in attaching
// to an existing file system volume.
//
// Functions:
//
//-----------------------------------------------------------------------------
#ifndef _ATTACH_
#define _ATTACH_
//
// For each local file system volume on which there exists a local
// DFS volume, a DFS volume device object is created, and attached
// to the local file system volume device object via
// IoAttachDeviceByPointer. This permits the DFS driver to
// pre-screen any I/O which takes place on the local volume
// and adjust it for DFS file I/O semantics.
//
// In many cases, the I/O can simply be passed through to the local
// file system for handling. In some cases, parameters of the I/O
// request must be examined and possibly modified before passing it
// along to the underlying file system. In some cases, e.g., an attempt
// to rename a directory along an exit path, the I/O request may be
// returned with an error status.
//
//
// The Volume device object is associated with every volume to which this
// file system has been attached.
//
typedef struct _DFS_VOLUME_OBJECT {
DEVICE_OBJECT DeviceObject; // simple device object.
ULONG AttachCount; // count of attachments
LIST_ENTRY VdoLinks; // links for DfsData.AVdoQueue
PROVIDER_DEF Provider; // provider definition for passthrough
PDEVICE_OBJECT RealDevice; // The bottommost device in
// the chain of attached
// devices.
BOOLEAN DfsEnable; // Dfs Enabled or disable
} DFS_VOLUME_OBJECT, *PDFS_VOLUME_OBJECT;
//
// The File System Attach device object is associated with every File
// System Device Object that is available in the system
//
typedef struct _DFS_ATTACH_FILE_SYSTEM_OBJECT {
DEVICE_OBJECT DeviceObject; // simple device object.
LIST_ENTRY FsoLinks; // links for DfsData.AFsoQueue
PDEVICE_OBJECT TargetDevice; // The one we are attached to
} DFS_ATTACH_FILE_SYSTEM_OBJECT, *PDFS_ATTACH_FILE_SYSTEM_OBJECT;
//
// Public function prototypes in attach.c
//
NTSTATUS DfsGetAttachName( IN PUNICODE_STRING LocalVolumeStorageId, OUT PUNICODE_STRING LocalVolumeRelativeName );
NTSTATUS DfsSetupVdo( IN PUNICODE_STRING RootName, IN PDEVICE_OBJECT ptargetVdo, IN PDEVICE_OBJECT realDevice, IN ULONG pVolNameLen, OUT PDFS_VOLUME_OBJECT *pdfsVdo);
NTSTATUS DfsAttachVolume( IN PUNICODE_STRING RootName, OUT PPROVIDER_DEF *ppProvider );
NTSTATUS DfsDetachVolume( IN PUNICODE_STRING TargetName );
NTSTATUS DfsDetachVolumeForDelete( IN PDEVICE_OBJECT DfsVdo );
VOID DfsReattachToMountedVolume( IN PDEVICE_OBJECT TargetDevice, IN PVPB Vpb );
VOID DfsFsNotification( IN PDEVICE_OBJECT FileSystemObject, IN BOOLEAN fLoading );
VOID DfsDetachAllFileSystems( VOID );
NTSTATUS DfsVolumePassThrough( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
NTSTATUS DfsCompleteVolumePassThrough( IN PDEVICE_OBJECT pDevice, IN PIRP Irp, IN PVOID Context );
#endif // _ATTACH
|