128 lines
3.5 KiB
C
128 lines
3.5 KiB
C
|
//+----------------------------------------------------------------------------
|
|||
|
//
|
|||
|
// 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
|