Windows: EvalByName pass LastComponent flag
[openafs.git] / src / WINNT / afsrdr / kernel / lib / Include / AFSCommon.h
index ad4759c..5073563 100644 (file)
@@ -47,6 +47,7 @@ extern "C"
 #include <ntifs.h>
 #include <wdmsec.h> // for IoCreateDeviceSecure
 #include <initguid.h>
+#include <ntintsafe.h>
 
 #include "AFSDefines.h"
 
@@ -202,6 +203,16 @@ AFSNotifyRename( IN AFSObjectInfoCB *ObjectInfo,
                  OUT AFSFileID  *UpdatedFID);
 
 NTSTATUS
+AFSNotifyHardLink( IN AFSObjectInfoCB *ObjectInfo,
+                   IN GUID            *AuthGroup,
+                   IN AFSObjectInfoCB *ParentObjectInfo,
+                   IN AFSObjectInfoCB *TargetParentObjectInfo,
+                   IN AFSDirectoryCB  *SourceDirectoryCB,
+                   IN UNICODE_STRING  *TargetName,
+                   IN BOOLEAN          bReplaceIfExists,
+                   OUT AFSDirectoryCB **TargetDirectoryCB);
+
+NTSTATUS
 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
                        IN GUID *AuthGroup,
                        IN BOOLEAN FastCall,
@@ -211,6 +222,7 @@ NTSTATUS
 AFSEvaluateTargetByName( IN GUID *AuthGroup,
                          IN AFSObjectInfoCB *ParentObjectInfo,
                          IN PUNICODE_STRING SourceName,
+                         IN ULONG Flags,
                          OUT AFSDirEnumEntry **DirEnumEntry);
 
 NTSTATUS
@@ -219,6 +231,11 @@ AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
                               OUT AFSVolumeInfoCB *VolumeInformation);
 
 NTSTATUS
+AFSRetrieveVolumeSizeInformation( IN GUID *AuthGroup,
+                                  IN AFSFileID *FileID,
+                                  OUT AFSVolumeSizeInfoCB *VolumeSizeInformation);
+
+NTSTATUS
 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
                          IN ULONG InputLength,
                          IN ULONG OutputLength,
@@ -389,7 +406,8 @@ AFSFlushExtents( IN AFSFcb *pFcb,
 
 NTSTATUS
 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
-                            IN GUID *AuthGroup);
+                            IN GUID *AuthGroup,
+                            IN BOOLEAN bReleaseAll);
 
 NTSTATUS
 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
@@ -402,10 +420,13 @@ AFSMarkDirty( IN AFSFcb *pFcb,
               IN LARGE_INTEGER *StartingByte,
               IN BOOLEAN DerefExtents);
 
-BOOLEAN
+VOID
 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
                        IN GUID *AuthGroup);
 
+VOID
+AFSDeleteFcbExtents( IN AFSFcb *Fcb);
+
 void
 AFSTrimExtents( IN AFSFcb *Fcb,
                 IN PLARGE_INTEGER FileSize);
@@ -430,6 +451,13 @@ AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
 AFSExtent *
 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
 
+AFSExtent *
+NextExtent( AFSExtent *Extent, ULONG SkipList );
+
+ULONG
+AFSConstructCleanByteRangeList( AFSFcb * pFcb,
+                                AFSByteRange ** pByteRangeList);
+
 #if GEN_MD5
 void
 AFSSetupMD5Hash( IN AFSFcb *Fcb,
@@ -485,6 +513,7 @@ AFSProcessExtentRun( IN PVOID          SystemBuffer,
 // AFSClose.cpp Prototypes
 //
 
+
 NTSTATUS
 AFSClose( IN PDEVICE_OBJECT DeviceObject,
           IN PIRP Irp);
@@ -499,25 +528,37 @@ AFSInitFcb( IN AFSDirectoryCB   *DirEntry);
 NTSTATUS
 AFSInitVolume( IN GUID *AuthGroup,
                IN AFSFileID *RootFid,
+               IN LONG VolumeReferenceReason,
                OUT AFSVolumeCB **VolumeCB);
 
 NTSTATUS
 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
 
+LONG
+AFSVolumeIncrement( IN AFSVolumeCB *VolumeCB,
+                    IN LONG         Reason);
+
+LONG
+AFSVolumeDecrement( IN AFSVolumeCB *VolumeCB,
+                    IN LONG         Reason);
+
 NTSTATUS
 AFSInitRootFcb( IN ULONGLONG ProcessID,
                 IN AFSVolumeCB *VolumeCB);
 
 void
-AFSRemoveRootFcb( IN AFSFcb *RootFcb);
+AFSRemoveRootFcb( IN AFSVolumeCB *VolumeCB);
 
 NTSTATUS
-AFSInitCcb( IN OUT AFSCcb **Ccb);
+AFSInitCcb( IN OUT AFSCcb **Ccb,
+            IN     AFSDirectoryCB *DirectoryCB,
+            IN     ACCESS_MASK     GrantedAccess,
+            IN     ULONG           FileAccess);
 
 void
-AFSRemoveFcb( IN AFSFcb *Fcb);
+AFSRemoveFcb( IN AFSFcb **Fcb);
 
-NTSTATUS
+void
 AFSRemoveCcb( IN AFSFcb *Fcb,
               IN AFSCcb *Ccb);
 
@@ -532,13 +573,16 @@ AFSInsertCcb( IN AFSFcb *Fcb,
 NTSTATUS
 AFSLocateNameEntry( IN GUID *AuthGroup,
                     IN PFILE_OBJECT FileObject,
-                    IN UNICODE_STRING *RootPathName,
+                    IN OUT UNICODE_STRING *RootPathName,
                     IN UNICODE_STRING *ParsedPathName,
                     IN AFSNameArrayHdr *NameArray,
                     IN ULONG Flags,
-                    OUT AFSVolumeCB **VolumeCB,
-                    IN OUT AFSDirectoryCB **ParentDirectoryCB,
-                    OUT AFSDirectoryCB **DirectoryCB,
+                    IN AFSVolumeCB *VolumeCB,
+                    IN AFSDirectoryCB *ParentDirectoryCB,
+                    OUT AFSVolumeCB **OutVolumeCB,
+                    OUT LONG *OutVolumeReferenceReason,
+                    OUT AFSDirectoryCB **OutParentDirectoryCB,
+                    OUT AFSDirectoryCB **OutDirectoryCB,
                     OUT PUNICODE_STRING ComponentName);
 
 NTSTATUS
@@ -555,7 +599,7 @@ AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
                         IN AFSDirectoryCB *DirEntry,
                         IN BOOLEAN InsertInEnumList);
 
-NTSTATUS
+void
 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
                    IN AFSDirectoryCB *DirEntry);
 
@@ -674,8 +718,9 @@ AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
 
 NTSTATUS
 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
-          IN PIRP Irp,
-          IN HANDLE CallingUser);
+                IN PIRP Irp,
+                IN HANDLE CallingUser,
+                IN BOOLEAN bRetry);
 
 NTSTATUS
 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
@@ -689,6 +734,14 @@ NTSTATUS
 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
                IN PIRP Irp);
 
+NTSTATUS
+AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
+               IN PFILE_OBJECT FileObject,
+               IN HANDLE CallingUser,
+               IN PIRP Irp,
+               IN ULONG BytesToWrite,
+               IN BOOLEAN Retrying);
+
 //
 // AFSFileInfo.cpp Prototypes
 //
@@ -803,6 +856,9 @@ NTSTATUS
 AFSSetRenameInfo( IN PIRP Irp);
 
 NTSTATUS
+AFSSetFileLinkInfo( IN PIRP Irp);
+
+NTSTATUS
 AFSSetPositionInfo( IN PIRP Irp,
                     IN AFSDirectoryCB *DirectoryCB);
 
@@ -1033,7 +1089,8 @@ AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
 //
 
 ULONG
-AFSExceptionFilter( IN ULONG Code,
+AFSExceptionFilter( IN CHAR *FunctionString,
+                    IN ULONG Code,
                     IN PEXCEPTION_POINTERS ExceptPtrs);
 
 BOOLEAN
@@ -1069,7 +1126,7 @@ AFSLockSystemBuffer( IN PIRP Irp,
 void *
 AFSLockUserBuffer( IN void *UserBuffer,
                    IN ULONG BufferLength,
-                                  OUT MDL ** Mdl);
+                   OUT MDL ** Mdl);
 
 void *
 AFSMapToService( IN PIRP Irp,
@@ -1184,8 +1241,8 @@ AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
 NTSTATUS
 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
                   IN GUID *AuthGroup,
-                  IN BOOLEAN PurgeContent,
-                  IN BOOLEAN FastCall);
+                  IN BOOLEAN FastCall,
+                  IN BOOLEAN SafeToPurge);
 
 AFSDirectoryCB *
 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
@@ -1213,6 +1270,9 @@ AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
 BOOLEAN
 AFSIsRelativeName( IN UNICODE_STRING *Name);
 
+BOOLEAN
+AFSIsAbsoluteAFSName( IN UNICODE_STRING *Name);
+
 void
 AFSUpdateName( IN UNICODE_STRING *Name);
 
@@ -1243,10 +1303,6 @@ NTSTATUS
 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
                       IN AFSDirectoryCB *DirEntry);
 
-void
-AFSReplaceCurrentElement( IN AFSNameArrayHdr *NameArray,
-                          IN AFSDirectoryCB *DirectoryCB);
-
 AFSDirectoryCB *
 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
 
@@ -1288,8 +1344,23 @@ AFSObjectInfoCB *
 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
                        IN ULONGLONG HashIndex);
 
+LONG
+AFSObjectInfoIncrement( IN AFSObjectInfoCB *ObjectInfo,
+                        IN LONG             Reason);
+
+LONG
+AFSObjectInfoDecrement( IN AFSObjectInfoCB *ObjectInfo,
+                        IN LONG             Reason);
+
 void
-AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
+AFSDeleteObjectInfo( IN AFSObjectInfoCB **ppObjectInfo);
+
+AFSObjectInfoCB *
+AFSFindObjectInfo( IN AFSVolumeCB * VolumeCB,
+                   IN AFSFileID   * FileID);
+
+void
+AFSReleaseObjectInfo( IN OUT AFSObjectInfoCB **ppObjectInfo);
 
 NTSTATUS
 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
@@ -1426,9 +1497,6 @@ AFSIOWorkerThread( IN PVOID Context);
 void
 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
 
-void
-AFSVolumeWorkerThread( IN PVOID Context);
-
 NTSTATUS
 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
 
@@ -1461,16 +1529,6 @@ AFSQueueFlushExtents( IN AFSFcb *Fcb,
                       IN GUID *AuthGroup);
 
 NTSTATUS
-AFSQueueAsyncRead( IN PDEVICE_OBJECT DeviceObject,
-                   IN PIRP Irp,
-                   IN HANDLE CallerProcess);
-
-NTSTATUS
-AFSQueueAsyncWrite( IN PDEVICE_OBJECT DeviceObject,
-                    IN PIRP Irp,
-                    IN HANDLE CallerProcess);
-
-NTSTATUS
 AFSQueueGlobalRootEnumeration( void);
 
 NTSTATUS