/*++ Copyright (c) 1989-1993 Microsoft Corporation Module Name: NTProcs.c Abstract: This file contains the function prototypes that are specific to the NT portion of the NBT driver. Author: Johnl 29-Mar-1993 Created Revision History: --*/ #ifndef VXD //--------------------------------------------------------------------- // // FROM DRIVER.C // NTSTATUS NbtDispatchCleanup( IN PDEVICE_OBJECT Device, IN PIRP irp ); NTSTATUS NbtDispatchClose( IN PDEVICE_OBJECT device, IN PIRP irp ); NTSTATUS NbtDispatchCreate( IN PDEVICE_OBJECT Device, IN PIRP pIrp ); NTSTATUS NbtDispatchDevCtrl( IN PDEVICE_OBJECT device, IN PIRP irp ); NTSTATUS NbtDispatchInternalCtrl( IN PDEVICE_OBJECT device, IN PIRP irp ); PFILE_FULL_EA_INFORMATION FindInEA( IN PFILE_FULL_EA_INFORMATION start, IN PCHAR wanted ); USHORT GetDriverName( IN PFILE_OBJECT pfileobj, OUT PUNICODE_STRING name ); int shortreply( IN PIRP pIrp, IN int status, IN int nbytes ); //--------------------------------------------------------------------- // // FROM NTISOL.C // NTSTATUS NTOpenControl( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTOpenAddr( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp, IN PFILE_FULL_EA_INFORMATION ea); NTSTATUS NTOpenConnection( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp, IN PFILE_FULL_EA_INFORMATION ea); VOID NTSetFileObjectContexts( IN PIRP pIrp, IN PVOID FsContext, IN PVOID FsContext2); VOID NTCompleteIOListen( IN tCLIENTELE *pClientEle, IN NTSTATUS Status); VOID NTIoComplete( IN PIRP pIrp, IN NTSTATUS Status, IN ULONG SentLength); VOID NTCompleteRegistration( IN tCLIENTELE *pClientEle, IN NTSTATUS Status); NTSTATUS NTAssocAddress( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTCloseAddress( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); VOID NTClearFileObjectContext( IN PIRP pIrp ); NTSTATUS NTCloseConnection( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTSetSharedAccess( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp, IN tADDRESSELE *pAddress); NTSTATUS NTCheckSharedAccess( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp, IN tADDRESSELE *pAddress); NTSTATUS NTCleanUpAddress( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTCleanUpConnection( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); VOID NbtCancelDisconnectWait( IN PDEVICE_OBJECT DeviceContext, IN PIRP pIrp ); VOID NbtCancelListen( IN PDEVICE_OBJECT DeviceContext, IN PIRP Irp ); VOID NbtCancelRcvDgram( IN PDEVICE_OBJECT DeviceContext, IN PIRP pIrp ); VOID NbtCancelDgramSend( IN PDEVICE_OBJECT DeviceContext, IN PIRP pIrp ); NTSTATUS NTAccept( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTAssocAddress( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTDisAssociateAddress( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTConnect( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTDisconnect( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTListen( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTQueryInformation( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTReceive( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTReceiveDatagram( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTSend( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTSendDatagram( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTSetEventHandler( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTSetInformation( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp); NTSTATUS NTCheckSetCancelRoutine( IN PIRP pIrp, IN PVOID CancelRoutine, IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS NbtSetCancelRoutine( IN PIRP pIrp, IN PVOID CancelRoutine, IN tDEVICECONTEXT *pDeviceContext ); VOID NbtCancelSession( IN PDEVICE_OBJECT DeviceContext, IN PIRP pIrp ); VOID NbtCancelLmhSvcIrp( IN PDEVICE_OBJECT DeviceContext, IN PIRP pIrp ); VOID NbtCancelWaitForLmhSvcIrp( IN PDEVICE_OBJECT DeviceContext, IN PIRP pIrp ); NTSTATUS NTSendSession( IN tDGRAM_SEND_TRACKING *pTracker, IN tLOWERCONNECTION *pLowerConn, IN PVOID pCompletion ); VOID NTSendDgramNoWindup( IN tDGRAM_SEND_TRACKING *pTracker, IN ULONG IpAddress, IN PVOID pCompletion); NTSTATUS NTQueueToWorkerThread( IN PVOID DelayedWorkerRoutine, IN tDGRAM_SEND_TRACKING *pTracker, IN PVOID pClientContext, IN PVOID ClientCompletion, IN tDEVICECONTEXT *pDeviceContext, IN BOOLEAN fJointLockHeld ); #ifdef _PNP_POWER_ VOID NTExecuteWorker( IN PVOID pContextInfo ); #endif VOID SecurityDelete( IN PVOID pContext ); NTSTATUS NbtSetTcpInfo( IN HANDLE FileHandle, IN ULONG ToiId, IN ULONG ToiType, IN ULONG InfoBufferValue ); NTSTATUS DispatchIoctls( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp, IN PIO_STACK_LOCATION pIrpSp); NTSTATUS NbtCancelCancelRoutine( IN PIRP pIrp ); VOID NTClearContextCancel( IN NBT_WORK_ITEM_CONTEXT *pContext ); VOID NbtCancelFindName( IN PDEVICE_OBJECT DeviceContext, IN PIRP pIrp ); //--------------------------------------------------------------------- // // FROM TDIADDR.C // NTSTATUS NbtProcessIPRequest( IN ULONG IPControlCode, IN PVOID pInBuffer, IN ULONG InBufferLen, OUT PVOID *pOutBuffer, IN OUT ULONG *pOutBufferLen ); //--------------------------------------------------------------------- // // FROM NTUTIL.C // #ifdef _PNP_POWER_ NTSTATUS NbtAllocAndInitDevice( PUNICODE_STRING pucBindName, PUNICODE_STRING pucExportName, tDEVICECONTEXT **ppDeviceContext, enum eNbtDevice DeviceType ); #endif // _PNP_POWER_ NTSTATUS NbtCreateDeviceObject( PUNICODE_STRING pBindName, PUNICODE_STRING pExportName, tADDRARRAY *pAddrs, tDEVICECONTEXT **ppDeviceContext, enum eNbtDevice DeviceType ); VOID NbtDeleteDevice( IN PVOID pContext ); BOOLEAN NBT_REFERENCE_DEVICE( IN tDEVICECONTEXT *pDeviceContext, ULONG ReferenceContext, IN BOOLEAN fLocked ); VOID NBT_DEREFERENCE_DEVICE( IN tDEVICECONTEXT *pDeviceContext, ULONG ReferenceContext, IN BOOLEAN fLocked ); tDEVICECONTEXT * GetDeviceWithIPAddress( tIPADDRESS IpAddress ); NTSTATUS NbtProcessDhcpRequest( tDEVICECONTEXT *pDeviceContext ); NTSTATUS ConvertToUlong( IN PUNICODE_STRING pucAddress, OUT ULONG *pulValue); NTSTATUS NbtCreateAddressObjects( IN ULONG IpAddress, IN ULONG SubnetMask, OUT tDEVICECONTEXT *pDeviceContext); VOID NbtGetMdl( PMDL *ppMdl, enum eBUFFER_TYPES eBuffType); NTSTATUS NbtInitMdlQ( PSINGLE_LIST_ENTRY pListHead, enum eBUFFER_TYPES eBuffType); NTSTATUS NTZwCloseFile( IN HANDLE Handle ); NTSTATUS NTReReadRegistry( IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS NbtInitIrpQ( PLIST_ENTRY pListHead, int iNumBuffers); NTSTATUS NbtLogEvent( IN ULONG EventCode, IN NTSTATUS Status, IN ULONG Location ); VOID DelayedNbtLogDuplicateNameEvent( IN PVOID Context1, IN PVOID Context2, IN PVOID Context3, IN tDEVICECONTEXT *pDeviceContext ); NTSTATUS SaveClientSecurity( IN tDGRAM_SEND_TRACKING *pTracker ); VOID NtDeleteClientSecurity( IN tDGRAM_SEND_TRACKING *pTracker ); VOID LogLockOperation( char operation, PKSPIN_LOCK PSpinLock, KIRQL OldIrql, KIRQL NewIrql, char *File, int Line ); StrmpInitializeLockLog( VOID ); VOID PadEntry( char *EntryPtr ); VOID DelayedNbtCloseFileHandles( IN tDGRAM_SEND_TRACKING *pUnused1, IN PVOID pContext, IN PVOID pUnused2, IN tDEVICECONTEXT *pUnused3 ); NTSTATUS CloseAddressesWithTransport( IN tDEVICECONTEXT *pDeviceContext ); PVOID CTEAllocMemDebug( IN ULONG Size, IN PVOID pBuffer, IN UCHAR *File, IN ULONG Line ); VOID AcquireSpinLockDebug( IN tNBT_LOCK_INFO *pLockInfo, IN PKIRQL pOldIrq, IN INT LineNumber ); VOID FreeSpinLockDebug( IN tNBT_LOCK_INFO *pLockInfo, IN KIRQL OldIrq, IN INT LineNumber ); VOID AcquireSpinLockAtDpcDebug( IN tNBT_LOCK_INFO *pLockInfo, IN INT LineNumber ); VOID FreeSpinLockAtDpcDebug( IN tNBT_LOCK_INFO *pLockInfo, IN INT LineNumber ); VOID GetDgramMdl( OUT PMDL *ppMdl ); NTSTATUS NbtDestroyDevice( IN tDEVICECONTEXT *pDeviceContext, IN BOOLEAN fWait ); //--------------------------------------------------------------------- // // FROM REGISTRY.C // NTSTATUS NbtReadRegistry( OUT tDEVICES **ppBindDevices, OUT tDEVICES **ppExportDevices, OUT tADDRARRAY **ppAddrArray ); VOID NbtReadRegistryCleanup( // release resources allocated by NbtReadRegistry IN tDEVICES **ppBindDevices, IN tDEVICES **ppExportDevices, IN tADDRARRAY **ppAddrArray ); NTSTATUS ReadNameServerAddresses ( IN HANDLE NbtConfigHandle, IN tDEVICES *BindDevices, IN ULONG NumberDevices, OUT tADDRARRAY **ppAddrArray ); NTSTATUS GetIPFromRegistry( IN PUNICODE_STRING pucBindDevice, OUT tIPADDRESS *pIpAddresses, OUT tIPADDRESS *pSubnetMask, IN ULONG MaxIpAddresses, OUT ULONG *pNumIpAddresses, IN enum eNbtIPAddressType IPAddressType ); NTSTATUS ReadElement( IN HANDLE HandleToKey, IN PWSTR pwsValueName, OUT PUNICODE_STRING pucString ); NTSTATUS NTReadIniString ( IN HANDLE ParametersHandle, IN PWSTR Key, OUT PUCHAR *ppString ); ULONG NbtReadSingleParameter( IN HANDLE ParametersHandle, IN PWCHAR ValueName, IN ULONG DefaultValue, IN ULONG MinimumValue ); NTSTATUS NTGetLmHostPath( OUT PUCHAR *ppPath ); NTSTATUS NbtParseMultiSzEntries( IN PWSTR StartBindValue, IN PWSTR EndBindValue, IN ULONG MaxBindings, OUT tDEVICES *pDevices, OUT ULONG *pNumDevices ); //--------------------------------------------------------------------- // // FROM tdihndlr.c // NTSTATUS Normal( IN PVOID ReceiveEventContext, IN tLOWERCONNECTION *pLowerConn, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID pTsdu, OUT PVOID *ppIrp ); NTSTATUS FillIrp( IN PVOID ReceiveEventContext, IN tLOWERCONNECTION *pLowerConn, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID pTsdu, OUT PVOID *ppIrp ); NTSTATUS IndicateBuffer( IN PVOID ReceiveEventContext, IN tLOWERCONNECTION *pLowerConn, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID pTsdu, OUT PVOID *ppIrp ); NTSTATUS PartialRcv( IN PVOID ReceiveEventContext, IN tLOWERCONNECTION *pLowerConn, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID pTsdu, OUT PVOID *ppIrp ); NTSTATUS TdiReceiveHandler ( IN PVOID ReceiveEventContext, IN PVOID ConnectionContext, IN USHORT ReceiveFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT PULONG BytesTaken, IN PVOID Tsdu, OUT PIRP *IoRequestPacket ); NTSTATUS PassRcvToTransport( IN tLOWERCONNECTION *pLowerConn, IN tCONNECTELE *pConnectEle, IN PVOID pIoRequestPacket, IN PULONG pRcvLength ); NTSTATUS CompletionRcv( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); NTSTATUS NtBuildIrpForReceive ( IN tLOWERCONNECTION *pLowerConn, IN ULONG Length, OUT PVOID *ppIrp ); NTSTATUS SetEventHandler ( IN PDEVICE_OBJECT DeviceObject, IN PFILE_OBJECT FileObject, IN ULONG EventType, IN PVOID EventHandler, IN PVOID Context ); NTSTATUS SubmitTdiRequest ( IN PFILE_OBJECT FileObject, IN PIRP Irp ); NTSTATUS TdiConnectHandler ( IN PVOID pConnectEventContext, IN int RemoteAddressLength, IN PVOID pRemoteAddress, IN int UserDataLength, IN PVOID pUserData, IN int OptionsLength, IN PVOID pOptions, OUT CONNECTION_CONTEXT *pConnectionContext, OUT PIRP *ppAcceptIrp ); NTSTATUS TdiDisconnectHandler ( PVOID EventContext, PVOID ConnectionContext, ULONG DisconnectDataLength, PVOID DisconnectData, ULONG DisconnectInformationLength, PVOID DisconnectInformation, ULONG DisconnectIndicators ); NTSTATUS TdiRcvDatagramHandler( IN PVOID pDgramEventContext, IN int SourceAddressLength, IN PVOID pSourceAddress, IN int OptionsLength, IN PVOID pOptions, IN ULONG ReceiveDatagramFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT ULONG *pBytesTaken, IN PVOID pTsdu, OUT PIRP *pIoRequestPacket ); NTSTATUS TdiRcvNameSrvHandler( IN PVOID pDgramEventContext, IN int SourceAddressLength, IN PVOID pSourceAddress, IN int OptionsLength, IN PVOID pOptions, IN ULONG ReceiveDatagramFlags, IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT ULONG *pBytesTaken, IN PVOID pTsdu, OUT PIRP *pIoRequestPacket ); NTSTATUS TdiErrorHandler ( IN PVOID Context, IN NTSTATUS Status ); NTSTATUS CompletionRcvDgram( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context ); VOID MakePartialMdl ( IN tCONNECTELE *pConnEle, IN PIRP pIrp, IN ULONG ToCopy ); NTSTATUS OutOfRsrcKill( OUT tLOWERCONNECTION *pLowerConn); VOID CopyToStartofIndicate ( IN tLOWERCONNECTION *pLowerConn, IN ULONG DataTaken ); //--------------------------------------------------------------------- // // FROM tdicnct.c // NTSTATUS CreateDeviceString( IN PWSTR AppendingString, IN OUT PUNICODE_STRING pucDevice ); //--------------------------------------------------------------------- // // FROM winsif.c // NTSTATUS NTOpenWinsAddr( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp, IN tIPADDRESS IpAddress ); NTSTATUS NTCleanUpWinsAddr( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp ); NTSTATUS NTCloseWinsAddr( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp ); NTSTATUS RcvIrpFromWins ( IN PCTE_IRP pIrp ); NTSTATUS PassNamePduToWins ( IN tDEVICECONTEXT *pDeviceContext, IN PVOID pSrcAddress, IN tNAMEHDR UNALIGNED *pNameSrv, IN ULONG uNumBytes ); NTSTATUS WinsSendDatagram( IN tDEVICECONTEXT *pDeviceContext, IN PIRP pIrp, IN BOOLEAN MustSend); NTSTATUS WinsRegisterName( IN tDEVICECONTEXT *pDeviceContext, IN tNAMEADDR *pNameAddr, IN PUCHAR pScope, IN enum eNSTYPE eNsType ); NTSTATUS WinsSetInformation( IN tWINS_INFO *pWins, IN tWINS_SET_INFO *pWinsSetInfo ); //--------------------------------------------------------------------- // // FROM ntpnp.c // VOID NbtNotifyTdiClients( IN tDEVICECONTEXT *pDeviceContext, IN enum eTDI_ACTION Action ); #ifdef _NETBIOSLESS tDEVICECONTEXT * NbtCreateSmbDevice( ); #endif NTSTATUS NbtDeviceAdd( PUNICODE_STRING pucBindString ); NTSTATUS NbtDeviceRemove( PUNICODE_STRING pucBindString ); VOID TdiAddressArrival( IN PTA_ADDRESS Addr, IN PUNICODE_STRING pDeviceName, IN PTDI_PNP_CONTEXT Context ); VOID TdiAddressDeletion( IN PTA_ADDRESS Addr, IN PUNICODE_STRING pDeviceName, IN PTDI_PNP_CONTEXT Context ); VOID TdiBindHandler( IN TDI_PNP_OPCODE PnPOpcode, IN PUNICODE_STRING DeviceName, IN PWSTR MultiSZBindList ); NTSTATUS TdiPnPPowerHandler( IN PUNICODE_STRING DeviceName, IN PNET_PNP_EVENT PnPEvent, IN PTDI_PNP_CONTEXT Context1, IN PTDI_PNP_CONTEXT Context2 ); VOID NbtPnPPowerComplete( IN PNET_PNP_EVENT NetEvent, IN NTSTATUS ProviderStatus ); NTSTATUS CheckSetWakeupPattern( tDEVICECONTEXT *pDeviceContext, PUCHAR pName, BOOLEAN RequestAdd ); NTSTATUS NbtCreateNetBTDeviceObject( PDRIVER_OBJECT DriverObject, tNBTCONFIG *pConfig, PUNICODE_STRING RegistryPath ); NTSTATUS NbtNtPNPInit( VOID ); VOID NbtFailedNtPNPInit( VOID ); NTSTATUS NbtAddressAdd( IN ULONG IpAddr, IN tDEVICECONTEXT *pDeviceContext, IN PUNICODE_STRING pucBindString ); NTSTATUS NbtAddNewInterface ( IN PIRP pIrp, IN PVOID *pBuffer, IN ULONG Size ); VOID NbtAddressDelete( ULONG IpAddr ); tDEVICECONTEXT * NbtFindAndReferenceDevice( PUNICODE_STRING pucBindName, BOOLEAN fNameIsBindName ); #if FAST_DISP NTSTATUS NbtQueryIpHandler( IN PFILE_OBJECT FileObject, IN ULONG IOControlCode, OUT PVOID *EntryPoint ); #endif //--------------------------------------------------------------------- // // FROM AutoDial.c // VOID NbtAcdBind( ); VOID NbtAcdUnbind( ); NTSTATUS LookupDeviceInRegistry( IN PUNICODE_STRING pBindName, OUT tADDRARRAY* pAddrs, OUT PUNICODE_STRING pExportName); void SetNodeType(void); void NbtUpBootCounter(void); void NbtDownBootCounter(void); NTSTATUS NbtSetSmbBindingInfo2( IN tDEVICECONTEXT *pDeviceContext, IN NETBT_SMB_BIND_REQUEST *pSmbRequest ); #endif // !VXD