3694 DPRINT(
"RxFindOrCreateConnections(%p, %wZ, %x, %p, %p, %p, %p)\n",
3695 RxContext, CanonicalName, NetRootType, LocalNetRootName,
3696 FilePathName,
LockState, RxConnectionId);
3698 *FilePathName = *CanonicalName;
3699 LocalNetRootName->Length = 0;
3700 LocalNetRootName->MaximumLength = 0;
3701 LocalNetRootName->Buffer = CanonicalName->Buffer;
3704 if (FilePathName->Buffer[1] ==
';')
3710 for (
i = 2;
i < FilePathName->Length /
sizeof(
WCHAR); ++
i)
3724 FilePathName->Buffer = &FilePathName->Buffer[
i];
3726 LocalNetRootName->Length =
Length;
3727 LocalNetRootName->MaximumLength =
Length;
3728 FilePathName->Length -=
Length;
3730 DPRINT(
"CanonicalName: %wZ\n", CanonicalName);
3731 DPRINT(
" -> FilePathName: %wZ\n", FilePathName);
3732 DPRINT(
" -> LocalNetRootName: %wZ\n", LocalNetRootName);
3736 PrefixTable = RxContext->RxDeviceObject->pRxNetNameTable;
3744 if (Container !=
NULL)
3769 DPRINT(
"Container %p for path %wZ\n", Container, FilePathName);
3780 RxContext->Create.pVNetRoot =
NULL;
3781 RxContext->Create.pNetRoot =
NULL;
3782 RxContext->Create.pSrvCall =
NULL;
3783 RxContext->Create.Type = NetRootType;
3786 if (Container !=
NULL)
3791 VNetRoot = Container;
3799 DPRINT(
"Waiting for stable condition for: %p\n", NetRoot);
3818 SrvCall->RxDeviceObject == RxContext->RxDeviceObject)
3836 Status = VNetRoot->ConstructionStatus;
3846 SrvCall = Container;
3852 DPRINT(
"Waiting for stable condition for: %p\n", SrvCall);
3874 Status = SrvCall->Status;
3885 SrvCall->RxDeviceObject != RxContext->RxDeviceObject)
3910 if (Container !=
NULL)
3917 DPRINT(
" -> SrvCallName: %wZ\n", &SrvCallName);
3920 if (SrvCall ==
NULL)
3928 RxContext->Create.pVNetRoot =
NULL;
3929 RxContext->Create.pNetRoot =
NULL;
3930 RxContext->Create.pSrvCall =
NULL;
3931 RxContext->Create.Type = NetRootType;
3932 Container = SrvCall;
3952 ASSERT(SrvCall->RxDeviceObject == RxContext->RxDeviceObject);
3955 SrvCall->RxDeviceObject->Dispatch->MRxExtractNetRootName(FilePathName, (
PMRX_SRV_CALL)SrvCall, &NetRootName,
NULL);
3958 if (NetRoot ==
NULL)
3963 NetRoot->Type = NetRootType;
3968 VNetRoot =
RxCreateVNetRoot(RxContext, NetRoot, CanonicalName, LocalNetRootName, FilePathName, RxConnectionId);
3969 if (VNetRoot ==
NULL)
3988 DPRINT1(
"RxConstructNetRoot failed Ctxt: %p, VNet: %p, Status: %lx, Condition: %d\n", RxContext, VNetRoot,
Status, VNetRoot->
Condition);
3991 RxContext->Create.pNetRoot =
NULL;
3992 RxContext->Create.pVNetRoot =
NULL;
4000 Stack = RxContext->CurrentIrpSp;
4021 DPRINT(
"RxFindOrCreateConnections() = Status: %x\n",
Status);
struct _SRV_CALL * PSRV_CALL
#define STATUS_INSUFFICIENT_RESOURCES
_In_ ULONG _In_ ULONG _In_ ULONG Length
RX_BLOCK_CONDITION Condition
struct _MRX_NET_ROOT_ * PMRX_NET_ROOT
#define BooleanFlagOn(F, SF)
#define RxReferenceSrvCall(SrvCall)
#define RxReleasePrefixTableLock(T)
struct _MRX_V_NET_ROOT_ * PMRX_V_NET_ROOT
#define RxWaitForStableNetRoot(N, R)
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
#define OBJ_NAME_PATH_SEPARATOR
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment IN PNDIS_RW_LOCK Lock IN PNDIS_RW_LOCK IN PLOCK_STATE LockState
#define RxReferenceVNetRoot(VNetRoot)
PVOID RxPrefixTableLookupName(IN PRX_PREFIX_TABLE ThisTable, IN PUNICODE_STRING CanonicalName, OUT PUNICODE_STRING RemainingName, IN PRX_CONNECTION_ID ConnectionId)
#define RxIsPrefixTableLockAcquired(T)
NTSTATUS RxConstructNetRoot(IN PRX_CONTEXT RxContext, IN PSRV_CALL SrvCall, IN PNET_ROOT NetRoot, IN PV_NET_ROOT VirtualNetRoot, OUT PLOCK_HOLDING_STATE LockHoldingState)
#define RxDereferenceVNetRoot(VNetRoot, LockHoldingState)
#define STATUS_BAD_NETWORK_NAME
#define NT_SUCCESS(StatCode)
#define RDBSS_NTC_V_NETROOT
#define STATUS_UNSUCCESSFUL
VOID RxExtractServerName(IN PUNICODE_STRING FilePathName, OUT PUNICODE_STRING SrvCallName, OUT PUNICODE_STRING RestOfName)
#define RxDereferenceNetRoot(NetRoot, LockHoldingState)
RX_BLOCK_CONDITION Condition
PSRV_CALL RxCreateSrvCall(IN PRX_CONTEXT RxContext, IN PUNICODE_STRING Name, IN PUNICODE_STRING InnerNamePrefix OPTIONAL, IN PRX_CONNECTION_ID RxConnectionId)
RX_BLOCK_CONDITION Condition
#define RDBSS_NTC_SRVCALL
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define RDBSS_NTC_NETROOT
PV_NET_ROOT RxCreateVNetRoot(IN PRX_CONTEXT RxContext, IN PNET_ROOT NetRoot, IN PUNICODE_STRING CanonicalName, IN PUNICODE_STRING LocalNetRootName, IN PUNICODE_STRING FilePath, IN PRX_CONNECTION_ID RxConnectionId)
#define STATUS_OBJECT_NAME_INVALID
#define RxAcquirePrefixTableLockExclusive(T, W)
#define STATUS_CONNECTION_ACTIVE
NTSTATUS RxConstructSrvCall(IN PRX_CONTEXT RxContext, IN PSRV_CALL SrvCall, OUT PLOCK_HOLDING_STATE LockHoldingState)
VOID RxExclusivePrefixTableLockToShared(PRX_PREFIX_TABLE Table)
#define RxTransitionVNetRoot(V, C)
struct _MRX_SRV_CALL_ * PMRX_SRV_CALL
BOOLEAN RxFinalizeNetRoot(OUT PNET_ROOT ThisNetRoot, IN BOOLEAN RecursiveFinalize, IN BOOLEAN ForceFinalize)
#define FILE_CREATE_TREE_CONNECTION
#define RxWaitForStableSrvCall(S, R)
#define RxDereferenceSrvCall(SrvCall, LockHoldingState)
PNET_ROOT RxCreateNetRoot(IN PSRV_CALL SrvCall, IN PUNICODE_STRING Name, IN ULONG NetRootFlags, IN PRX_CONNECTION_ID OPTIONAL RxConnectionId)
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName