ReactOS  0.4.15-dev-1068-g467feb9
prefxsup.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Named Pipe FileSystem
3  * LICENSE: BSD - See COPYING.ARM in the top level directory
4  * FILE: drivers/filesystems/npfs/prefxsup.c
5  * PURPOSE: Pipes Prefixes Support
6  * PROGRAMMERS: ReactOS Portable Systems Group
7  */
8 
9 /* INCLUDES *******************************************************************/
10 
11 #include "npfs.h"
12 
13 // File ID number for NPFS bugchecking support
14 #define NPFS_BUGCHECK_FILE_ID (NPFS_BUGCHECK_PREFXSUP)
15 
16 /* FUNCTIONS ******************************************************************/
17 
18 PNP_FCB
19 NTAPI
23 {
25  PNP_FCB Fcb;
26  PAGED_CODE();
27 
29  Name,
31  if (!Entry) NpBugCheck(0, 0, 0);
32 
34 
35  Prefix->Length = Name->Length - Fcb->FullName.Length;
37  Prefix->Buffer = &Name->Buffer[Fcb->FullName.Length / sizeof(WCHAR)];
38 
40  {
41  Prefix->Length -= sizeof(WCHAR);
42  Prefix->MaximumLength -= sizeof(WCHAR);
43  ++Prefix->Buffer;
44  }
45 
46  return Fcb;
47 }
48 
50 NTAPI
55  OUT PNP_FCB *FoundFcb)
56 {
57  PWCHAR Buffer;
58  PNP_FCB Fcb;
59  UNICODE_STRING RootName;
61  PAGED_CODE();
62 
63  Length = Name->Length;
66 
67  ASSERT(Dcb->NodeType == NPFS_NTC_ROOT_DCB);
68 
70  if (!Buffer)
71  {
73  }
74 
76  RtlCopyMemory(Buffer + 1, Name->Buffer, Length);
77  Buffer[(Length / sizeof(WCHAR)) + 1] = UNICODE_NULL;
78 
79  RootName.Length = Length + sizeof(OBJ_NAME_PATH_SEPARATOR);
80  RootName.MaximumLength = MaximumLength;
81  RootName.Buffer = Buffer;
82 
84 
86 
87  Prefix->Buffer = &Name->Buffer[(Length - Prefix->Length) / sizeof(WCHAR)];
88  *FoundFcb = Fcb;
89 
90  return STATUS_SUCCESS;
91 }
92 
93 /* EOF */
#define IN
Definition: typedefs.h:39
_In_ __drv_aliasesMem PSTRING Prefix
Definition: rtlfuncs.h:1631
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
struct _Entry Entry
Definition: kefuncs.h:627
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_In_ __drv_aliasesMem PSTRING _Out_ PPREFIX_TABLE_ENTRY PrefixTableEntry
Definition: rtlfuncs.h:1631
LONG NTSTATUS
Definition: precomp.h:26
#define NPFS_NAME_BLOCK_TAG
Definition: npfs.h:59
unsigned short Length
Definition: sprintf.c:451
uint16_t * PWCHAR
Definition: typedefs.h:56
NTSTATUS NTAPI NpFindRelativePrefix(IN PNP_DCB Dcb, IN PUNICODE_STRING Name, IN ULONG CaseInsensitiveIndex, IN PUNICODE_STRING Prefix, OUT PNP_FCB *FoundFcb)
Definition: prefxsup.c:51
Definition: npfs.h:210
Definition: npfs.h:228
void * Buffer
Definition: sprintf.c:453
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
#define UNICODE_NULL
#define OBJ_NAME_PATH_SEPARATOR
Definition: arcname_tests.c:25
Definition: rtltypes.h:621
Definition: bufpool.h:45
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
#define NpBugCheck(p1, p2, p3)
Definition: npfs.h:106
__wchar_t WCHAR
Definition: xmlstorage.h:180
PUNICODE_PREFIX_TABLE_ENTRY NTAPI RtlFindUnicodePrefix(PUNICODE_PREFIX_TABLE PrefixTable, PUNICODE_STRING FullName, ULONG CaseInsensitiveIndex)
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
PNP_VCB NpVcb
Definition: strucsup.c:19
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
#define NPFS_NTC_ROOT_DCB
Definition: npfs.h:113
UnicodeString MaximumLength
Definition: rtlfuncs.h:2982
UNICODE_PREFIX_TABLE PrefixTable
Definition: npfs.h:282
unsigned short USHORT
Definition: pedump.c:61
PNP_FCB NTAPI NpFindPrefix(IN PUNICODE_STRING Name, IN ULONG CaseInsensitiveIndex, IN PUNICODE_STRING Prefix)
Definition: prefxsup.c:20
#define OUT
Definition: typedefs.h:40
unsigned int ULONG
Definition: retypes.h:1
_In_ PFCB Fcb
Definition: cdprocs.h:159
IN BOOLEAN OUT PSTR Buffer
Definition: progress.h:34
return STATUS_SUCCESS
Definition: btrfs.c:3014
unsigned short MaximumLength
Definition: sprintf.c:452
_In_ PUNICODE_STRING _In_ ULONG CaseInsensitiveIndex
Definition: rtlfuncs.h:1682
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB * Dcb
Definition: create.c:4137
base of all file and directory entries
Definition: entries.h:82
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
#define PAGED_CODE()