mirror of https://github.com/lianthony/NT4.0
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.
312 lines
7.6 KiB
312 lines
7.6 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
netdtect.h
|
|
|
|
Abstract:
|
|
|
|
Default definitions for driver and its control application.
|
|
|
|
Author:
|
|
|
|
Sean Selitrennikoff (SeanSe) October 1992
|
|
|
|
Environment:
|
|
|
|
Kernel mode, FSD
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#if DBG
|
|
|
|
extern UCHAR NetDTectDebug;
|
|
|
|
#define DEBUG_LOUD 0x1
|
|
#define DEBUG_VERY_LOUD 0x2
|
|
|
|
|
|
#define IF_LOUD( A ) if(NetDTectDebug & DEBUG_LOUD) { A }
|
|
#define IF_VERY_LOUD( A ) if(NetDTectDebug & DEBUG_VERY_LOUD) { A }
|
|
|
|
#else
|
|
|
|
#define IF_LOUD( A )
|
|
#define IF_VERY_LOUD( A )
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
//
|
|
// Device Name - this string is the name of the device. It is the name
|
|
// that should be passed to NtOpenFile when accessing the device.
|
|
//
|
|
// Note: For devices that support multiple units, it should be suffixed
|
|
// with the Ascii representation of the unit number.
|
|
//
|
|
|
|
#define DRIVER_DEVICE_NAME "\\Device\\NtNetDetect"
|
|
|
|
//
|
|
// Device Name - this string is the name of the device in DOS space which
|
|
// maps from the DRIVER_DEVICE_NAME
|
|
//
|
|
|
|
#define DOS_DRIVER_DEVICE_NAME "\\DosDevices\\NetDTect"
|
|
|
|
|
|
//
|
|
// The symbolic link for the device driver name for win32 apis
|
|
//
|
|
|
|
#define DLL_CREATE_DEVICE_NAME "\\\\.\\NetDTect"
|
|
|
|
|
|
//
|
|
// NtDeviceIoControlFile IoControlCode values for this device.
|
|
//
|
|
// Warning: Remember that the low two bits of the code represent the
|
|
// method, and specify how the input and output buffers are
|
|
// passed to the driver via NtDeviceIoControlFile()
|
|
//
|
|
//
|
|
|
|
|
|
//
|
|
// Control codes
|
|
//
|
|
#define NETDTECT_READ_PORT_UCHAR 0x0
|
|
#define NETDTECT_READ_PORT_USHORT 0x1
|
|
#define NETDTECT_READ_PORT_ULONG 0x2
|
|
#define NETDTECT_WRITE_PORT_UCHAR 0x3
|
|
#define NETDTECT_WRITE_PORT_USHORT 0x4
|
|
#define NETDTECT_WRITE_PORT_ULONG 0x5
|
|
#define NETDTECT_READ_MAPPED_MEMORY 0x6
|
|
#define NETDTECT_WRITE_MAPPED_MEMORY 0x7
|
|
#define NETDTECT_SET_INTERRUPT_TRAP 0x8
|
|
#define NETDTECT_QUERY_INTERRUPT_TRAP 0x9
|
|
#define NETDTECT_REMOVE_INTERRUPT_TRAP 0xA
|
|
#define NETDTECT_CHECK_PORT_USAGE 0xB
|
|
#define NETDTECT_CHECK_MEMORY_USAGE 0xC
|
|
#define NETDTECT_CLAIM_RESOURCE 0xD
|
|
#define NETDTECT_TEMP_CLAIM_RESOURCE 0xE
|
|
#define NETDTECT_FREE_TEMP_RESOURCES 0xF
|
|
#define NETDTECT_RPCI 0x10
|
|
#define NETDTECT_WPCI 0x11
|
|
#define NETDTECT_FREE_TEMP_SPECIFIC_RESOURCES 0x12
|
|
|
|
#define IOCTL_BASE FILE_DEVICE_UNKNOWN
|
|
|
|
#define IOCTL_RP_METHOD 3
|
|
#define IOCTL_WP_METHOD 3
|
|
#define IOCTL_SIT_METHOD 3
|
|
#define IOCTL_QIT_METHOD 3
|
|
#define IOCTL_RIT_METHOD 3
|
|
#define IOCTL_WM_METHOD 1
|
|
#define IOCTL_RM_METHOD 2
|
|
#define IOCTL_CP_METHOD 3
|
|
#define IOCTL_CM_METHOD 3
|
|
#define IOCTL_CR_METHOD 1
|
|
|
|
|
|
#define NETDTECT_CONTROL_CODE(request, method) \
|
|
((IOCTL_BASE)<<16 | (request<<2) | method)
|
|
|
|
|
|
#define IOCTL_NETDTECT_RPC NETDTECT_CONTROL_CODE( NETDTECT_READ_PORT_UCHAR, \
|
|
IOCTL_RP_METHOD )
|
|
#define IOCTL_NETDTECT_RPS NETDTECT_CONTROL_CODE( NETDTECT_READ_PORT_USHORT, \
|
|
IOCTL_RP_METHOD )
|
|
#define IOCTL_NETDTECT_RPL NETDTECT_CONTROL_CODE( NETDTECT_READ_PORT_ULONG, \
|
|
IOCTL_RP_METHOD )
|
|
|
|
#define IOCTL_NETDTECT_WPC NETDTECT_CONTROL_CODE( NETDTECT_WRITE_PORT_UCHAR, \
|
|
IOCTL_WP_METHOD )
|
|
#define IOCTL_NETDTECT_WPS NETDTECT_CONTROL_CODE( NETDTECT_WRITE_PORT_USHORT, \
|
|
IOCTL_WP_METHOD )
|
|
#define IOCTL_NETDTECT_WPL NETDTECT_CONTROL_CODE( NETDTECT_WRITE_PORT_ULONG, \
|
|
IOCTL_WP_METHOD )
|
|
|
|
#define IOCTL_NETDTECT_RM NETDTECT_CONTROL_CODE( NETDTECT_READ_MAPPED_MEMORY, \
|
|
IOCTL_RM_METHOD )
|
|
#define IOCTL_NETDTECT_WM NETDTECT_CONTROL_CODE( NETDTECT_WRITE_MAPPED_MEMORY, \
|
|
IOCTL_WM_METHOD )
|
|
|
|
#define IOCTL_NETDTECT_SIT NETDTECT_CONTROL_CODE( NETDTECT_SET_INTERRUPT_TRAP, \
|
|
IOCTL_SIT_METHOD )
|
|
#define IOCTL_NETDTECT_QIT NETDTECT_CONTROL_CODE( NETDTECT_QUERY_INTERRUPT_TRAP, \
|
|
IOCTL_QIT_METHOD )
|
|
#define IOCTL_NETDTECT_RIT NETDTECT_CONTROL_CODE( NETDTECT_REMOVE_INTERRUPT_TRAP, \
|
|
IOCTL_RIT_METHOD )
|
|
#define IOCTL_NETDTECT_CPU NETDTECT_CONTROL_CODE( NETDTECT_CHECK_PORT_USAGE, \
|
|
IOCTL_CP_METHOD )
|
|
#define IOCTL_NETDTECT_CMU NETDTECT_CONTROL_CODE( NETDTECT_CHECK_MEMORY_USAGE, \
|
|
IOCTL_CM_METHOD )
|
|
#define IOCTL_NETDTECT_CR NETDTECT_CONTROL_CODE( NETDTECT_CLAIM_RESOURCE, \
|
|
IOCTL_CR_METHOD )
|
|
#define IOCTL_NETDTECT_TCR NETDTECT_CONTROL_CODE( NETDTECT_TEMP_CLAIM_RESOURCE, \
|
|
IOCTL_CR_METHOD )
|
|
#define IOCTL_NETDTECT_FTR NETDTECT_CONTROL_CODE( NETDTECT_FREE_TEMP_RESOURCES, \
|
|
IOCTL_CR_METHOD )
|
|
#define IOCTL_NETDTECT_FTSR NETDTECT_CONTROL_CODE( NETDTECT_FREE_TEMP_SPECIFIC_RESOURCES, \
|
|
IOCTL_CR_METHOD )
|
|
|
|
#define IOCTL_NETDTECT_RPCI NETDTECT_CONTROL_CODE( NETDTECT_RPCI, \
|
|
IOCTL_CR_METHOD )
|
|
#define IOCTL_NETDTECT_WPCI NETDTECT_CONTROL_CODE( NETDTECT_WPCI, \
|
|
IOCTL_CR_METHOD )
|
|
//
|
|
// Structure for holding the information in the IRP SystemBuffer
|
|
//
|
|
typedef union _CMD_ARGS
|
|
{
|
|
//
|
|
// READ_PORT_*
|
|
//
|
|
struct _RP
|
|
{
|
|
INTERFACE_TYPE InterfaceType;
|
|
ULONG Port;
|
|
ULONG BusNumber;
|
|
ULONG Value;
|
|
}
|
|
RP;
|
|
|
|
//
|
|
// WRITE_PORT_UCHAR
|
|
//
|
|
struct _WPC
|
|
{
|
|
INTERFACE_TYPE InterfaceType;
|
|
ULONG Port;
|
|
ULONG BusNumber;
|
|
UCHAR Value;
|
|
}
|
|
WPC;
|
|
|
|
|
|
//
|
|
// WRITE_PORT_USHORT
|
|
//
|
|
struct _WPS
|
|
{
|
|
INTERFACE_TYPE InterfaceType;
|
|
ULONG Port;
|
|
ULONG BusNumber;
|
|
USHORT Value;
|
|
}
|
|
WPS;
|
|
|
|
|
|
//
|
|
// WRITE_PORT_ULONG
|
|
//
|
|
struct _WPL
|
|
{
|
|
INTERFACE_TYPE InterfaceType;
|
|
ULONG Port;
|
|
ULONG BusNumber;
|
|
ULONG Value;
|
|
}
|
|
WPL;
|
|
|
|
|
|
//
|
|
// READ/WRITE MEMORY
|
|
//
|
|
struct _MEM
|
|
{
|
|
INTERFACE_TYPE InterfaceType;
|
|
ULONG Address;
|
|
ULONG BusNumber;
|
|
ULONG Length;
|
|
}
|
|
MEM;
|
|
|
|
|
|
//
|
|
// SET_INTERRUPT_TRAP
|
|
//
|
|
struct _SIT
|
|
{
|
|
INTERFACE_TYPE InterfaceType;
|
|
PHANDLE TrapHandle;
|
|
ULONG InterruptListLength;
|
|
ULONG BusNumber;
|
|
}
|
|
SIT;
|
|
|
|
//
|
|
// QUERY_INTERRUPT_TRAP
|
|
//
|
|
struct _QIT
|
|
{
|
|
HANDLE TrapHandle;
|
|
}
|
|
QIT;
|
|
|
|
//
|
|
// REMOVE_INTERRUPT_TRAP
|
|
//
|
|
struct _RIT
|
|
{
|
|
HANDLE TrapHandle;
|
|
}
|
|
RIT;
|
|
|
|
//
|
|
// CHECK_PORT_USAGE
|
|
//
|
|
struct _CPU
|
|
{
|
|
INTERFACE_TYPE InterfaceType;
|
|
ULONG Port;
|
|
ULONG BusNumber;
|
|
ULONG Length;
|
|
}
|
|
CPU;
|
|
|
|
//
|
|
// CHECK_MEMORY_USAGE
|
|
//
|
|
struct _CMU
|
|
{
|
|
INTERFACE_TYPE InterfaceType;
|
|
ULONG BaseAddress;
|
|
ULONG BusNumber;
|
|
ULONG Length;
|
|
}
|
|
CMU;
|
|
|
|
//
|
|
// CLAIM_RESOURCE
|
|
//
|
|
struct _CR
|
|
{
|
|
ULONG NumberOfResources;
|
|
}
|
|
CR;
|
|
|
|
//
|
|
// Get/Set PCI information
|
|
//
|
|
struct _PCI
|
|
{
|
|
ULONG BusNumber;
|
|
ULONG SlotNumber;
|
|
ULONG Offset;
|
|
ULONG Length;
|
|
}
|
|
PCI;
|
|
}
|
|
CMD_ARGS,
|
|
*PCMD_ARGS;
|
|
|
|
|
|
|