Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

569 lines
8.9 KiB

/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
nbprocs.h
Abstract:
Private include file for the NB (NetBIOS) component of the NTOS project.
Author:
Colin Watson (ColinW) 13-Mar-1991
Revision History:
--*/
//
// address.c
//
NTSTATUS
NbSetEventHandler (
IN PDEVICE_OBJECT DeviceObject,
IN PFILE_OBJECT FileObject,
IN ULONG EventType,
IN PVOID EventHandler,
IN PVOID Context
);
NTSTATUS
NbAddName(
IN PDNCB pdncb,
IN PIO_STACK_LOCATION IrpSp
);
NTSTATUS
NbDeleteName(
IN PDNCB pdncb,
IN PIO_STACK_LOCATION IrpSp
);
NTSTATUS
NbOpenAddress (
OUT PHANDLE FileHandle,
OUT PVOID *Object,
IN PUNICODE_STRING pusDeviceName,
IN UCHAR LanNumber,
IN PDNCB pdncb OPTIONAL
);
PAB
NewAb(
IN PIO_STACK_LOCATION IrpSp,
IN PDNCB pdncb
);
VOID
CleanupAb(
IN PPAB ppab,
IN BOOLEAN CloseAddress
);
VOID
NbAddressClose(
IN HANDLE AddressHandle,
IN PVOID Object
);
PPAB
FindAb(
IN PFCB pfcb,
IN PDNCB pdncb,
IN BOOLEAN IncrementUsers
);
PPAB
FindAbUsingNum(
IN PFCB pfcb,
IN PDNCB pdncb,
IN UCHAR NameNumber
);
BOOL
FindActiveSession(
IN PFCB pfcb,
IN PDNCB pdncb,
IN PPAB ppab
);
VOID
CloseListens(
IN PFCB pfcb,
IN PPAB ppab
);
NTSTATUS
SubmitTdiRequest (
IN PFILE_OBJECT FileObject,
IN PIRP Irp
);
//
// connect.c
//
NTSTATUS
NbCall(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
NTSTATUS
NbCallCompletion(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS
NbListen(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
NTSTATUS
NbListenCompletion(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS
NbAcceptCompletion(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
PPCB
NbCallCommon(
IN PDNCB pdncb,
IN PIO_STACK_LOCATION IrpSp
);
NTSTATUS
NbHangup(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
NTSTATUS
NbOpenConnection (
OUT PHANDLE FileHandle,
OUT PVOID *Object,
IN PFCB pfcb,
IN PVOID ConnectionContext,
IN PDNCB pdncb
);
PPCB
NewCb(
IN PIO_STACK_LOCATION IrpSp,
IN OUT PDNCB pdncb
);
NTSTATUS
CleanupCb(
IN PPCB ppcb,
IN PDNCB pdncb OPTIONAL
);
VOID
AbandonConnection(
IN PPCB ppcb
);
VOID
CloseConnection(
IN PPCB ppcb,
IN DWORD dwTimeOutinMS
);
PPCB
FindCb(
IN PFCB pfcb,
IN PDNCB pdncb,
IN BOOLEAN IgnoreState
);
NTSTATUS
NbTdiDisconnectHandler (
PVOID EventContext,
PVOID ConnectionContext,
ULONG DisconnectDataLength,
PVOID DisconnectData,
ULONG DisconnectInformationLength,
PVOID DisconnectInformation,
ULONG DisconnectIndicators
);
PPCB
FindCallCb(
IN PFCB pfcb,
IN PNCB pncb,
IN UCHAR ucLana
);
PPCB
FindReceiveIndicated(
IN PFCB pfcb,
IN PDNCB pdncb,
IN PPAB ppab
);
#if DBG
//
// debug.c
//
VOID
NbDisplayNcb(
IN PDNCB pdncb
);
VOID
NbFormattedDump(
PCHAR far_p,
LONG len
);
#endif
//
// devobj.c
//
NTSTATUS
NbCreateDeviceContext(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING DeviceName,
IN OUT PDEVICE_CONTEXT *DeviceContext,
IN PUNICODE_STRING RegistryPath
);
//
// error.c
//
unsigned char
NbMakeNbError(
IN NTSTATUS Error
);
NTSTATUS
NbLanStatusAlert(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
VOID
CancelLanAlert(
IN PFCB pfcb,
IN PDNCB pdncb
);
NTSTATUS
NbTdiErrorHandler (
IN PVOID Context,
IN NTSTATUS Status
);
//
// file.c
//
NTSTATUS
NewFcb(
IN PDEVICE_CONTEXT DeviceContext,
IN PIO_STACK_LOCATION IrpSp
);
VOID
CleanupFcb(
IN PIO_STACK_LOCATION IrpSp,
IN PFCB pfcb
);
VOID
OpenLana(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
VOID
CleanupLana(
IN PFCB pfcb,
IN ULONG lana_index,
IN BOOLEAN delete
);
VOID
NbBindHandler(
IN TDI_PNP_OPCODE PnpOpcode,
IN PUNICODE_STRING DeviceName,
IN PWSTR MultiSzBindList
);
NTSTATUS
NbPowerHandler(
IN PUNICODE_STRING pusDeviceName,
IN PNET_PNP_EVENT pnpeEvent,
IN PTDI_PNP_CONTEXT ptpcContext1,
IN PTDI_PNP_CONTEXT ptpcContext2
);
VOID
NbTdiBindHandler(
IN PUNICODE_STRING pusDeviceName,
IN PWSTR pwszMultiSZBindList
);
VOID
NbTdiUnbindHandler(
IN PUNICODE_STRING pusDeviceName
);
//
// nb.c
//
NTSTATUS
NbCompletionEvent(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS
NbCompletionPDNCB(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS
NbClose(
IN PIO_STACK_LOCATION IrpSp
);
VOID
NbDriverUnload(
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS
NbDeviceControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp
);
NTSTATUS
NbDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
NbOpen(
IN PDEVICE_CONTEXT DeviceContext,
IN PIO_STACK_LOCATION IrpSp
);
VOID
QueueRequest(
IN PLIST_ENTRY List,
IN PDNCB pdncb,
IN PIRP Irp,
IN PFCB pfcb,
IN KIRQL OldIrql,
IN BOOLEAN Head);
PDNCB
DequeueRequest(
IN PLIST_ENTRY List
);
NTSTATUS
AllocateAndCopyUnicodeString(
IN OUT PUNICODE_STRING pusDest,
IN PUNICODE_STRING pusSource
);
//
// receive.c
//
NTSTATUS
NbReceive(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp,
IN ULONG Buffer2Length,
IN BOOLEAN Locked,
IN KIRQL LockedIrql
);
NTSTATUS
NbReceiveAny(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp,
IN ULONG Buffer2Length
);
NTSTATUS
NbTdiReceiveHandler (
IN PVOID ReceiveEventContext,
IN PVOID ConnectionContext,
IN USHORT ReceiveFlags,
IN ULONG BytesIndicated,
IN ULONG BytesAvailable,
OUT PULONG BytesTaken,
IN PVOID Tsdu,
OUT PIRP *IoRequestPacket
);
PIRP
BuildReceiveIrp (
IN PCB pcb
);
NTSTATUS
NbReceiveDatagram(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp,
IN ULONG Buffer2Length
);
NTSTATUS
NbTdiDatagramHandler(
IN PVOID TdiEventContext, // the event context - pab
IN int SourceAddressLength, // length of the originator of the datagram
IN PVOID SourceAddress, // string describing the originator of the datagram
IN int OptionsLength, // options for the receive
IN PVOID Options, //
IN ULONG ReceiveDatagramFlags, //
IN ULONG BytesIndicated, // number of bytes this indication
IN ULONG BytesAvailable, // number of bytes in complete Tsdu
OUT ULONG *BytesTaken, // number of bytes used
IN PVOID Tsdu, // pointer describing this TSDU, typically a lump of bytes
OUT PIRP *IoRequestPacket // TdiReceive IRP if MORE_PROCESSING_REQUIRED.
);
//
// registry.c
//
CCHAR
GetIrpStackSize(
IN PUNICODE_STRING RegistryPath,
IN CCHAR DefaultValue
);
NTSTATUS
ReadRegistry(
IN PUNICODE_STRING pucRegistryPath,
IN PFCB NewFcb,
IN BOOLEAN bCreateDevice
);
NTSTATUS
GetLanaMap(
IN PUNICODE_STRING pusRegistryPath,
IN OUT PKEY_VALUE_FULL_INFORMATION * ppkvfi
);
NTSTATUS
GetMaxLana(
IN PUNICODE_STRING pusRegistryPath,
IN OUT PULONG pulMaxLana
);
VOID
NbFreeRegistryInfo (
IN PFCB pfcb
);
BOOLEAN
NbCheckLana (
PUNICODE_STRING DeviceName
);
//
// send.c
//
NTSTATUS
NbSend(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp,
IN ULONG Buffer2Length
);
NTSTATUS
NbSendDatagram(
IN PDNCB pdncb,
IN PIRP Irp,
IN PIO_STACK_LOCATION IrpSp,
IN ULONG Buffer2Length
);
//
// timer.c
//
VOID
NbStartTimer(
IN PFCB pfcb
);
VOID
NbTimerDPC(
IN PKDPC Dpc,
IN PVOID Context,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2
);
VOID
NbTimer(
PDEVICE_OBJECT DeviceObject,
PVOID Context
) ;
#if defined(_WIN64)
//
// nb32.c
//
NTSTATUS
NbThunkNcb(
IN PNCB32 Ncb32,
OUT PDNCB Dncb);
NTSTATUS
NbCompleteIrp32(
IN OUT PIRP Irp
);
#endif