Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

225 lines
4.8 KiB

#ifndef VXD
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windef.h>
#include <winbase.h>
#include <netconp.h>
#include <assert.h>
#include <stdio.h>
#include <winsock.h>
#include <wsahelp.h>
#include <nb30.h>
#include <nbtioctl.h>
//#include "../../tcpip/commands/common/tcpcmd.h"
#else
#include "vxdonly.h"
#endif
#define PROTODB_SIZE (_MAX_PATH + 10)
#define SERVDB_SIZE (_MAX_PATH + 10)
#define MAX_FAST_TDI_ADDRESS 32
#define TDI_QUERY_PURGE_CACHE 97
#define TDI_QUERY_CONNECTION_LIST 98
#define TDI_QUERY_CACHE_STATUS 99
#define TDI_DHCP_TEST 133
#define TDI_BCAST_RESOLVED_NAMES 134
#define NETBIOS_NAME_SIZE 16
/*
* Display Modes.
*/
#define ADAPTERSTATUS 0x0001
#define ADAPTERSTATUSIP 0x0002
#define BCAST 0x0004
#define CACHE 0x0008
#define CONNECTION 0x0010
#define CONNECTION_ALL 0x0020
#define CONNECTION_WITH_IP 0x0040
#define CONNECTION_WITH_IP_ALL 0x0080
#define DHCP 0x0100
#define NAMES 0x0200
#define NAMES_ALL 0x0400
#define NAME_RELEASE_REFRESH 0x0800 // not really a display mode
#define RESYNC 0x1000 // not really a display mode
//
enum eSTATE
{
NBT_RECONNECTING, // waiting for the worker thread to run NbtConnect
NBT_IDLE, // not Transport connection
NBT_ASSOCIATED, // associated with an address element
NBT_CONNECTING, // establishing Transport connection
NBT_SESSION_INBOUND, // waiting for a session request after tcp connection setup inbound
NBT_SESSION_WAITACCEPT, // waiting for accept after a listen has been satisfied
NBT_SESSION_OUTBOUND, // waiting for a session response after tcp connection setup
NBT_SESSION_UP, // got positive response
NBT_DISCONNECTING, // sent a disconnect down to Tcp, but it hasn't completed yet
NBT_DISCONNECTED // a session has been disconnected but not closed with TCP yet
};
//
// These are other states for connections that are not explicitly used by
// NBT but are returned on the NbtQueryConnectionList call.
//
#define LISTENING 20
#define UNBOUND 21
#if 0
struct {
long TdiError;
NTSTATUS UnixError;
} UnixErrorMap[] = {
{STATUS_INVALID_PARAMETER,EINVAL},
{STATUS_INVALID_NETWORK_RESPONSE,ENETDOWN},
{STATUS_INVALID_NETWORK_RESPONSE,ENODEV},
{STATUS_INVALID_NETWORK_RESPONSE,ENXIO},
{STATUS_NETWORK_BUSY,EBUSY},
{STATUS_INSUFFICIENT_RESOURCES,ENOSR},
{STATUS_ACCESS_DENIED,EACCES},
{STATUS_LINK_FAILED,ECONNRESET},
{STATUS_REMOTE_NOT_LISTENING,ECONNREFUSED},
{STATUS_IO_TIMEOUT,ETIMEDOUT},
{STATUS_BAD_NETWORK_PATH,ENETUNREACH},
{STATUS_BAD_NETWORK_PATH,EHOSTUNREACH},
{0,0}
};
#endif
//
// The format of Adapter Status responses
//
typedef struct
{
ADAPTER_STATUS AdapterInfo;
NAME_BUFFER Names[32];
} tADAPTERSTATUS;
// 1234567890123456
#define SPACES " "
#define ClearNcb( PNCB ) { \
RtlZeroMemory( PNCB , sizeof (NCB) ); \
RtlMoveMemory( (PNCB)->ncb_name, SPACES, sizeof(SPACES)-1 );\
RtlMoveMemory( (PNCB)->ncb_callname, SPACES, sizeof(SPACES)-1 );\
}
//
// the defines that do the right thing
//
NTSTATUS
DeviceIoCtrl(
IN HANDLE fd,
IN PVOID ReturnBuffer,
IN ULONG BufferSize,
IN ULONG Ioctl,
IN PVOID pInput,
IN ULONG SizeInput
);
#define CALL_DRIVER DeviceIoCtrl
//----------------------------------------------------------------------
//
// Function Prototypes
//
typedef struct
{
ADAPTER_STATUS AdapterInfo;
tREMOTE_CACHE Names[32];
} tREMOTE;
NTSTATUS
ReadRegistry(
IN PUCHAR pScope
);
NTSTATUS
GetInterfaceList(
);
HANDLE
OpenNbt(
IN ULONG Index
);
VOID
PrintKorM(
IN PVOID pBytesIn
);
NTSTATUS
GetNames(
IN HANDLE fd,
IN LONG WhichNames
);
NTSTATUS
GetConnections(
IN HANDLE fd,
IN LONG Display
);
NTSTATUS
Resync(
IN HANDLE fd
);
NTSTATUS
ReleaseNamesThenRefresh(
IN HANDLE fd
);
PCHAR
gethost(ULONG addr,
BOOLEAN Convert);
NTSTATUS
GetBcastResolvedNames(
IN HANDLE fd
);
NTSTATUS
Dhcp(
IN HANDLE fd
);
VOID
FormattedDump(
PCHAR far_p,
LONG len
);
VOID
HexDumpLine(
PCHAR pch,
ULONG len,
PCHAR s,
PCHAR t
);
NTSTATUS
AdapterStatus(
IN HANDLE fd,
IN PCHAR RemoteName
);
NTSTATUS
AdapterStatusIpAddr(
IN HANDLE fd,
IN PCHAR RemoteName,
IN LONG Display
);
NTSTATUS
GetIpAddress(
IN HANDLE fd,
OUT PULONG pIpAddress
);