📄 smbcedb.h
字号:
}
INLINE VOID
SmbCepReferenceNetRootEntry(
PSMBCEDB_NET_ROOT_ENTRY pNetRootEntry,
PVOID FileName,
ULONG FileLine)
{
ASSERT(pNetRootEntry->Header.ObjectType == SMBCEDB_OT_NETROOT);
InterlockedIncrement(&(pNetRootEntry->Header.SwizzleCount));
MRXSMB_PRINT_REF_COUNT(NETROOT_ENTRY,pNetRootEntry->Header.SwizzleCount);
SmbReferenceRecord(&pNetRootEntry->ReferenceRecord[0],FileName,FileLine);
}
INLINE VOID
SmbCepReferenceVNetRootContext(
PSMBCE_V_NET_ROOT_CONTEXT pVNetRootContext)
{
ASSERT(pVNetRootContext->Header.ObjectType == SMBCEDB_OT_VNETROOTCONTEXT);
InterlockedIncrement(&(pVNetRootContext->Header.SwizzleCount));
MRXSMB_PRINT_REF_COUNT(VNETROOT_CONTEXT,pVNetRootContext->Header.SwizzleCount)
}
INLINE PSMBCEDB_SERVER_ENTRY
SmbCeReferenceAssociatedServerEntry(
PMRX_SRV_CALL pSrvCall)
{
PSMBCEDB_SERVER_ENTRY pServerEntry;
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_SERVER_ENTRY)) {
DbgPrint("Reference SrvCall's(%lx) Server Entry %lx %s %ld ",
pSrvCall,pSrvCall->Context,__FILE__,__LINE__); \
}
if ((pServerEntry = pSrvCall->Context) != NULL) {
ASSERT(pServerEntry->Header.SwizzleCount > 0);
SmbCepReferenceServerEntry(pServerEntry);
}
return pServerEntry;
}
INLINE PSMBCEDB_NET_ROOT_ENTRY
SmbCeReferenceAssociatedNetRootEntry(
PMRX_NET_ROOT pNetRoot)
{
PSMBCEDB_NET_ROOT_ENTRY pNetRootEntry;
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_NETROOT_ENTRY)) {
DbgPrint("Reference NetRoot's(%lx) Net Root Entry %lx %s %ld ",
pNetRoot,pNetRoot->Context,__FILE__,__LINE__); \
}
if ((pNetRootEntry = pNetRoot->Context) != NULL) {
ASSERT(pNetRootEntry->Header.SwizzleCount > 0);
SmbCepReferenceNetRootEntry(pNetRootEntry,__FILE__,__LINE__);
}
return pNetRootEntry;
}
extern VOID
SmbCepDereferenceServerEntry(
PSMBCEDB_SERVER_ENTRY pServerEntry);
extern VOID
SmbCepDereferenceSessionEntry(
PSMBCEDB_SESSION_ENTRY pSessionEntry);
extern VOID
SmbCepDereferenceNetRootEntry(
PSMBCEDB_NET_ROOT_ENTRY pNetRootEntry,
PVOID FileName,
ULONG FileLine);
extern VOID
SmbCepDereferenceVNetRootContext(
PSMBCE_V_NET_ROOT_CONTEXT pVNetRootContext);
#define SmbCeReferenceServerEntry(pServerEntry) \
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_SERVER_ENTRY)) { \
DbgPrint("Reference Server Entry(%lx) %s %ld ",pServerEntry,__FILE__,__LINE__); \
} \
SmbCepReferenceServerEntry(pServerEntry)
#define SmbCeReferenceNetRootEntry(pNetRootEntry) \
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_NETROOT_ENTRY)) { \
DbgPrint("Reference NetRoot Entry(%lx) %s %ld ",pNetRootEntry,__FILE__,__LINE__); \
} \
SmbCepReferenceNetRootEntry(pNetRootEntry,__FILE__,__LINE__)
#define SmbCeReferenceVNetRootContext(pVNetRootContext) \
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_VNETROOT_CONTEXT)) { \
DbgPrint("Reference VNetRootContext(%lx) %s %ld ",pVNetRootContext,__FILE__,__LINE__); \
} \
SmbCepReferenceVNetRootContext(pVNetRootContext)
#define SmbCeReferenceSessionEntry(pSessionEntry) \
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_SESSION_ENTRY)) { \
DbgPrint("Reference Session Entry(%lx) %s %ld ",pSessionEntry,__FILE__,__LINE__); \
} \
SmbCepReferenceSessionEntry(pSessionEntry)
#define SmbCeDereferenceServerEntry(pServerEntry) \
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_SERVER_ENTRY)) { \
DbgPrint("Dereference Server Entry(%lx) %s %ld ",pServerEntry,__FILE__,__LINE__); \
} \
SmbCepDereferenceServerEntry(pServerEntry)
#define SmbCeDereferenceNetRootEntry(pNetRootEntry) \
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_NETROOT_ENTRY)) { \
DbgPrint("Dereference NetRoot Entry(%lx) %s %ld ",pNetRootEntry,__FILE__,__LINE__); \
} \
SmbCepDereferenceNetRootEntry(pNetRootEntry,__FILE__,__LINE__)
#define SmbCeDereferenceSessionEntry(pSessionEntry) \
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_SESSION_ENTRY)) { \
DbgPrint("Dereference Session Entry(%lx) %s %ld ",pSessionEntry,__FILE__,__LINE__); \
} \
SmbCepDereferenceSessionEntry(pSessionEntry)
#define SmbCeDereferenceVNetRootContext(pVNetRootContext) \
if (MRXSMB_REF_TRACING_ON(MRXSMB_REF_TRACE_VNETROOT_CONTEXT)) { \
DbgPrint("Dereference VNetRootContext Entry(%lx) %s %ld ",pVNetRootContext,__FILE__,__LINE__); \
} \
SmbCepDereferenceVNetRootContext(pVNetRootContext)
INLINE VOID
SmbCeDereferenceEntries(
PSMBCEDB_SERVER_ENTRY pServerEntry,
PSMBCEDB_SESSION_ENTRY pSessionEntry,
PSMBCEDB_NET_ROOT_ENTRY pNetRootEntry)
{
SmbCeDereferenceNetRootEntry(pNetRootEntry);
SmbCeDereferenceSessionEntry(pSessionEntry);
SmbCeDereferenceServerEntry(pServerEntry);
}
//
// Routines for updating the state of SMB MRX data structures
//
#define SmbCeUpdateServerEntryState(pServerEntry,NEWSTATE) \
InterlockedExchange(&pServerEntry->Header.State,(NEWSTATE))
#define SmbCeUpdateSessionEntryState(pSessionEntry,NEWSTATE) \
InterlockedExchange(&pSessionEntry->Header.State,(NEWSTATE))
#define SmbCeUpdateNetRootEntryState(pNetRootEntry,NEWSTATE) \
InterlockedExchange(&pNetRootEntry->Header.State,(NEWSTATE))
#define SmbCeUpdateVNetRootContextState(pVNetRootContext,NEWSTATE) \
InterlockedExchange(&pVNetRootContext->Header.State,(NEWSTATE))
//
// The RDBSS wrapper stores all the server names with a backslash prepended to
// them. This helps synthesize UNC names easily. In order to manipulate the
// Server name in the SMB protocol the \ needs to be stripped off.
INLINE VOID
SmbCeGetServerName(
PMRX_SRV_CALL pSrvCall,
PUNICODE_STRING pServerName)
{
ASSERT(pSrvCall->pSrvCallName != NULL);
pServerName->Buffer = pSrvCall->pSrvCallName->Buffer + 1;
pServerName->Length = pSrvCall->pSrvCallName->Length - sizeof(WCHAR);
pServerName->MaximumLength = pSrvCall->pSrvCallName->MaximumLength - sizeof(WCHAR);
}
INLINE VOID
SmbCeGetNetRootName(
PMRX_NET_ROOT pNetRoot,
PUNICODE_STRING pNetRootName)
{
ASSERT(pNetRoot->pNetRootName != NULL);
*pNetRootName = *pNetRoot->pNetRootName;
}
extern NTSTATUS
SmbCeDestroyAssociatedVNetRootContext(
PMRX_V_NET_ROOT pVNetRoot);
extern VOID
SmbCeTearDownVNetRootContext(
PSMBCE_V_NET_ROOT_CONTEXT pVNetRootContext);
extern NTSTATUS
SmbCeGetUserNameAndDomainName(
PSMBCEDB_SESSION_ENTRY pSessionEntry,
PUNICODE_STRING pUserName,
PUNICODE_STRING pUserDomainName);
extern NTSTATUS
SmbCeUpdateSrvCall(
IN PSMBCEDB_SERVER_ENTRY pServerEntry);
extern NTSTATUS
SmbCeUpdateNetRoot(
PSMBCEDB_NET_ROOT_ENTRY pNetRootEntry,
PMRX_NET_ROOT pNetRoot);
extern NTSTATUS
SmbCeScavengeRelatedContexts(
IN PSMBCEDB_SERVER_ENTRY pServerEntry);
extern VOID
SmbCeResumeOutstandingRequests(
IN OUT PSMBCEDB_REQUESTS pRequests,
IN NTSTATUS Status);
// given \\server\share, this routine returns a refcounted serverentry
NTSTATUS
FindServerEntryFromCompleteUNCPath(
USHORT *lpuServerShareName,
PSMBCEDB_SERVER_ENTRY *ppServerEntry);
// given \\server\share, this routine returns a refcounted netroot entry
NTSTATUS
FindNetRootEntryFromCompleteUNCPath(
USHORT *lpuServerShareName,
PSMBCEDB_NET_ROOT_ENTRY *ppNetRootEntry);
#endif // _SMBCEDB_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -