/*++ Copyright (c) 1989-1993 Microsoft Corporation Module Name: Nbtprocs.h Abstract: This file contains the OS independent function prototypes. Author: Jim Stewart (Jimst) 10-2-92 Revision History: Johnl 05-Apr-1993 Hacked on to support VXD --*/ #ifndef _NBTPROCS_H_ #define _NBTPROCS_H_ #include "types.h" #ifndef VXD #include #else #include #endif //--------------------------------------------------------------------- // FROM NAMESRV.C // tNAMEADDR * FindName( enum eNbtLocation Location, PCHAR pName, PCHAR pScope, USHORT *pRetNameType ); NTSTATUS NbtRegisterName( IN enum eNbtLocation Location, IN ULONG IpAddress, IN PCHAR pName, IN PCHAR pScope, IN PVOID pClientContext, IN PVOID pClientCompletion, IN USHORT uAddressType, IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS ReleaseNameOnNet( tNAMEADDR *pNameAddr, PCHAR pScope, PVOID pClientContext, PVOID pClientCompletion, ULONG NodeType, tDEVICECONTEXT *pDeviceContext ); VOID NameReleaseDone( PVOID pContext, NTSTATUS status ); VOID NameReleaseDoneOnDynIf( PVOID pContext, NTSTATUS status ); NTSTATUS RegOrQueryFromNet( IN BOOL fReg, IN tDEVICECONTEXT *pDeviceContext, IN tNAMEHDR UNALIGNED *pNameHdr, IN LONG lNumBytes, IN PCHAR pName, IN PUCHAR pScope ); NTSTATUS QueryNameOnNet( IN PCHAR pName, IN PCHAR pScope, IN ULONG IpAddress, IN USHORT uType, IN PVOID pClientContext, IN PVOID pClientCompletion, IN ULONG NodeType, IN tNAMEADDR *pNameAddrIn, IN tDEVICECONTEXT *pDeviceContext, OUT tDGRAM_SEND_TRACKING **ppTracker, IN CTELockHandle *pJointLockOldIrq ); VOID CompleteClientReq( COMPLETIONCLIENT pClientCompletion, tDGRAM_SEND_TRACKING *pTracker, NTSTATUS status ); VOID DereferenceTracker( IN tDGRAM_SEND_TRACKING *pTracker ); VOID DereferenceTrackerNoLock( IN tDGRAM_SEND_TRACKING *pTracker ); VOID NodeStatusCompletion( PVOID pContext, PVOID pContext2, tTIMERQENTRY *pTimerQEntry ); VOID RefreshTimeout( PVOID pContext, PVOID pContext2, tTIMERQENTRY *pTimerQEntry ); VOID RemoteHashTimeout( PVOID pContext, PVOID pContext2, tTIMERQENTRY *pTimerQEntry ); VOID SessionKeepAliveTimeout( PVOID pContext, PVOID pContext2, tTIMERQENTRY *pTimerQEntry ); VOID IncrementNameStats( IN ULONG StatType, IN BOOLEAN IsNameServer ); VOID SaveBcastNameResolved( IN PUCHAR pName ); //--------------------------------------------------------------------- // FROM NAME.C VOID FreeRcvBuffers( tCONNECTELE *pConnEle, CTELockHandle *pOldIrq ); VOID LockedDereferenceName( IN tNAMEADDR *pNameAddr ); NTSTATUS NbtRegisterCompletion( IN tCLIENTELE *pClientEle, IN NTSTATUS Status); NTSTATUS NbtOpenAddress( IN TDI_REQUEST *pRequest, IN TA_ADDRESS UNALIGNED *pTaAddress, IN ULONG IpAddress, IN PVOID pSecurityDescriptor, IN tDEVICECONTEXT *pContext, IN PVOID pIrp); NTSTATUS NbtOpenConnection( IN TDI_REQUEST *pRequest, IN CONNECTION_CONTEXT pConnectionContext, IN tDEVICECONTEXT *pContext); NTSTATUS NbtOpenAndAssocConnection( IN tLOWERCONNECTION *pLowerConn, IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS NbtAssociateAddress( IN TDI_REQUEST *pRequest, IN tCLIENTELE *pClientEle, IN PVOID pIrp); NTSTATUS NbtDisassociateAddress( IN TDI_REQUEST *pRequest ); NTSTATUS NbtCloseAddress( IN TDI_REQUEST *pRequest, OUT TDI_REQUEST_STATUS *pRequestStatus, IN tDEVICECONTEXT *pContext, IN PVOID pIrp); NTSTATUS NbtCleanUpAddress( IN tCLIENTELE *pClientEle, IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS NbtCloseConnection( IN TDI_REQUEST *pRequest, OUT TDI_REQUEST_STATUS *pRequestStatus, IN tDEVICECONTEXT *pContext, IN PVOID pIrp); NTSTATUS NbtCleanUpConnection( IN tCONNECTELE *pConnEle, IN tDEVICECONTEXT *pDeviceContext ); VOID RelistConnection( IN tCONNECTELE *pConnEle ); NTSTATUS CleanupConnectingState( IN tCONNECTELE *pConnEle, IN tDEVICECONTEXT *pDeviceContext, IN CTELockHandle *OldIrq, IN CTELockHandle *OldIrq2 ); VOID ReConnect( IN PVOID Context ); NTSTATUS NbtConnect( IN TDI_REQUEST *pRequest, IN PVOID pTimeout, IN PTDI_CONNECTION_INFORMATION pCallInfo, IN PTDI_CONNECTION_INFORMATION pReturnInfo, IN PIRP pIrp ); VOID SessionSetupContinue( IN PVOID pContext, IN NTSTATUS status ); VOID SessionTimedOut( PVOID pContext, PVOID pContext2, tTIMERQENTRY *pTimerQEntry ); VOID QueueCleanup( IN tCONNECTELE *pConnEle ); NTSTATUS NbtDisconnect( IN TDI_REQUEST *pRequest, IN PVOID pTimeout, IN ULONG Flags, IN PTDI_CONNECTION_INFORMATION pCallInfo, IN PTDI_CONNECTION_INFORMATION pReturnInfo, IN PIRP pIrp); NTSTATUS NbtSend( IN TDI_REQUEST *pRequest, IN USHORT Flags, IN ULONG SendLength, OUT LONG *pSentLength, IN PVOID *pBuffer, IN tDEVICECONTEXT *pContext, IN PIRP pIrp ); NTSTATUS NbtSendDatagram( IN TDI_REQUEST *pRequest, IN PTDI_CONNECTION_INFORMATION pSendInfo, IN LONG SendLength, IN LONG *pSentLength, IN PVOID pBuffer, IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp ); NTSTATUS SendDgram( IN tNAMEADDR *pNameAddr, IN tDGRAM_SEND_TRACKING *pTracker ); NTSTATUS BuildSendDgramHdr( IN ULONG SendLength, IN tDEVICECONTEXT *pDeviceContext, IN PCHAR pSourceName, IN PCHAR pDestinationName, IN PVOID pBuffer, OUT tDGRAMHDR **ppDgramHdr, OUT tDGRAM_SEND_TRACKING **ppTracker ); VOID NodeStatusDone( IN PVOID pContext, IN NTSTATUS status ); NTSTATUS NbtSendNodeStatus( IN tDEVICECONTEXT *pDeviceContext, IN PCHAR pName, IN PIRP pIrp, IN PULONG pIpAddrsList, IN PVOID ClientContext, IN PVOID CompletionRoutine ); NTSTATUS NbtQueryFindName( IN PTDI_CONNECTION_INFORMATION pInfo, IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp, IN BOOLEAN IsIoctl ); NTSTATUS CopyFindNameData( IN tNAMEADDR *pNameAddr, IN PIRP pIrp, IN ULONG SrcAddress); NTSTATUS NbtListen( IN TDI_REQUEST *pRequest, IN ULONG Flags, IN TDI_CONNECTION_INFORMATION *pRequestConnectInfo, OUT TDI_CONNECTION_INFORMATION *pReturnConnectInfo, IN PVOID pIrp); NTSTATUS NbtAccept( IN TDI_REQUEST *pRequest, IN TDI_CONNECTION_INFORMATION *pAcceptInfo, OUT TDI_CONNECTION_INFORMATION *pReturnAcceptInfo, IN PIRP pIrp); NTSTATUS NbtReceiveDatagram( IN TDI_REQUEST *pRequest, IN PTDI_CONNECTION_INFORMATION pReceiveInfo, IN PTDI_CONNECTION_INFORMATION pReturnedInfo, IN LONG ReceiveLength, IN LONG *pReceivedLength, IN PVOID pBuffer, IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp ); NTSTATUS NbtSetEventHandler( tCLIENTELE *pClientEle, int EventType, PVOID pEventHandler, PVOID pEventContext ); NTSTATUS NbtQueryAdapterStatus( IN tDEVICECONTEXT *pDeviceContext, OUT PVOID *ppAdapterStatus, OUT PLONG pSize ); NTSTATUS NbtQueryConnectionList( IN tDEVICECONTEXT *pDeviceContext, OUT PVOID *ppConnList, IN OUT PLONG pSize ); NTSTATUS NbtResyncRemoteCache( ); NTSTATUS NbtQueryBcastVsWins( IN tDEVICECONTEXT *pDeviceContext, OUT PVOID *ppBuffer, IN OUT PLONG pSize ); NTSTATUS NbtNewDhcpAddress( tDEVICECONTEXT *pDeviceContext, ULONG IpAddress, ULONG SubnetMask); VOID FreeTracker( IN tDGRAM_SEND_TRACKING *pTracker, IN ULONG Actions ); NTSTATUS DatagramDistribution( IN tDGRAM_SEND_TRACKING *pTracker, IN tNAMEADDR *pNameAddr ); VOID DereferenceIfNotInRcvHandler( IN tCONNECTELE *pConnEle, IN tLOWERCONNECTION *pLowerConn ); VOID DeleteAddressElement( IN tADDRESSELE *pAddress ); VOID DeleteClientElement( IN tCLIENTELE *pClientEle ); VOID NbtDereferenceLowerConnection( IN tLOWERCONNECTION *pLowerConn ); VOID ReleaseNameCompletion( IN PVOID pContext, IN NTSTATUS status, IN ULONG lInfo); NTSTATUS DisconnectLower( IN tLOWERCONNECTION *pLowerConn, IN ULONG state, IN ULONG Flags, IN PVOID Timeout, IN BOOLEAN Wait ); NTSTATUS NbtDereferenceConnection( IN tCONNECTELE *pConnEle ); VOID NbtDereferenceName( IN tNAMEADDR *pNameAddr ); NTSTATUS NbtDeleteLowerConn( IN tLOWERCONNECTION *pLowerConn ); USHORT GetTransactId( ); USHORT GetTransactIdLocked( ); //--------------------------------------------------------------------- // // FROM TDICNCT.C // NTSTATUS NbtTdiOpenConnection ( IN tLOWERCONNECTION *pLowerConn, IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS NbtTdiAssociateConnection( IN PFILE_OBJECT pFileObject, IN HANDLE Handle ); NTSTATUS TdiOpenandAssocConnection( IN tCONNECTELE *pConnEle, IN tDEVICECONTEXT *pDeviceContext, IN ULONG PortNumber ); NTSTATUS NbtTdiCloseConnection( IN tLOWERCONNECTION *pLowerConn ); NTSTATUS NbtTdiCloseAddress( IN tLOWERCONNECTION *pLowerConn ); //--------------------------------------------------------------------- // // FROM TDIADDR.C // NTSTATUS NbtTdiOpenAddress ( OUT PHANDLE pFileHandle, OUT PDEVICE_OBJECT *pDeviceObject, OUT PFILE_OBJECT *pFileObject, IN tDEVICECONTEXT *pDeviceContext, IN USHORT PortNumber, IN ULONG IpAddress, IN ULONG Flags ); NTSTATUS CompletionRoutine( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); NTSTATUS NbtTdiOpenControl ( IN tDEVICECONTEXT *pDeviceContext ); //--------------------------------------------------------------------- // // FROM NBTUTILS.C // void FreeList( PLIST_ENTRY pHead, PLIST_ENTRY pFreeQ); void NbtFreeAddressObj( tADDRESSELE *pBlk); void NbtFreeClientObj( tCLIENTELE *pBlk); void FreeConnectionObj( tCONNECTELE *pBlk); tCLIENTELE * NbtAllocateClientBlock(tADDRESSELE *pAddrEle); NTSTATUS NbtAddPermanentName( IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS NbtAddPermanentNameNotFound( IN tDEVICECONTEXT *pDeviceContext ); VOID NbtRemovePermanentName( IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS ConvertDottedDecimalToUlong( IN PUCHAR pInString, OUT PULONG IpAddress); NTSTATUS NbtInitQ( PLIST_ENTRY pListHead, LONG iSizeBuffer, LONG iNumBuffers); NTSTATUS NbtInitTrackerQ( PLIST_ENTRY pListHead, LONG iNumBuffers ); tDGRAM_SEND_TRACKING * NbtAllocTracker( IN VOID ); NTSTATUS NbtGetBuffer( PLIST_ENTRY pListHead, PLIST_ENTRY *ppListEntry, enum eBUFFER_TYPES eBuffType); NTSTATUS GetNetBiosNameFromTransportAddress( IN PTA_NETBIOS_ADDRESS pTransAddr, OUT PCHAR *pName, OUT PULONG pNameLen, OUT PULONG pNameType ); NTSTATUS ConvertToAscii( IN PCHAR pNameHdr, IN LONG NumBytes, OUT PCHAR pName, OUT PCHAR *pScope, OUT PULONG pNameSize ); PCHAR ConvertToHalfAscii( OUT PCHAR pDest, IN PCHAR pName, IN PCHAR pScope, IN ULONG ScopeSize ); ULONG Nbt_inet_addr( IN PCHAR pName ); NTSTATUS BuildQueryResponse( IN USHORT sNameSize, IN tNAMEHDR *pNameHdr, IN ULONG uTtl, IN ULONG IpAddress, OUT ULONG uNumBytes, OUT PVOID pResponse, IN PVOID pName, IN USHORT NameType, IN USHORT RetCode ); NTSTATUS GetTracker( OUT tDGRAM_SEND_TRACKING **ppTracker); NTSTATUS GetIrp( OUT PIRP *ppIrp); NTSTATUS NbtDereferenceAddress( IN tADDRESSELE *pAddressEle ); NTSTATUS NbtDereferenceClient( IN tCLIENTELE *pClientEle ); ULONG CountLocalNames(IN tNBTCONFIG *pNbtConfig ); ULONG CountUpperConnections( IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS DisableInboundConnections( IN tDEVICECONTEXT *pDeviceContext, OUT PLIST_ENTRY pLowerConnFreeHead ); ULONG CloseLowerConnections( IN PLIST_ENTRY pLowerConnFreeHead ); VOID MarkForCloseLowerConnections( IN tDEVICECONTEXT *pDeviceContext, IN CTELockHandle OldIrqJoint, IN CTELockHandle OldIrqDevice ); NTSTATUS NbtInitConnQ( PLIST_ENTRY pListHead, int iSizeBuffer, int iNumConnections, tDEVICECONTEXT *pDeviceContext); NTSTATUS ReRegisterLocalNames( ); NTSTATUS LockedStopTimer( tTIMERQENTRY **ppTimer); //--------------------------------------------------------------------- // // FROM hndlrs.c // NTSTATUS RcvHandlrNotOs ( IN PVOID ReceiveEventContext, IN PVOID ConnectionContext, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID UNALIGNED pTsdu, OUT PVOID *RcvBuffer ); NTSTATUS Inbound ( IN PVOID ReceiveEventContext, IN PVOID ConnectionContext, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID UNALIGNED pTsdu, OUT PVOID *RcvBuffer ); NTSTATUS Outbound ( IN PVOID ReceiveEventContext, IN PVOID ConnectionContext, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID UNALIGNED pTsdu, OUT PVOID *RcvBuffer ); NTSTATUS RejectAnyData( IN PVOID ReceiveEventContext, IN tLOWERCONNECTION *pLowerConn, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID UNALIGNED pTsdu, OUT PVOID *ppIrp ); VOID RejectSession( IN tLOWERCONNECTION *pLowerConn, IN ULONG StatusCode, IN ULONG SessionStatus, IN BOOLEAN SendNegativeSessionResponse ); VOID GetIrpIfNotCancelled( IN tCONNECTELE *pConnEle, OUT PIRP *ppIrp ); NTSTATUS FindSessionEndPoint( IN VOID UNALIGNED *pTsdu, IN PVOID ConnectionContext, IN ULONG BytesIndicated, OUT tCLIENTELE **ppClientEle, OUT PVOID *ppRemoteAddress, OUT PULONG pRemoteAddressLength ); VOID SessionRetry( IN PVOID pContext, IN PVOID pContext2, IN tTIMERQENTRY *pTimerQEntry ); tCONNECTELE * SearchConnectionList( IN tCLIENTELE *pClientEle, IN PVOID pClientContext ); NTSTATUS ConnectHndlrNotOs ( IN PVOID pConnectionContext, IN LONG RemoteAddressLength, IN PVOID pRemoteAddress, IN int UserDataLength, IN PVOID UNALIGNED pUserData, OUT CONNECTION_CONTEXT *ppConnectionId ); NTSTATUS DisconnectHndlrNotOs ( PVOID EventContext, PVOID ConnectionContext, ULONG DisconnectDataLength, PVOID UNALIGNED pDisconnectData, ULONG DisconnectInformationLength, PVOID pDisconnectInformation, ULONG DisconnectIndicators ); VOID CleanupAfterDisconnect( IN PVOID pContext ); NTSTATUS DgramHndlrNotOs( IN PVOID ReceiveEventContext, IN ULONG SourceAddrLength, IN PVOID pSourceAddr, IN ULONG OptionsLength, IN PVOID pOptions, IN ULONG ReceiveDatagramFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG pBytesTaken, IN PVOID UNALIGNED pTsdu, OUT PVOID *ppRcvBuffer, OUT tCLIENTLIST **ppAddressEle ); NTSTATUS NameSrvHndlrNotOs ( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameSrv, IN ULONG uNumBytes, IN BOOLEAN fBroadcast ); //--------------------------------------------------------------------- // // FROM proxy.c // NTSTATUS ReleaseResponseFromNet( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameHdr, IN LONG NumBytes ); NTSTATUS ProxyQueryFromNet( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameHdr, IN LONG lNumBytes, IN USHORT OpCodeFlags ); NTSTATUS ProxyDoDgramDist( IN tDGRAMHDR UNALIGNED *pDgram, IN DWORD DgramLen, IN tNAMEADDR *pNameAddr, IN tDEVICECONTEXT *pDeviceContext ); VOID ProxyTimerComplFn ( IN PVOID pContext, IN PVOID pContext2, IN tTIMERQENTRY *pTimerQEntry ); VOID ProxyRespond ( IN tQUERYRESP *pQuery, IN PUCHAR pName, IN tDEVICECONTEXT *pDeviceContext, IN tNAMEHDR *pNameHdr, IN ULONG lNameSize, IN ULONG SrcAddress, IN PTDI_ADDRESS_IP pAddressIp ); //--------------------------------------------------------------------- // // FROM hashtbl.c // NTSTATUS CreateHashTable( tHASHTABLE **pHashTable, LONG NumBuckets, enum eNbtLocation LocalRemote ); NTSTATUS InitRemoteHashTable( IN tNBTCONFIG *pConfig, IN LONG NumBuckets, IN LONG NumNames ); NTSTATUS AddNotFoundToHashTable( IN tHASHTABLE *pHashTable, IN PCHAR pName, IN PCHAR pScope, IN ULONG IpAddress, IN enum eNbtAddrType NameType, OUT tNAMEADDR **ppNameAddress ); NTSTATUS AddRecordToHashTable( IN tNAMEADDR *pNameAddr, IN PCHAR pScope ); NTSTATUS AddToHashTable( IN tHASHTABLE *pHashTable, IN PCHAR pName, IN PCHAR pScope, IN ULONG IpAddress, IN enum eNbtAddrType NameType, IN tNAMEADDR *pNameAddr, OUT tNAMEADDR **ppNameAddress ); NTSTATUS DeleteFromHashTable( tHASHTABLE *pHashTable, PCHAR pName ); NTSTATUS ChgStateOfScopedNameInHashTable( tHASHTABLE *pHashTable, PCHAR pName, PCHAR pScope, DWORD NewState ); NTSTATUS FindInHashTable( tHASHTABLE *pHashTable, PCHAR pName, PCHAR pScope, tNAMEADDR **pNameAddress ); NTSTATUS FindNoScopeInHashTable( tHASHTABLE *pHashTable, PCHAR pName, tNAMEADDR **pNameAddress ); NTSTATUS UpdateHashTable( tHASHTABLE *pHashTable, PCHAR pName, PCHAR pScope, ULONG IpAddress, BOOLEAN bGroup, tNAMEADDR **ppNameAddr ); //--------------------------------------------------------------------- // // FROM timer.c // NTSTATUS InitTimerQ( IN int NumInQ); NTSTATUS InitQ( IN int NumInQ, IN tTIMERQ *pTimerQ, IN USHORT uSize); VOID StopTimerAndCallCompletion( IN tTIMERQENTRY *pTimer, IN NTSTATUS status, IN CTELockHandle OldIrq ); NTSTATUS InterlockedCallCompletion( IN tTIMERQENTRY *pTimer, IN NTSTATUS status ); NTSTATUS GetEntry( IN PLIST_ENTRY pQHead, IN USHORT uSize, OUT PLIST_ENTRY *ppEntry); NTSTATUS LockedStartTimer( IN ULONG DeltaTime, IN tDGRAM_SEND_TRACKING *pTracker, IN PVOID CompletionRoutine, IN PVOID ContextClient, IN PVOID CompletionClient, IN USHORT Retries, IN tNAMEADDR *pNameAddr, IN BOOLEAN CrossLink ); NTSTATUS StartTimer( IN ULONG DeltaTime, IN PVOID Context, IN PVOID Context2, IN PVOID CompletionRoutine, IN PVOID ContextClient, IN PVOID CompletionClient, IN USHORT Retries, OUT tTIMERQENTRY **ppTimerEntry); NTSTATUS StopTimer( IN tTIMERQENTRY *pTimerEntry, OUT COMPLETIONCLIENT *pClient, OUT PVOID *ppContext); //--------------------------------------------------------------------- // // FROM udpsend.c // NTSTATUS UdpSendQueryNs( PCHAR pName, PCHAR pScope ); NTSTATUS UdpSendQueryBcast( IN PCHAR pName, IN PCHAR pScope, IN tDGRAM_SEND_TRACKING *pSentList ); NTSTATUS UdpSendRegistrationNs( PCHAR pName, PCHAR pScope ); NTSTATUS UdpSendNSBcast( IN tNAMEADDR *pNameAddr, IN PCHAR pScope, IN tDGRAM_SEND_TRACKING *pSentList, IN PVOID pCompletionRoutine, IN PVOID pClientContext, IN PVOID pClientCompletion, IN ULONG Retries, IN ULONG Timeout, IN enum eNSTYPE eNsType, IN BOOL SendFlag ); VOID NsDgramSendCompleted( PVOID pContext, NTSTATUS status, ULONG lInfo ); VOID NameDgramSendCompleted( PVOID pContext, NTSTATUS status, ULONG lInfo ); NTSTATUS UdpSendResponse( IN ULONG lNameSize, IN tNAMEHDR UNALIGNED *pNameHdrIn, IN tNAMEADDR *pNameAddr, IN PTDI_ADDRESS_IP pDestIpAddress, IN tDEVICECONTEXT *pDeviceContext, IN ULONG Rcode, IN enum eNSTYPE NsType, IN CTELockHandle OldIrq ); NTSTATUS UdpSendDatagram( IN tDGRAM_SEND_TRACKING *pDgramTracker, IN ULONG IpAddress, IN PFILE_OBJECT TransportFileObject, IN PVOID pCompletionRoutine, IN PVOID CompletionContext, IN USHORT Port, IN ULONG Service ); PVOID CreatePdu( IN PCHAR pName, IN PCHAR pScope, IN ULONG IpAddress, IN USHORT NameType, IN enum eNSTYPE eNsType, OUT PVOID *pHdrs, OUT PULONG pLength, IN tDGRAM_SEND_TRACKING *pTracker ); NTSTATUS TcpSessionStart( IN tDGRAM_SEND_TRACKING *pTracker, IN ULONG IpAddress, IN tDEVICECONTEXT *pDeviceContext, IN PVOID pCompletionRoutine, IN ULONG Port ); NTSTATUS TcpSendSessionResponse( IN tLOWERCONNECTION *pLowerConn, IN ULONG lStatusCode, IN ULONG lSessionStatus ); NTSTATUS TcpSendSession( IN tDGRAM_SEND_TRACKING *pTracker, IN tLOWERCONNECTION *LowerConn, IN PVOID pCompletionRoutine ); NTSTATUS SendTcpDisconnect( IN tLOWERCONNECTION *pLowerConnId ); NTSTATUS TcpDisconnect( IN tDGRAM_SEND_TRACKING *pTracker, IN PVOID Timeout, IN ULONG Flags, IN BOOLEAN Wait ); VOID FreeTrackerOnDisconnect( IN tDGRAM_SEND_TRACKING *pTracker ); VOID QueryRespDone( IN PVOID pContext, IN NTSTATUS status, IN ULONG lInfo); VOID DisconnectDone( IN PVOID pContext, IN NTSTATUS status, IN ULONG lInfo); //--------------------------------------------------------------------- // // FROM tdiout.c // NTSTATUS TdiSendDatagram( IN PTDI_REQUEST pRequestInfo, IN PTDI_CONNECTION_INFORMATION pSendDgramInfo, IN ULONG SendLength, OUT PULONG pSentSize, IN tBUFFER *pSendBuffer, IN ULONG SendFlags ); PIRP NTAllocateNbtIrp( IN PDEVICE_OBJECT DeviceObject ); NTSTATUS TdiConnect( IN PTDI_REQUEST pRequestInfo, IN ULONG lTimeout, IN PTDI_CONNECTION_INFORMATION pSendInfo, OUT PVOID pIrp ); NTSTATUS TdiSend( IN PTDI_REQUEST pRequestInfo, IN USHORT sFlags, IN ULONG SendLength, OUT PULONG pSentSize, IN tBUFFER *pSendBuffer, IN ULONG Flags ); NTSTATUS TdiDisconnect( IN PTDI_REQUEST pRequestInfo, IN PVOID lTimeout, IN ULONG Flags, IN PTDI_CONNECTION_INFORMATION pSendInfo, IN PCTE_IRP pClientIrp, IN BOOLEAN Wait ); //--------------------------------------------------------------------- // // FROM inbound.c // NTSTATUS QueryFromNet( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameHdr, IN LONG lNumBytes, IN USHORT OpCodeFlags, IN BOOLEAN fBroadcast ); NTSTATUS RegResponseFromNet( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameHdr, IN LONG lNumBytes, IN USHORT OpCodeFlags ); NTSTATUS CheckRegistrationFromNet( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameHdr, IN LONG lNumBytes ); NTSTATUS NameReleaseFromNet( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameHdr, IN LONG lNumBytes ); NTSTATUS WackFromNet( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameHdr, IN LONG lNumBytes ); VOID SetupRefreshTtl( IN tNAMEHDR UNALIGNED *pNameHdr, IN tNAMEADDR *pNameAddr, IN LONG lNameSize ); BOOLEAN SrcIsNameServer( IN ULONG SrcAddress, IN USHORT SrcPort ); VOID SwitchToBackup( IN tDEVICECONTEXT *pDeviceContext ); BOOLEAN SrcIsUs( IN ULONG SrcAddress ); NTSTATUS FindOnPendingList( IN PUCHAR pName, IN tNAMEHDR UNALIGNED *pNameHdr, IN BOOLEAN DontCheckTransactionId, IN ULONG BytesToCompare, OUT tNAMEADDR **ppNameAddr ); //--------------------------------------------------------------------- // // FROM init.c // NTSTATUS InitNotOs( void ) ; NTSTATUS InitTimersNotOs( void ); NTSTATUS StopInitTimers( void ); VOID ReadParameters( IN tNBTCONFIG *pConfig, IN HANDLE ParmHandle ); VOID ReadParameters2( IN tNBTCONFIG *pConfig, IN HANDLE ParmHandle ); //--------------------------------------------------------------------- // // FROM parse.c // unsigned long LmGetIpAddr ( IN PUCHAR path, IN PUCHAR target, IN BOOLEAN recurse, OUT BOOLEAN *bFindName ); VOID RemovePreloads ( ); VOID RemoveName ( IN tNAMEADDR *pNameAddr ); LONG PrimeCache( IN PUCHAR path, IN PUCHAR ignored, IN BOOLEAN recurse, OUT BOOLEAN *ignored2 ); NTSTATUS NtDnsNameResolve ( IN tDEVICECONTEXT *pDeviceContext, IN PVOID *pBuffer, IN LONG Size, IN PCTE_IRP pIrp ); NTSTATUS NtCheckForIPAddr ( IN tDEVICECONTEXT *pDeviceContext, IN PVOID *pBuffer, IN LONG Size, IN PCTE_IRP pIrp ); VOID StartIpAddrToSrvName( IN NBT_WORK_ITEM_CONTEXT *Context, IN ULONG *IpAddrsList, IN BOOLEAN IpAddrResolved ); VOID StartConnWithBestAddr( IN NBT_WORK_ITEM_CONTEXT *Context, IN ULONG *IpAddrsList, IN BOOLEAN IpAddrResolved ); NTSTATUS DoDnsResolve ( IN NBT_WORK_ITEM_CONTEXT *Context ); NTSTATUS DoCheckAddr ( IN NBT_WORK_ITEM_CONTEXT *Context ); NTSTATUS LmHostQueueRequest( IN tDGRAM_SEND_TRACKING *pTracker, IN PVOID pClientContext, IN PVOID ClientCompletion, IN PVOID CallBackRoutine, IN PVOID pDeviceContext, IN CTELockHandle OldIrq ); tNAMEADDR * FindInDomainList ( IN PUCHAR pName, IN PLIST_ENTRY pDomainHead ); VOID ScanLmHostFile ( IN PVOID Context ); #define MIN(x,y) (((x) < (y)) ? (x) : (y)) #define MAX(x,y) (((x) > (y)) ? (x) : (y)) #endif // _NBTPROCS_H_