226 lines
4.8 KiB
C
226 lines
4.8 KiB
C
#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
|
||
);
|
||
|
||
|