mirror of https://github.com/tongzx/nt5src
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.
127 lines
3.5 KiB
127 lines
3.5 KiB
//+----------------------------------------------------------------------------
|
|
//
|
|
// 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
|