OpenAFS
OpenAFS distributed network file system
/cygdrive/c/src/openafs/openafs.git/repo/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h
00001 /*
00002  * Copyright (c) 2008, 2009, 2010, 2011 Kernel Drivers, LLC.
00003  * Copyright (c) 2009, 2010, 2011 Your File System, Inc.
00004  * All rights reserved.
00005  *
00006  * Redistribution and use in source and binary forms, with or without
00007  * modification, are permitted provided that the following conditions
00008  * are met:
00009  *
00010  * - Redistributions of source code must retain the above copyright notice,
00011  *   this list of conditions and the following disclaimer.
00012  * - Redistributions in binary form must reproduce the above copyright
00013  *   notice,
00014  *   this list of conditions and the following disclaimer in the
00015  *   documentation
00016  *   and/or other materials provided with the distribution.
00017  * - Neither the names of Kernel Drivers, LLC and Your File System, Inc.
00018  *   nor the names of their contributors may be used to endorse or promote
00019  *   products derived from this software without specific prior written
00020  *   permission from Kernel Drivers, LLC and Your File System, Inc.
00021  *
00022  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00023  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00024  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00025  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00026  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00027  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00028  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00029  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00030  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00031  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00032  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033  */
00034 
00035 #ifndef _AFS_COMMON_H
00036 #define _AFS_COMMON_H
00037 
00038 //
00039 // File: AFSCommon.h
00040 //
00041 
00042 extern "C"
00043 {
00044 
00045 #define AFS_KERNEL_MODE
00046 
00047 #include <ntifs.h>
00048 #include <wdmsec.h> // for IoCreateDeviceSecure
00049 #include <initguid.h>
00050 #include <ntintsafe.h>
00051 
00052 #include "AFSDefines.h"
00053 
00054 #include "AFSUserDefines.h"
00055 
00056 #include "AFSUserIoctl.h"
00057 
00058 #include "AFSUserStructs.h"
00059 
00060 #include "AFSRedirCommonDefines.h"
00061 
00062 #include "AFSRedirCommonStructs.h"
00063 
00064 #include "AFSStructs.h"
00065 
00066 #include "AFSProvider.h"
00067 
00068 #ifndef NO_EXTERN
00069 #include "AFSExtern.h"
00070 #endif
00071 
00072 #define NTSTRSAFE_LIB
00073 #include "ntstrsafe.h"
00074 
00075 NTSTATUS
00076 ZwQueryInformationProcess(
00077   __in       HANDLE ProcessHandle,
00078   __in       PROCESSINFOCLASS ProcessInformationClass,
00079   __out      PVOID ProcessInformation,
00080   __in       ULONG ProcessInformationLength,
00081   __out_opt  PULONG ReturnLength
00082 );
00083 
00084 NTSYSAPI
00085 NTSTATUS
00086 NTAPI
00087 RtlAbsoluteToSelfRelativeSD( IN PSECURITY_DESCRIPTOR  AbsoluteSecurityDescriptor,
00088                              OUT PSECURITY_DESCRIPTOR  SelfRelativeSecurityDescriptor,
00089                              IN OUT PULONG  BufferLength );
00090 
00091 #ifndef FILE_OPEN_REPARSE_POINT
00092 #define FILE_OPEN_REPARSE_POINT                 0x00200000
00093 #endif
00094 //
00095 // AFSBTreeSupport.cpp Prototypes
00096 //
00097 
00098 NTSTATUS
00099 AFSLocateCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
00100                                 IN ULONG Index,
00101                                 IN OUT AFSDirectoryCB **DirEntry);
00102 
00103 NTSTATUS
00104 AFSLocateCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
00105                                   IN ULONG Index,
00106                                   IN OUT AFSDirectoryCB **DirEntry);
00107 
00108 NTSTATUS
00109 AFSInsertCaseSensitiveDirEntry( IN AFSDirectoryCB *RootNode,
00110                                 IN AFSDirectoryCB *DirEntry);
00111 
00112 NTSTATUS
00113 AFSInsertCaseInsensitiveDirEntry( IN AFSDirectoryCB *RootNode,
00114                                   IN AFSDirectoryCB *DirEntry);
00115 
00116 NTSTATUS
00117 AFSRemoveCaseSensitiveDirEntry( IN AFSDirectoryCB **RootNode,
00118                                 IN AFSDirectoryCB *DirEntry);
00119 
00120 NTSTATUS
00121 AFSRemoveCaseInsensitiveDirEntry( IN AFSDirectoryCB **RootNode,
00122                                   IN AFSDirectoryCB *DirEntry);
00123 
00124 NTSTATUS
00125 AFSLocateShortNameDirEntry( IN AFSDirectoryCB *RootNode,
00126                             IN ULONG Index,
00127                             IN OUT AFSDirectoryCB **DirEntry);
00128 
00129 NTSTATUS
00130 AFSInsertShortNameDirEntry( IN AFSDirectoryCB *RootNode,
00131                             IN AFSDirectoryCB *DirEntry);
00132 
00133 NTSTATUS
00134 AFSRemoveShortNameDirEntry( IN AFSDirectoryCB **RootNode,
00135                             IN AFSDirectoryCB *DirEntry);
00136 
00137 NTSTATUS
00138 AFSLocateHashEntry( IN AFSBTreeEntry *TopNode,
00139                     IN ULONGLONG HashIndex,
00140                     IN OUT AFSBTreeEntry **TreeEntry);
00141 
00142 NTSTATUS
00143 AFSInsertHashEntry( IN AFSBTreeEntry *TopNode,
00144                     IN AFSBTreeEntry *FileIDEntry);
00145 
00146 NTSTATUS
00147 AFSRemoveHashEntry( IN AFSBTreeEntry **TopNode,
00148                     IN AFSBTreeEntry *FileIDEntry);
00149 
00150 //
00151 // AFSInit.cpp Prototypes
00152 //
00153 
00154 NTSTATUS
00155 DriverEntry( IN PDRIVER_OBJECT DriverObj,
00156              IN PUNICODE_STRING RegPath);
00157 
00158 void
00159 AFSUnload( IN PDRIVER_OBJECT DriverObject);
00160 
00161 //
00162 // AFSCommSupport.cpp Prototypes
00163 //
00164 
00165 NTSTATUS
00166 AFSEnumerateDirectory( IN GUID *AuthGroup,
00167                        IN AFSObjectInfoCB *ObjectInfoCB,
00168                        IN BOOLEAN   FastQuery);
00169 
00170 NTSTATUS
00171 AFSEnumerateDirectoryNoResponse( IN GUID *AuthGroup,
00172                                  IN AFSFileID *FileId);
00173 
00174 NTSTATUS
00175 AFSVerifyDirectoryContent( IN AFSObjectInfoCB *ObjectInfo,
00176                            IN GUID *AuthGroup);
00177 
00178 NTSTATUS
00179 AFSNotifyFileCreate( IN GUID            *AuthGroup,
00180                      IN AFSObjectInfoCB *ParentObjectInfo,
00181                      IN PLARGE_INTEGER FileSize,
00182                      IN ULONG FileAttributes,
00183                      IN UNICODE_STRING *FileName,
00184                      OUT AFSDirectoryCB **DirNode);
00185 
00186 NTSTATUS
00187 AFSUpdateFileInformation( IN AFSFileID *ParentFid,
00188                           IN AFSObjectInfoCB *ObjectInfo,
00189                           IN GUID *AuthGroup);
00190 
00191 NTSTATUS
00192 AFSNotifyDelete( IN AFSDirectoryCB *DirectoryCB,
00193                  IN GUID           *AuthGroup,
00194                  IN BOOLEAN         CheckOnly);
00195 
00196 NTSTATUS
00197 AFSNotifyRename( IN AFSObjectInfoCB *ObjectInfo,
00198                  IN GUID            *AuthGroup,
00199                  IN AFSObjectInfoCB *ParentObjectInfo,
00200                  IN AFSObjectInfoCB *TargetParentObjectInfo,
00201                  IN AFSDirectoryCB *DirectoryCB,
00202                  IN UNICODE_STRING *TargetName,
00203                  OUT AFSFileID  *UpdatedFID);
00204 
00205 NTSTATUS
00206 AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo,
00207                        IN GUID *AuthGroup,
00208                        IN BOOLEAN FastCall,
00209                        OUT AFSDirEnumEntry **DirEnumEntry);
00210 
00211 NTSTATUS
00212 AFSEvaluateTargetByName( IN GUID *AuthGroup,
00213                          IN AFSObjectInfoCB *ParentObjectInfo,
00214                          IN PUNICODE_STRING SourceName,
00215                          OUT AFSDirEnumEntry **DirEnumEntry);
00216 
00217 NTSTATUS
00218 AFSRetrieveVolumeInformation( IN GUID *AuthGroup,
00219                               IN AFSFileID *FileID,
00220                               OUT AFSVolumeInfoCB *VolumeInformation);
00221 
00222 NTSTATUS
00223 AFSRetrieveVolumeSizeInformation( IN GUID *AuthGroup,
00224                                   IN AFSFileID *FileID,
00225                                   OUT AFSVolumeSizeInfoCB *VolumeSizeInformation);
00226 
00227 NTSTATUS
00228 AFSNotifyPipeTransceive( IN AFSCcb *Ccb,
00229                          IN ULONG InputLength,
00230                          IN ULONG OutputLength,
00231                          IN void *InputDataBuffer,
00232                          OUT void *OutputDataBuffer,
00233                          OUT ULONG *BytesReturned);
00234 
00235 NTSTATUS
00236 AFSNotifySetPipeInfo( IN AFSCcb *Ccb,
00237                       IN ULONG InformationClass,
00238                       IN ULONG InputLength,
00239                       IN void *DataBuffer);
00240 
00241 NTSTATUS
00242 AFSNotifyQueryPipeInfo( IN AFSCcb *Ccb,
00243                         IN ULONG InformationClass,
00244                         IN ULONG OutputLength,
00245                         IN void *DataBuffer,
00246                         OUT ULONG *BytesReturned);
00247 
00248 NTSTATUS
00249 AFSReleaseFid( IN AFSFileID *FileId);
00250 
00251 BOOLEAN
00252 AFSIsExtentRequestQueued( IN AFSFileID *FileID,
00253                           IN LARGE_INTEGER *ExtentOffset,
00254                           IN ULONG Length);
00255 
00256 //
00257 // AFSCreate.cpp Prototypes
00258 //
00259 
00260 NTSTATUS
00261 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
00262            IN PIRP Irp);
00263 
00264 NTSTATUS
00265 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
00266                  IN PIRP Irp);
00267 
00268 NTSTATUS
00269 AFSOpenRedirector( IN PIRP Irp,
00270                    IN AFSFcb **Fcb,
00271                    IN AFSCcb **Ccb);
00272 
00273 NTSTATUS
00274 AFSOpenAFSRoot( IN PIRP Irp,
00275                 IN AFSFcb **Fcb,
00276                 IN AFSCcb **Ccb);
00277 
00278 NTSTATUS
00279 AFSOpenRoot( IN PIRP Irp,
00280              IN AFSVolumeCB *VolumeCB,
00281              IN GUID *AuthGroup,
00282              OUT AFSFcb **Fcb,
00283              OUT AFSCcb **Ccb);
00284 
00285 NTSTATUS
00286 AFSProcessCreate( IN PIRP               Irp,
00287                   IN GUID              *AuthGroup,
00288                   IN AFSVolumeCB       *VolumeCB,
00289                   IN AFSDirectoryCB    *ParentDirCB,
00290                   IN PUNICODE_STRING    FileName,
00291                   IN PUNICODE_STRING    ComponentName,
00292                   IN PUNICODE_STRING    FullFileName,
00293                   OUT AFSFcb          **Fcb,
00294                   OUT AFSCcb          **Ccb);
00295 
00296 NTSTATUS
00297 AFSOpenTargetDirectory( IN PIRP Irp,
00298                         IN AFSVolumeCB *VolumeCB,
00299                         IN AFSDirectoryCB *ParentDirectoryCB,
00300                         IN AFSDirectoryCB *TargetDirectoryCB,
00301                         IN UNICODE_STRING *TargetName,
00302                         OUT AFSFcb **Fcb,
00303                         OUT AFSCcb **Ccb);
00304 
00305 NTSTATUS
00306 AFSProcessOpen( IN PIRP Irp,
00307                 IN GUID *AuthGroup,
00308                 IN AFSVolumeCB *VolumeCB,
00309                 IN AFSDirectoryCB *ParentDirCB,
00310                 IN AFSDirectoryCB *DirectoryCB,
00311                 OUT AFSFcb **Fcb,
00312                 OUT AFSCcb **Ccb);
00313 
00314 NTSTATUS
00315 AFSProcessOverwriteSupersede( IN PDEVICE_OBJECT DeviceObject,
00316                               IN PIRP           Irp,
00317                               IN AFSVolumeCB   *VolumeCB,
00318                               IN GUID          *AuthGroup,
00319                               IN AFSDirectoryCB *ParentDirCB,
00320                               IN AFSDirectoryCB *DirectoryCB,
00321                               OUT AFSFcb       **Fcb,
00322                               OUT AFSCcb       **Ccb);
00323 
00324 NTSTATUS
00325 AFSControlDeviceCreate( IN PIRP Irp);
00326 
00327 NTSTATUS
00328 AFSOpenIOCtlFcb( IN PIRP Irp,
00329                  IN GUID *AuthGroup,
00330                  IN AFSDirectoryCB *ParentDirCB,
00331                  OUT AFSFcb **Fcb,
00332                  OUT AFSCcb **Ccb);
00333 
00334 NTSTATUS
00335 AFSOpenSpecialShareFcb( IN PIRP Irp,
00336                         IN GUID *AuthGroup,
00337                         IN AFSDirectoryCB *DirectoryCB,
00338                         OUT AFSFcb **Fcb,
00339                         OUT AFSCcb **Ccb);
00340 
00341 //
00342 // AFSExtentsSupport.cpp Prototypes
00343 //
00344 VOID
00345 AFSLockForExtentsTrim( IN AFSFcb *Fcb);
00346 
00347 PAFSExtent
00348 AFSExtentForOffset( IN AFSFcb *Fcb,
00349                     IN PLARGE_INTEGER Offset,
00350                     IN BOOLEAN ReturnPrevious);
00351 BOOLEAN
00352 AFSExtentContains( IN AFSExtent *Extent, IN PLARGE_INTEGER Offset);
00353 
00354 
00355 NTSTATUS
00356 AFSRequestExtents( IN  AFSFcb *Fcb,
00357                    IN  AFSCcb *Ccb,
00358                    IN  PLARGE_INTEGER Offset,
00359                    IN  ULONG Size,
00360                    OUT BOOLEAN *FullyMApped);
00361 
00362 BOOLEAN AFSDoExtentsMapRegion(IN AFSFcb *Fcb,
00363                               IN PLARGE_INTEGER Offset,
00364                               IN ULONG Size,
00365                               IN OUT AFSExtent **FirstExtent,
00366                               OUT AFSExtent **LastExtent);
00367 
00368 NTSTATUS
00369 AFSRequestExtentsAsync( IN AFSFcb *Fcb,
00370                         IN AFSCcb *Ccb,
00371                         IN PLARGE_INTEGER Offset,
00372                         IN ULONG Size);
00373 
00374 NTSTATUS
00375 AFSWaitForExtentMapping ( IN AFSFcb *Fcb,
00376                           IN AFSCcb *Ccb);
00377 
00378 NTSTATUS
00379 AFSProcessSetFileExtents( IN AFSSetFileExtentsCB *SetExtents );
00380 
00381 NTSTATUS
00382 AFSProcessReleaseFileExtents( IN PIRP Irp);
00383 
00384 NTSTATUS
00385 AFSProcessExtentFailure( PIRP Irp);
00386 
00387 NTSTATUS
00388 AFSProcessSetExtents( IN AFSFcb *pFcb,
00389                       IN ULONG   Count,
00390                       IN AFSFileExtentCB *Result);
00391 
00392 NTSTATUS
00393 AFSFlushExtents( IN AFSFcb *pFcb,
00394                  IN GUID *AuthGroup);
00395 
00396 NTSTATUS
00397 AFSReleaseExtentsWithFlush( IN AFSFcb *Fcb,
00398                             IN GUID *AuthGroup,
00399                             IN BOOLEAN bReleaseAll);
00400 
00401 NTSTATUS
00402 AFSReleaseCleanExtents( IN AFSFcb *Fcb,
00403                         IN GUID *AuthGroup);
00404 
00405 VOID
00406 AFSMarkDirty( IN AFSFcb *pFcb,
00407               IN AFSExtent *StartExtent,
00408               IN ULONG ExtentsCount,
00409               IN LARGE_INTEGER *StartingByte,
00410               IN BOOLEAN DerefExtents);
00411 
00412 VOID
00413 AFSTearDownFcbExtents( IN AFSFcb *Fcb,
00414                        IN GUID *AuthGroup);
00415 
00416 void
00417 AFSTrimExtents( IN AFSFcb *Fcb,
00418                 IN PLARGE_INTEGER FileSize);
00419 
00420 void
00421 AFSTrimSpecifiedExtents( IN AFSFcb *Fcb,
00422                          IN ULONG   Count,
00423                          IN AFSFileExtentCB *Result);
00424 
00425 void
00426 AFSReferenceActiveExtents( IN AFSExtent *StartExtent,
00427                            IN ULONG ExtentsCount);
00428 
00429 void
00430 AFSDereferenceActiveExtents( IN AFSExtent *StartExtent,
00431                              IN ULONG ExtentsCount);
00432 
00433 void
00434 AFSRemoveEntryDirtyList( IN AFSFcb *Fcb,
00435                          IN AFSExtent *Extent);
00436 
00437 AFSExtent *
00438 ExtentFor( PLIST_ENTRY le, ULONG SkipList );
00439 
00440 AFSExtent *
00441 NextExtent( AFSExtent *Extent, ULONG SkipList );
00442 
00443 ULONG
00444 AFSConstructCleanByteRangeList( AFSFcb * pFcb,
00445                                 AFSByteRange ** pByteRangeList);
00446 
00447 #if GEN_MD5
00448 void
00449 AFSSetupMD5Hash( IN AFSFcb *Fcb,
00450                  IN AFSExtent *StartExtent,
00451                  IN ULONG ExtentsCount,
00452                  IN void *SystemBuffer,
00453                  IN LARGE_INTEGER *ByteOffset,
00454                  IN ULONG ByteCount);
00455 #endif
00456 
00457 //
00458 //
00459 // AFSIoSupp.cpp Prototypes
00460 //
00461 NTSTATUS
00462 AFSGetExtents( IN  AFSFcb *pFcb,
00463                IN  PLARGE_INTEGER Offset,
00464                IN  ULONG Length,
00465                IN  AFSExtent *From,
00466                OUT ULONG *ExtentCount,
00467                OUT ULONG *RunCount);
00468 
00469 NTSTATUS
00470 AFSSetupIoRun( IN PDEVICE_OBJECT CacheDevice,
00471                IN PIRP           MasterIrp,
00472                IN PVOID          SystemBuffer,
00473                IN OUT AFSIoRun  *IoRun,
00474                IN PLARGE_INTEGER Start,
00475                IN ULONG          Length,
00476                IN AFSExtent     *From,
00477                IN OUT ULONG     *RunCount);
00478 
00479 NTSTATUS
00480 AFSStartIos( IN FILE_OBJECT     *CacheFileObject,
00481              IN UCHAR            FunctionCode,
00482              IN ULONG            IrpFlags,
00483              IN AFSIoRun        *IoRun,
00484              IN ULONG            Count,
00485              IN OUT AFSGatherIo *Gather);
00486 
00487 VOID
00488 AFSCompleteIo( IN AFSGatherIo *Gather,
00489                IN NTSTATUS Status);
00490 
00491 NTSTATUS
00492 AFSProcessExtentRun( IN PVOID          SystemBuffer,
00493                      IN PLARGE_INTEGER Start,
00494                      IN ULONG          Length,
00495                      IN AFSExtent     *From,
00496                      IN BOOLEAN        WriteRequest);
00497 
00498 //
00499 // AFSClose.cpp Prototypes
00500 //
00501 
00502 NTSTATUS
00503 AFSClose( IN PDEVICE_OBJECT DeviceObject,
00504           IN PIRP Irp);
00505 
00506 //
00507 // AFSFcbSupport.cpp Prototypes
00508 //
00509 
00510 NTSTATUS
00511 AFSInitFcb( IN AFSDirectoryCB   *DirEntry);
00512 
00513 NTSTATUS
00514 AFSInitVolume( IN GUID *AuthGroup,
00515                IN AFSFileID *RootFid,
00516                OUT AFSVolumeCB **VolumeCB);
00517 
00518 NTSTATUS
00519 AFSRemoveVolume( IN AFSVolumeCB *VolumeCB);
00520 
00521 NTSTATUS
00522 AFSInitRootFcb( IN ULONGLONG ProcessID,
00523                 IN AFSVolumeCB *VolumeCB);
00524 
00525 void
00526 AFSRemoveRootFcb( IN AFSFcb *RootFcb);
00527 
00528 NTSTATUS
00529 AFSInitCcb( IN OUT AFSCcb **Ccb);
00530 
00531 void
00532 AFSRemoveFcb( IN AFSFcb **Fcb);
00533 
00534 NTSTATUS
00535 AFSRemoveCcb( IN AFSFcb *Fcb,
00536               IN AFSCcb *Ccb);
00537 
00538 NTSTATUS
00539 AFSInsertCcb( IN AFSFcb *Fcb,
00540               IN AFSCcb *Ccb);
00541 
00542 //
00543 // AFSNameSupport.cpp Prototypes
00544 //
00545 
00546 NTSTATUS
00547 AFSLocateNameEntry( IN GUID *AuthGroup,
00548                     IN PFILE_OBJECT FileObject,
00549                     IN UNICODE_STRING *RootPathName,
00550                     IN UNICODE_STRING *ParsedPathName,
00551                     IN AFSNameArrayHdr *NameArray,
00552                     IN ULONG Flags,
00553                     OUT AFSVolumeCB **VolumeCB,
00554                     IN OUT AFSDirectoryCB **ParentDirectoryCB,
00555                     OUT AFSDirectoryCB **DirectoryCB,
00556                     OUT PUNICODE_STRING ComponentName);
00557 
00558 NTSTATUS
00559 AFSCreateDirEntry( IN GUID            *AuthGroup,
00560                    IN AFSObjectInfoCB *ParentObjectInfo,
00561                    IN AFSDirectoryCB *ParentDirCB,
00562                    IN PUNICODE_STRING FileName,
00563                    IN PUNICODE_STRING ComponentName,
00564                    IN ULONG Attributes,
00565                    IN OUT AFSDirectoryCB **DirEntry);
00566 
00567 void
00568 AFSInsertDirectoryNode( IN AFSObjectInfoCB *ParentObjectInfo,
00569                         IN AFSDirectoryCB *DirEntry,
00570                         IN BOOLEAN InsertInEnumList);
00571 
00572 NTSTATUS
00573 AFSDeleteDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
00574                    IN AFSDirectoryCB *DirEntry);
00575 
00576 NTSTATUS
00577 AFSRemoveDirNodeFromParent( IN AFSObjectInfoCB *ParentObjectInfo,
00578                             IN AFSDirectoryCB *DirEntry,
00579                             IN BOOLEAN RemoveFromEnumList);
00580 
00581 NTSTATUS
00582 AFSFixupTargetName( IN OUT PUNICODE_STRING FileName,
00583                     IN OUT PUNICODE_STRING TargetFileName);
00584 
00585 NTSTATUS
00586 AFSParseName( IN PIRP Irp,
00587               IN GUID *AuthGroup,
00588               OUT PUNICODE_STRING FileName,
00589               OUT PUNICODE_STRING ParsedFileName,
00590               OUT PUNICODE_STRING RootFileName,
00591               OUT ULONG *ParseFlags,
00592               OUT AFSVolumeCB **VolumeCB,
00593               OUT AFSDirectoryCB **ParentDirectoryCB,
00594               OUT AFSNameArrayHdr **NameArray);
00595 
00596 NTSTATUS
00597 AFSCheckCellName( IN GUID *AuthGroup,
00598                   IN UNICODE_STRING *CellName,
00599                   OUT AFSDirectoryCB **ShareDirEntry);
00600 
00601 NTSTATUS
00602 AFSBuildMountPointTarget( IN GUID *AuthGroup,
00603                           IN AFSDirectoryCB *DirectoryCB,
00604                           OUT AFSVolumeCB **VolumeCB);
00605 
00606 NTSTATUS
00607 AFSBuildRootVolume( IN GUID *AuthGroup,
00608                     IN AFSFileID *FileId,
00609                     OUT AFSVolumeCB **TargetVolumeCB);
00610 
00611 NTSTATUS
00612 AFSProcessDFSLink( IN AFSDirectoryCB *DirEntry,
00613                    IN PFILE_OBJECT FileObject,
00614                    IN UNICODE_STRING *RemainingPath,
00615                    IN GUID *AuthGroup);
00616 
00617 //
00618 // AFSNetworkProviderSupport.cpp
00619 //
00620 
00621 NTSTATUS
00622 AFSAddConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
00623                   IN OUT PULONG ResultStatus,
00624                   IN OUT ULONG_PTR *ReturnOutputBufferLength);
00625 
00626 NTSTATUS
00627 AFSCancelConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
00628                      IN OUT AFSCancelConnectionResultCB *ConnectionResult,
00629                      IN OUT ULONG_PTR *ReturnOutputBufferLength);
00630 
00631 NTSTATUS
00632 AFSGetConnection( IN AFSNetworkProviderConnectionCB *ConnectCB,
00633                   IN OUT WCHAR *RemoteName,
00634                   IN ULONG RemoteNameBufferLength,
00635                   IN OUT ULONG_PTR *ReturnOutputBufferLength);
00636 
00637 NTSTATUS
00638 AFSListConnections( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
00639                     IN ULONG ConnectionBufferLength,
00640                     IN OUT ULONG_PTR *ReturnOutputBufferLength);
00641 
00642 void
00643 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
00644                              IN ULONG DisplayType);
00645 
00646 AFSProviderConnectionCB *
00647 AFSLocateEnumRootEntry( IN UNICODE_STRING *RemoteName);
00648 
00649 NTSTATUS
00650 AFSEnumerateConnection( IN OUT AFSNetworkProviderConnectionCB *ConnectCB,
00651                         IN AFSProviderConnectionCB *RootConnection,
00652                         IN ULONG BufferLength,
00653                         OUT PULONG CopiedLength);
00654 
00655 NTSTATUS
00656 AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB,
00657                       IN ULONG BufferLength,
00658                       IN OUT ULONG_PTR *ReturnOutputBufferLength);
00659 
00660 BOOLEAN
00661 AFSIsDriveMapped( IN WCHAR DriveMapping);
00662 
00663 //
00664 // AFSRead.cpp Prototypes
00665 //
00666 
00667 NTSTATUS
00668 AFSCommonRead( IN PDEVICE_OBJECT DeviceObject,
00669                IN PIRP Irp,
00670                IN HANDLE OnBehalfOf);
00671 
00672 NTSTATUS
00673 AFSRead( IN PDEVICE_OBJECT DeviceObject,
00674          IN PIRP Irp);
00675 
00676 
00677 NTSTATUS
00678 AFSIOCtlRead( IN PDEVICE_OBJECT DeviceObject,
00679               IN PIRP Irp);
00680 
00681 NTSTATUS
00682 AFSShareRead( IN PDEVICE_OBJECT DeviceObject,
00683               IN PIRP Irp);
00684 
00685 //
00686 // AFSWrite.cpp Prototypes
00687 //
00688 
00689 NTSTATUS
00690 AFSCommonWrite( IN PDEVICE_OBJECT DeviceObject,
00691           IN PIRP Irp,
00692           IN HANDLE CallingUser);
00693 
00694 NTSTATUS
00695 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
00696                 IN PIRP Irp);
00697 
00698 NTSTATUS
00699 AFSIOCtlWrite( IN PDEVICE_OBJECT DeviceObject,
00700                IN PIRP Irp);
00701 
00702 NTSTATUS
00703 AFSShareWrite( IN PDEVICE_OBJECT DeviceObject,
00704                IN PIRP Irp);
00705 
00706 //
00707 // AFSFileInfo.cpp Prototypes
00708 //
00709 
00710 NTSTATUS
00711 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
00712                   IN PIRP Irp);
00713 
00714 NTSTATUS
00715 AFSQueryBasicInfo( IN PIRP Irp,
00716                    IN AFSDirectoryCB *DirectoryCB,
00717                    IN OUT PFILE_BASIC_INFORMATION Buffer,
00718                    IN OUT PLONG Length);
00719 
00720 NTSTATUS
00721 AFSQueryStandardInfo( IN PIRP Irp,
00722                       IN AFSDirectoryCB *DirectoryCB,
00723                       IN OUT PFILE_STANDARD_INFORMATION Buffer,
00724                       IN OUT PLONG Length);
00725 
00726 NTSTATUS
00727 AFSQueryInternalInfo( IN PIRP Irp,
00728                       IN AFSFcb *Fcb,
00729                       IN OUT PFILE_INTERNAL_INFORMATION Buffer,
00730                       IN OUT PLONG Length);
00731 
00732 NTSTATUS
00733 AFSQueryEaInfo( IN PIRP Irp,
00734                 IN AFSDirectoryCB *DirectoryCB,
00735                 IN OUT PFILE_EA_INFORMATION Buffer,
00736                 IN OUT PLONG Length);
00737 
00738 NTSTATUS
00739 AFSQueryPositionInfo( IN PIRP Irp,
00740                       IN AFSFcb *Fcb,
00741                       IN OUT PFILE_POSITION_INFORMATION Buffer,
00742                       IN OUT PLONG Length);
00743 
00744 NTSTATUS
00745 AFSQueryNameInfo( IN PIRP Irp,
00746                   IN AFSDirectoryCB *DirectoryCB,
00747                   IN OUT PFILE_NAME_INFORMATION Buffer,
00748                   IN OUT PLONG Length);
00749 
00750 NTSTATUS
00751 AFSQueryShortNameInfo( IN PIRP Irp,
00752                        IN AFSDirectoryCB *DirectoryCB,
00753                        IN OUT PFILE_NAME_INFORMATION Buffer,
00754                        IN OUT PLONG Length);
00755 
00756 NTSTATUS
00757 AFSQueryNetworkInfo( IN PIRP Irp,
00758                      IN AFSDirectoryCB *DirectoryCB,
00759                      IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
00760                      IN OUT PLONG Length);
00761 
00762 NTSTATUS
00763 AFSQueryStreamInfo( IN PIRP Irp,
00764                     IN AFSDirectoryCB *DirectoryCB,
00765                     IN OUT FILE_STREAM_INFORMATION *Buffer,
00766                     IN OUT PLONG Length);
00767 
00768 NTSTATUS
00769 AFSQueryAccess( IN PIRP Irp,
00770                 IN AFSFcb *Fcb,
00771                 IN OUT PFILE_ACCESS_INFORMATION Buffer,
00772                 IN OUT PLONG Length);
00773 
00774 NTSTATUS
00775 AFSQueryMode( IN PIRP Irp,
00776               IN AFSFcb *Fcb,
00777               IN OUT PFILE_MODE_INFORMATION Buffer,
00778               IN OUT PLONG Length);
00779 
00780 NTSTATUS
00781 AFSQueryAlignment( IN PIRP Irp,
00782                    IN AFSFcb *Fcb,
00783                    IN OUT PFILE_ALIGNMENT_INFORMATION Buffer,
00784                    IN OUT PLONG Length);
00785 
00786 NTSTATUS
00787 AFSQueryAttribTagInfo( IN PIRP Irp,
00788                        IN AFSDirectoryCB *DirectoryCB,
00789                        IN OUT FILE_ATTRIBUTE_TAG_INFORMATION *Buffer,
00790                        IN OUT PLONG Length);
00791 
00792 NTSTATUS
00793 AFSQueryRemoteProtocolInfo( IN PIRP Irp,
00794                             IN AFSDirectoryCB *DirectoryCB,
00795                             IN OUT FILE_REMOTE_PROTOCOL_INFORMATION *Buffer,
00796                             IN OUT PLONG Length);
00797 
00798 NTSTATUS
00799 AFSQueryPhysicalNameInfo( IN PIRP Irp,
00800                           IN AFSDirectoryCB *DirectoryCB,
00801                           IN OUT PFILE_NETWORK_PHYSICAL_NAME_INFORMATION Buffer,
00802                           IN OUT PLONG Length);
00803 
00804 NTSTATUS
00805 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
00806                 IN PIRP Irp);
00807 
00808 NTSTATUS
00809 AFSSetBasicInfo( IN PIRP Irp,
00810                  IN AFSDirectoryCB *DirectoryCB);
00811 
00812 NTSTATUS
00813 AFSSetDispositionInfo( IN PIRP Irp,
00814                        IN AFSDirectoryCB *DirectoryCB);
00815 
00816 NTSTATUS
00817 AFSSetRenameInfo( IN PIRP Irp);
00818 
00819 NTSTATUS
00820 AFSSetPositionInfo( IN PIRP Irp,
00821                     IN AFSDirectoryCB *DirectoryCB);
00822 
00823 NTSTATUS
00824 AFSSetAllocationInfo( IN PIRP Irp,
00825                       IN AFSDirectoryCB *DirectoryCB);
00826 
00827 NTSTATUS
00828 AFSSetEndOfFileInfo( IN PIRP Irp,
00829                      IN AFSDirectoryCB *DirectoryCB);
00830 
00831 NTSTATUS
00832 AFSProcessShareSetInfo( IN IRP *Irp,
00833                         IN AFSFcb *Fcb,
00834                         IN AFSCcb *Ccb);
00835 
00836 NTSTATUS
00837 AFSProcessShareQueryInfo( IN IRP *Irp,
00838                           IN AFSFcb *Fcb,
00839                           IN AFSCcb *Ccb);
00840 
00841 NTSTATUS
00842 AFSProcessPIOCtlQueryInfo( IN IRP *Irp,
00843                            IN AFSFcb *Fcb,
00844                            IN AFSCcb *Ccb,
00845                            IN OUT LONG *Length);
00846 
00847 //
00848 // AFSEa.cpp Prototypes
00849 //
00850 
00851 NTSTATUS
00852 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
00853             IN PIRP Irp);
00854 
00855 NTSTATUS
00856 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
00857           IN PIRP Irp);
00858 
00859 //
00860 // AFSFlushBuffers.cpp Prototypes
00861 //
00862 
00863 NTSTATUS
00864 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
00865                  IN PIRP Irp);
00866 
00867 //
00868 // AFSVolumeInfo.cpp Prototypes
00869 //
00870 
00871 NTSTATUS
00872 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
00873                     IN PIRP Irp);
00874 
00875 NTSTATUS
00876 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
00877                   IN PIRP Irp);
00878 
00879 NTSTATUS
00880 AFSQueryFsVolumeInfo( IN AFSVolumeInfoCB *VolumeInfo,
00881                       IN PFILE_FS_VOLUME_INFORMATION Buffer,
00882                       IN OUT PULONG Length);
00883 
00884 NTSTATUS
00885 AFSQueryFsSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
00886                     IN PFILE_FS_SIZE_INFORMATION Buffer,
00887                     IN OUT PULONG Length);
00888 
00889 NTSTATUS
00890 AFSQueryFsDeviceInfo( IN AFSVolumeInfoCB *VolumeInfo,
00891                       IN PFILE_FS_DEVICE_INFORMATION Buffer,
00892                       IN OUT PULONG Length);
00893 
00894 NTSTATUS
00895 AFSQueryFsAttributeInfo( IN AFSVolumeInfoCB *VolumeInfo,
00896                          IN PFILE_FS_ATTRIBUTE_INFORMATION Buffer,
00897                          IN OUT PULONG Length);
00898 
00899 NTSTATUS
00900 AFSQueryFsFullSizeInfo( IN AFSVolumeInfoCB *VolumeInfo,
00901                         IN PFILE_FS_FULL_SIZE_INFORMATION Buffer,
00902                         IN OUT PULONG Length);
00903 
00904 //
00905 // AFSDirControl.cpp Prototypes
00906 //
00907 
00908 NTSTATUS
00909 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
00910                IN PIRP Irp);
00911 
00912 NTSTATUS
00913 AFSQueryDirectory( IN PIRP Irp);
00914 
00915 NTSTATUS
00916 AFSNotifyChangeDirectory( IN PIRP Irp);
00917 
00918 AFSDirectoryCB *
00919 AFSLocateNextDirEntry( IN AFSObjectInfoCB *ObjectInfo,
00920                        IN AFSCcb *Ccb);
00921 
00922 AFSDirectoryCB *
00923 AFSLocateDirEntryByIndex( IN AFSObjectInfoCB *ObjectInfo,
00924                           IN AFSCcb *Ccb,
00925                           IN ULONG DirIndex);
00926 
00927 NTSTATUS
00928 AFSSnapshotDirectory( IN AFSFcb *Fcb,
00929                       IN AFSCcb *Ccb,
00930                       IN BOOLEAN ResetIndex);
00931 
00932 NTSTATUS
00933 AFSFsRtlNotifyFullChangeDirectory( IN AFSObjectInfoCB *ObjectInfo,
00934                                    IN AFSCcb *Context,
00935                                    IN BOOLEAN WatchTree,
00936                                    IN ULONG CompletionFilter,
00937                                    IN PIRP NotifyIrp);
00938 
00939 void
00940 AFSFsRtlNotifyFullReportChange( IN AFSObjectInfoCB *ObjectInfo,
00941                                 IN AFSCcb *Ccb,
00942                                 IN ULONG NotifyFilter,
00943                                 IN ULONG NotificationAction);
00944 
00945 BOOLEAN
00946 AFSNotifyReportChangeCallback( IN void *NotifyContext,
00947                                IN void *FilterContext);
00948 
00949 BOOLEAN
00950 AFSIsNameInSnapshot( IN AFSSnapshotHdr *SnapshotHdr,
00951                      IN ULONG HashIndex);
00952 
00953 //
00954 // AFSFSControl.cpp Prototypes
00955 //
00956 
00957 NTSTATUS
00958 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
00959               IN PIRP Irp);
00960 
00961 NTSTATUS
00962 AFSProcessUserFsRequest( IN PIRP Irp);
00963 
00964 NTSTATUS
00965 AFSProcessShareFsCtrl( IN IRP *Irp,
00966                        IN AFSFcb *Fcb,
00967                        IN AFSCcb *Ccb);
00968 
00969 //
00970 // AFSDevControl.cpp Prototypes
00971 //
00972 
00973 NTSTATUS
00974 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
00975                IN PIRP Irp);
00976 
00977 //
00978 // AFSInternalDevControl.cpp Prototypes
00979 //
00980 
00981 NTSTATUS
00982 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
00983                        IN PIRP Irp);
00984 
00985 //
00986 // AFSShutdown.cpp Prototypes
00987 //
00988 
00989 NTSTATUS
00990 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
00991              IN PIRP Irp);
00992 
00993 
00994 NTSTATUS
00995 AFSShutdownFilesystem( void);
00996 
00997 //
00998 // AFSLockControl.cpp Prototypes
00999 //
01000 
01001 NTSTATUS
01002 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
01003                 IN PIRP Irp);
01004 
01005 //
01006 // AFSCleanup.cpp Prototypes
01007 //
01008 
01009 NTSTATUS
01010 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
01011             IN PIRP Irp);
01012 
01013 //
01014 // AFSSecurity.cpp Prototypes
01015 //
01016 
01017 NTSTATUS
01018 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
01019                   IN PIRP Irp);
01020 
01021 NTSTATUS
01022 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
01023                 IN PIRP Irp);
01024 
01025 //
01026 // AFSSystemControl.cpp Prototypes
01027 //
01028 
01029 NTSTATUS
01030 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
01031                   IN PIRP Irp);
01032 
01033 //
01034 // AFSQuota.cpp Prototypes
01035 //
01036 
01037 NTSTATUS
01038 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
01039                IN PIRP Irp);
01040 
01041 NTSTATUS
01042 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
01043              IN PIRP Irp);
01044 
01045 //
01046 // AFSGeneric.cpp Prototypes
01047 //
01048 
01049 ULONG
01050 AFSExceptionFilter( IN CHAR *FunctionString,
01051                     IN ULONG Code,
01052                     IN PEXCEPTION_POINTERS ExceptPtrs);
01053 
01054 BOOLEAN
01055 AFSAcquireExcl( IN PERESOURCE Resource,
01056                 IN BOOLEAN wait);
01057 
01058 BOOLEAN
01059 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
01060                                  IN BOOLEAN Wait);
01061 
01062 BOOLEAN
01063 AFSAcquireShared( IN PERESOURCE Resource,
01064                   IN BOOLEAN wait);
01065 
01066 void
01067 AFSReleaseResource( IN PERESOURCE Resource);
01068 
01069 void
01070 AFSConvertToShared( IN PERESOURCE Resource);
01071 
01072 void
01073 AFSCompleteRequest( IN PIRP Irp,
01074                     IN ULONG Status);
01075 
01076 ULONG
01077 AFSGenerateCRC( IN PUNICODE_STRING FileName,
01078                 IN BOOLEAN UpperCaseName);
01079 
01080 void *
01081 AFSLockSystemBuffer( IN PIRP Irp,
01082                      IN ULONG Length);
01083 
01084 void *
01085 AFSLockUserBuffer( IN void *UserBuffer,
01086                    IN ULONG BufferLength,
01087                                    OUT MDL ** Mdl);
01088 
01089 void *
01090 AFSMapToService( IN PIRP Irp,
01091                  IN ULONG ByteCount);
01092 
01093 NTSTATUS
01094 AFSUnmapServiceMappedBuffer( IN void *MappedBuffer,
01095                              IN PMDL Mdl);
01096 
01097 NTSTATUS
01098 AFSInitializeLibraryDevice( void);
01099 
01100 NTSTATUS
01101 AFSRemoveLibraryDevice( void);
01102 
01103 NTSTATUS
01104 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
01105                     IN PIRP Irp);
01106 
01107 NTSTATUS
01108 AFSInitializeGlobalDirectoryEntries( void);
01109 
01110 AFSDirectoryCB *
01111 AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo,
01112                  IN PUNICODE_STRING FileName,
01113                  IN PUNICODE_STRING TargetName,
01114                  IN AFSDirEnumEntry *DirEnumEntry,
01115                  IN ULONG FileIndex);
01116 
01117 BOOLEAN
01118 AFSCheckForReadOnlyAccess( IN ACCESS_MASK DesiredAccess,
01119                            IN BOOLEAN DirectoryEntry);
01120 
01121 NTSTATUS
01122 AFSEvaluateNode( IN GUID *AuthGroup,
01123                  IN AFSDirectoryCB *DirEntry);
01124 
01125 NTSTATUS
01126 AFSValidateSymLink( IN GUID *AuthGroup,
01127                     IN AFSDirectoryCB *DirEntry);
01128 
01129 NTSTATUS
01130 AFSInvalidateCache( IN AFSInvalidateCacheCB *InvalidateCB);
01131 
01132 NTSTATUS
01133 AFSInvalidateObject( IN OUT AFSObjectInfoCB **ppObjectInfo,
01134                      IN     ULONG Reason);
01135 
01136 BOOLEAN
01137 AFSIsChildOfParent( IN AFSFcb *Dcb,
01138                     IN AFSFcb *Fcb);
01139 
01140 inline
01141 ULONGLONG
01142 AFSCreateHighIndex( IN AFSFileID *FileID);
01143 
01144 inline
01145 ULONGLONG
01146 AFSCreateLowIndex( IN AFSFileID *FileID);
01147 
01148 BOOLEAN
01149 AFSCheckAccess( IN ACCESS_MASK DesiredAccess,
01150                 IN ACCESS_MASK GrantedAccess,
01151                 IN BOOLEAN DirectoryEntry);
01152 
01153 NTSTATUS
01154 AFSGetDriverStatus( IN AFSDriverStatusRespCB *DriverStatus);
01155 
01156 NTSTATUS
01157 AFSSubstituteSysName( IN UNICODE_STRING *ComponentName,
01158                       IN UNICODE_STRING *SubstituteName,
01159                       IN ULONG StringIndex);
01160 
01161 NTSTATUS
01162 AFSSubstituteNameInPath( IN OUT UNICODE_STRING *FullPathName,
01163                          IN OUT UNICODE_STRING *ComponentName,
01164                          IN UNICODE_STRING *SubstituteName,
01165                          IN OUT UNICODE_STRING *RemainingPath,
01166                          IN BOOLEAN FreePathName);
01167 
01168 NTSTATUS
01169 AFSInvalidateVolume( IN AFSVolumeCB *VolumeCB,
01170                      IN ULONG Reason);
01171 
01172 VOID
01173 AFSInvalidateAllVolumes( VOID);
01174 
01175 NTSTATUS
01176 AFSVerifyEntry( IN GUID *AuthGroup,
01177                 IN AFSDirectoryCB *DirectoryCB);
01178 
01179 NTSTATUS
01180 AFSSetVolumeState( IN AFSVolumeStatusCB *VolumeStatus);
01181 
01182 NTSTATUS
01183 AFSSetNetworkState( IN AFSNetworkStatusCB *NetworkStatus);
01184 
01185 NTSTATUS
01186 AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
01187                            IN GUID *AuthGroup);
01188 
01189 BOOLEAN
01190 AFSIsVolumeFID( IN AFSFileID *FileID);
01191 
01192 BOOLEAN
01193 AFSIsFinalNode( IN AFSFcb *Fcb);
01194 
01195 NTSTATUS
01196 AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry,
01197                    IN AFSDirEnumEntry *DirEnumEntry);
01198 
01199 NTSTATUS
01200 AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
01201                   IN GUID *AuthGroup,
01202                   IN BOOLEAN FastCall);
01203 
01204 AFSDirectoryCB *
01205 AFSGetSpecialShareNameEntry( IN UNICODE_STRING *ShareName,
01206                              IN UNICODE_STRING *SecondaryName);
01207 
01208 NTSTATUS
01209 AFSInitializeSpecialShareNameList( void);
01210 
01211 void
01212 AFSWaitOnQueuedFlushes( IN AFSFcb *Fcb);
01213 
01214 void
01215 AFSWaitOnQueuedReleases( void);
01216 
01217 BOOLEAN
01218 AFSIsEqualFID( IN AFSFileID *FileId1,
01219                IN AFSFileID *FileId2);
01220 
01221 NTSTATUS
01222 AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB);
01223 
01224 NTSTATUS
01225 AFSEnumerateGlobalRoot( IN GUID *AuthGroup);
01226 
01227 BOOLEAN
01228 AFSIsRelativeName( IN UNICODE_STRING *Name);
01229 
01230 void
01231 AFSUpdateName( IN UNICODE_STRING *Name);
01232 
01233 NTSTATUS
01234 AFSUpdateTargetName( IN OUT UNICODE_STRING *TargetName,
01235                      IN OUT ULONG *Flags,
01236                      IN WCHAR *NameBuffer,
01237                      IN USHORT NameLength);
01238 
01239 AFSNameArrayHdr *
01240 AFSInitNameArray( IN AFSDirectoryCB *DirectoryCB,
01241                   IN ULONG InitialElementCount);
01242 
01243 NTSTATUS
01244 AFSPopulateNameArray( IN AFSNameArrayHdr *NameArray,
01245                       IN UNICODE_STRING *Path,
01246                       IN AFSDirectoryCB *DirectoryCB);
01247 
01248 NTSTATUS
01249 AFSPopulateNameArrayFromRelatedArray( IN AFSNameArrayHdr *NameArray,
01250                                       IN AFSNameArrayHdr *RelatedNameArray,
01251                                       IN AFSDirectoryCB *DirectoryCB);
01252 
01253 NTSTATUS
01254 AFSFreeNameArray( IN AFSNameArrayHdr *NameArray);
01255 
01256 NTSTATUS
01257 AFSInsertNextElement( IN AFSNameArrayHdr *NameArray,
01258                       IN AFSDirectoryCB *DirEntry);
01259 
01260 AFSDirectoryCB *
01261 AFSBackupEntry( IN AFSNameArrayHdr *NameArray);
01262 
01263 AFSDirectoryCB *
01264 AFSGetParentEntry( IN AFSNameArrayHdr *NameArray);
01265 
01266 void
01267 AFSResetNameArray( IN AFSNameArrayHdr *NameArray,
01268                    IN AFSDirectoryCB *DirEntry);
01269 
01270 void
01271 AFSDumpNameArray( IN IN AFSNameArrayHdr *NameArray);
01272 
01273 void
01274 AFSSetEnumerationEvent( IN AFSFcb *Fcb);
01275 
01276 void
01277 AFSClearEnumerationEvent( IN AFSFcb *Fcb);
01278 
01279 BOOLEAN
01280 AFSIsEnumerationInProcess( IN AFSObjectInfoCB *ObjectInfo);
01281 
01282 NTSTATUS
01283 AFSVerifyVolume( IN ULONGLONG ProcessId,
01284                  IN AFSVolumeCB *VolumeCB);
01285 
01286 NTSTATUS
01287 AFSInitPIOCtlDirectoryCB( IN AFSObjectInfoCB *ObjectInfo);
01288 
01289 NTSTATUS
01290 AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB,
01291                            IN AFSDirectoryCB *DirectoryCB,
01292                            IN UNICODE_STRING *ParentPathName,
01293                            IN AFSNameArrayHdr *RelatedNameArray,
01294                            IN GUID           *AuthGroup,
01295                            OUT AFSFileInfoCB *FileInfo);
01296 
01297 AFSObjectInfoCB *
01298 AFSAllocateObjectInfo( IN AFSObjectInfoCB *ParentObjectInfo,
01299                        IN ULONGLONG HashIndex);
01300 
01301 void
01302 AFSDeleteObjectInfo( IN AFSObjectInfoCB *ObjectInfo);
01303 
01304 NTSTATUS
01305 AFSEvaluateRootEntry( IN AFSDirectoryCB *DirectoryCB,
01306                       OUT AFSDirectoryCB **TargetDirEntry);
01307 
01308 NTSTATUS
01309 AFSCleanupFcb( IN AFSFcb *Fcb,
01310                IN BOOLEAN ForceFlush);
01311 
01312 NTSTATUS
01313 AFSUpdateDirEntryName( IN AFSDirectoryCB *DirectoryCB,
01314                        IN UNICODE_STRING *NewFileName);
01315 
01316 NTSTATUS
01317 AFSReadCacheFile( IN void *ReadBuffer,
01318                   IN LARGE_INTEGER *ReadOffset,
01319                   IN ULONG RequestedDataLength,
01320                   IN OUT PULONG BytesRead);
01321 
01322 NTSTATUS
01323 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
01324                 IN PIRP           Irp,
01325                 IN PVOID          Context);
01326 
01327 BOOLEAN
01328 AFSIsDirectoryEmptyForDelete( IN AFSFcb *Fcb);
01329 
01330 void
01331 AFSRemoveNameEntry( IN AFSObjectInfoCB *ParentObjectInfo,
01332                     IN AFSDirectoryCB *DirEntry);
01333 
01334 LARGE_INTEGER
01335 AFSGetAuthenticationId( void);
01336 
01337 void
01338 AFSUnwindFileInfo( IN AFSFcb *Fcb,
01339                    IN AFSCcb *Ccb);
01340 
01341 BOOLEAN
01342 AFSValidateDirList( IN AFSObjectInfoCB *ObjectInfo);
01343 
01344 PFILE_OBJECT
01345 AFSReferenceCacheFileObject( void);
01346 
01347 void
01348 AFSReleaseCacheFileObject( IN PFILE_OBJECT CacheFileObject);
01349 
01350 NTSTATUS
01351 AFSInitializeLibrary( IN AFSLibraryInitCB *LibraryInit);
01352 
01353 NTSTATUS
01354 AFSCloseLibrary( void);
01355 
01356 NTSTATUS
01357 AFSDefaultLogMsg( IN ULONG Subsystem,
01358                   IN ULONG Level,
01359                   IN PCCH Format,
01360                   ...);
01361 
01362 NTSTATUS
01363 AFSGetObjectStatus( IN AFSGetStatusInfoCB *GetStatusInfo,
01364                     IN ULONG InputBufferLength,
01365                     IN AFSStatusInfoCB *StatusInfo,
01366                     OUT ULONG *ReturnLength);
01367 
01368 NTSTATUS
01369 AFSCheckSymlinkAccess( IN AFSDirectoryCB *ParentDirectoryCB,
01370                        IN UNICODE_STRING *ComponentName);
01371 
01372 NTSTATUS
01373 AFSRetrieveFinalComponent( IN UNICODE_STRING *FullPathName,
01374                            OUT UNICODE_STRING *ComponentName);
01375 
01376 void
01377 AFSDumpTraceFiles_Default( void);
01378 
01379 void *
01380 AFSLibExAllocatePoolWithTag( IN POOL_TYPE  PoolType,
01381                              IN SIZE_T  NumberOfBytes,
01382                              IN ULONG  Tag);
01383 
01384 BOOLEAN
01385 AFSValidNameFormat( IN UNICODE_STRING *FileName);
01386 
01387 NTSTATUS
01388 AFSCreateDefaultSecurityDescriptor( void);
01389 
01390 void
01391 AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName,
01392                        OUT UNICODE_STRING *ParentPath);
01393 
01394 NTSTATUS
01395 AFSRetrieveValidAuthGroup( IN AFSFcb *Fcb,
01396                            IN AFSObjectInfoCB *ObjectInfo,
01397                            IN BOOLEAN WriteAccess,
01398                            OUT GUID *AuthGroup);
01399 
01400 NTSTATUS
01401 AFSPerformObjectInvalidate( IN AFSObjectInfoCB *ObjectInfo,
01402                             IN ULONG InvalidateReason);
01403 
01404 //
01405 // AFSWorker.cpp Prototypes
01406 //
01407 
01408 NTSTATUS
01409 AFSInitializeWorkerPool( void);
01410 
01411 NTSTATUS
01412 AFSRemoveWorkerPool( void);
01413 
01414 NTSTATUS
01415 AFSInitWorkerThread( IN AFSWorkQueueContext *PoolContext,
01416                      IN PKSTART_ROUTINE WorkerRoutine);
01417 
01418 NTSTATUS
01419 AFSInitVolumeWorker( IN AFSVolumeCB *VolumeCB);
01420 
01421 NTSTATUS
01422 AFSShutdownWorkerThread( IN AFSWorkQueueContext *PoolContext);
01423 
01424 NTSTATUS
01425 AFSShutdownIOWorkerThread( IN AFSWorkQueueContext *PoolContext);
01426 
01427 NTSTATUS
01428 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
01429 
01430 void
01431 AFSWorkerThread( IN PVOID Context);
01432 
01433 void
01434 AFSIOWorkerThread( IN PVOID Context);
01435 
01436 void
01437 AFSPrimaryVolumeWorkerThread( IN PVOID Context);
01438 
01439 void
01440 AFSVolumeWorkerThread( IN PVOID Context);
01441 
01442 NTSTATUS
01443 AFSInsertWorkitem( IN AFSWorkItem *WorkItem);
01444 
01445 NTSTATUS
01446 AFSInsertIOWorkitem( IN AFSWorkItem *WorkItem);
01447 
01448 NTSTATUS
01449 AFSInsertWorkitemAtHead( IN AFSWorkItem *WorkItem);
01450 
01451 AFSWorkItem *
01452 AFSRemoveWorkItem( void);
01453 
01454 AFSWorkItem *
01455 AFSRemoveIOWorkItem( void);
01456 
01457 NTSTATUS
01458 AFSQueueWorkerRequest( IN AFSWorkItem *WorkItem);
01459 
01460 NTSTATUS
01461 AFSQueueIOWorkerRequest( IN AFSWorkItem *WorkItem);
01462 
01463 NTSTATUS
01464 AFSQueueWorkerRequestAtHead( IN AFSWorkItem *WorkItem);
01465 
01466 NTSTATUS
01467 AFSShutdownVolumeWorker( IN AFSVolumeCB *VolumeCB);
01468 
01469 NTSTATUS
01470 AFSQueueFlushExtents( IN AFSFcb *Fcb,
01471                       IN GUID *AuthGroup);
01472 
01473 NTSTATUS
01474 AFSQueueGlobalRootEnumeration( void);
01475 
01476 NTSTATUS
01477 AFSQueuePurgeObject( IN AFSFcb *Fcb);
01478 
01479 NTSTATUS
01480 AFSQueueStartIos( IN PFILE_OBJECT CacheFileObject,
01481                   IN UCHAR FunctionCode,
01482                   IN ULONG RequestFLags,
01483                   IN AFSIoRun *IoRuns,
01484                   IN ULONG RunCount,
01485                   IN AFSGatherIo *GatherIo);
01486 
01487 NTSTATUS
01488 AFSQueueInvalidateObject( IN AFSObjectInfoCB *ObjectInfo,
01489                           IN ULONG InvalidateReason);
01490 
01491 //
01492 // AFSMD5Support.cpp Prototypes
01493 //
01494 
01495 void
01496 AFSGenerateMD5( IN char *DataBuffer,
01497                 IN ULONG Length,
01498                 OUT UCHAR *MD5Digest);
01499 
01500 };
01501 
01502 #endif /* _AFS_COMMON_H */
 All Data Structures Files Functions Variables