#define AFS_REQUEST_LOCAL_SYSTEM_PAG 0x00000200 // Indicates that the caller is or was at some point a system
// process
+#define AFS_REQUEST_FLAG_LAST_COMPONENT 0x00000800 // During an AFS_REQUEST_TYPE_TARGET_BY_NAME the provided name
+ // is the last component in the path.
+
//
// Request Flags, these are passed down from the sevice
//
AFSEvaluateTargetByName( IN GUID *AuthGroup,
IN AFSObjectInfoCB *ParentObjectInfo,
IN PUNICODE_STRING SourceName,
+ IN ULONG Flags,
OUT AFSDirEnumEntry **DirEnumEntry)
{
ulResultBufferLength = PAGE_SIZE;
ntStatus = AFSProcessRequest( AFS_REQUEST_TYPE_EVAL_TARGET_BY_NAME,
- AFS_REQUEST_FLAG_SYNCHRONOUS,
+ AFS_REQUEST_FLAG_SYNCHRONOUS | Flags,
AuthGroup,
SourceName,
NULL,
ntStatus = AFSEvaluateTargetByName( AuthGroup,
&AFSGlobalRoot->ObjectInformation,
CellName,
+ 0,
&pDirEnumEntry);
if( !NT_SUCCESS( ntStatus))
ntStatus = AFSEvaluateTargetByName( NULL,
&AFSGlobalRoot->ObjectInformation,
&uniShareName,
+ 0,
&pDirEnumEntry);
if( !NT_SUCCESS( ntStatus))
AFSEvaluateTargetByName( IN GUID *AuthGroup,
IN AFSObjectInfoCB *ParentObjectInfo,
IN PUNICODE_STRING SourceName,
+ IN ULONG Flags,
OUT AFSDirEnumEntry **DirEnumEntry);
NTSTATUS
IN WCHAR *FileNameCounted,
IN DWORD FileNameLength,
IN BOOL CaseSensitive,
+ IN BOOL LastComponent,
IN BOOL bWow64,
IN BOOL bHoldFid,
IN BOOL bNoFollow,
size_t cbName;
BOOL bVol = FALSE;
wchar_t FileName[260];
+ afs_uint32 lookupFlags;
StringCchCopyNW(FileName, 260, FileNameCounted, FileNameLength / sizeof(WCHAR));
return;
}
- code = cm_Lookup(dscp, wszName, CM_FLAG_CHECKPATH | CM_FLAG_NOMOUNTCHASE,
- userp, &req, &scp);
+ lookupFlags = CM_FLAG_NOMOUNTCHASE;
+
+ if ( !LastComponent )
+ lookupFlags |= CM_FLAG_CHECKPATH;
+ code = cm_Lookup(dscp, wszName, lookupFlags, userp, &req, &scp);
if (!CaseSensitive &&
(code == CM_ERROR_NOSUCHPATH || code == CM_ERROR_NOSUCHFILE || code == CM_ERROR_BPLUS_NOMATCH)) {
- code = cm_Lookup(dscp, wszName,
- CM_FLAG_CHECKPATH | CM_FLAG_NOMOUNTCHASE | CM_FLAG_CASEFOLD,
- userp, &req, &scp);
+ lookupFlags |= CM_FLAG_CASEFOLD;
+ code = cm_Lookup(dscp, wszName, lookupFlags, userp, &req, &scp);
}
if ((code == CM_ERROR_NOSUCHPATH || code == CM_ERROR_NOSUCHFILE || code == CM_ERROR_BPLUS_NOMATCH) &&
RequestBuffer->Name,
RequestBuffer->NameLength,
RequestBuffer->RequestFlags & AFS_REQUEST_FLAG_CASE_SENSITIVE ? TRUE : FALSE,
+ RequestBuffer->RequestFlags & AFS_REQUEST_FLAG_LAST_COMPONENT ? TRUE : FALSE,
bWow64, bFast, bHoldFid,
RequestBuffer->ResultBufferLength,
&pResultCB);
IN WCHAR *Name,
IN DWORD NameLength,
IN BOOL CaseSensitive,
+ IN BOOL LastComponent,
IN BOOL bWow64,
IN BOOL bQueryStatus,
IN BOOL bHoldFid,