#ifndef _DRIVER_H_04802_BASHBD_1UIWQ1_8239_1NJKDH832_901_
#define _DRIVER_H_04802_BASHBD_1UIWQ1_8239_1NJKDH832_901_

/*#if (defined(NDIS50) || defined(NDIS51))
	typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
#else
	#if NDIS40
		typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
	#else
		typedef NDIS30_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
	#endif
#endif
	typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS; */

#ifdef __cplusplus
extern "C"
{
#endif

//#define DNDIS40 1

#include "ntddk.h"
#include "ndis.h"

#ifdef __cplusplus
}
#endif

typedef struct _EXAMPLE_DEVICE_EXTENSION
{
	PDEVICE_OBJECT	fdo;
	UNICODE_STRING	ustrSymLinkName; // L"\\DosDevices\\Example"
} EXAMPLE_DEVICE_EXTENSION, *PEXAMPLE_DEVICE_EXTENSION;

struct _my_struct { 
	ULONG myData; 
	NDIS_STATUS Status; 
} my_struct; 

VOID Unload (IN PDRIVER_OBJECT Driver);
VOID NdisOpenAdapterComplete(IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_STATUS Status, 
						     IN NDIS_STATUS OpenErrorCode);
VOID NdisCloseAdapterComplete(IN NDIS_HANDLE ProtocolBindingContext, 
								  IN NDIS_STATUS Status);
NDIS_STATUS NdisReceive(IN NDIS_HANDLE ProtocolBindingContext, // наша структура 
						IN NDIS_HANDLE MacReceiveContext, 
						IN PVOID pHeaderBuffer, //заголовок Ethernet-пакета 
						IN UINT HeaderBufferSize, 
						IN PVOID pLookaheadBuffer, // указатель на весь пакет 
						IN UINT LookaheadBufferSize, 
						IN UINT PacketSize);
VOID NdisSendComplete(IN NDIS_HANDLE ProtocolBindingContext, 
				       IN PNDIS_PACKET Packet, 
				       IN NDIS_STATUS Status);
VOID NdisTransferDataComplete(IN NDIS_HANDLE ProtocolBindingContext, 
							  IN PNDIS_PACKET Packet, 
							  IN NDIS_STATUS Status, 
							  IN UINT BytesTransfered);
VOID NdisReceiveComplete (IN NDIS_HANDLE ProtocolBindingContext);
VOID NdisStatus (IN NDIS_HANDLE ProtocolBindingContext, 
				 IN NDIS_STATUS Status, 
				 IN PVOID StatusBuffer, 
				 IN UINT StausBufferSize);
VOID NdisStatusComplete (IN NDIS_HANDLE ProtocolBindingContext);
VOID NdisResetComplete (IN NDIS_HANDLE ProtocolBindingContext, 
						IN NDIS_STATUS Status);
VOID NdisRequestComplete(IN NDIS_HANDLE ProtocolBindingContext, 
						 IN PNDIS_REQUEST NdisReq, IN NDIS_STATUS Status);
VOID NdisBindAdapter(PNDIS_STATUS Status,
					 NDIS_HANDLE BindContext,
					 PNDIS_STRING DeviceName,
					 PVOID SystemSpecific1,
					 PVOID SystemSpecific2); 
VOID NdisUnbindAdapter(OUT PNDIS_STATUS              Status,
					   IN NDIS_HANDLE               ProtocolBindingContext,
					   IN NDIS_HANDLE               UnbindContext);
VOID NdisProtoUnload(VOID);
NDIS_STATUS NdisPnPEvent(IN NDIS_HANDLE ProtocolBindingContext, 
						 IN PNET_PNP_EVENT PnPEvent);
INT NdisReceivePacket(IN NDIS_HANDLE ProtocolBindingContext, 
					  IN PNDIS_PACKET Packet);


// Определяем собственные коды IOCTL, с которыми можно будет
// обращаться к драйверу при помощи вызова DeviceIoControl.
// Определение макроса CTL_CODE можно найти в файле DDK Winioctl.h.
// Там же можно найти и численные значения, скрывающиеся под именами
// METHOD_BUFFERED и METHOD_NEITHER.

// Внимание! Текст приведенный ниже должен войти в файл Ioctl.h,
// который будет необходим для компиляции тестового приложения.
// (Разумеется, за исключением последней строки с "#endif".)

/*#define IOCTL_PRINT_DEBUG_MESS CTL_CODE( \
	FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_CHANGE_IRQL CTL_CODE(\
	FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_MAKE_SYSTEM_CRASH CTL_CODE( \
	FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_TOUCH_PORT_378H CTL_CODE( \
	FILE_DEVICE_UNKNOWN, 0x804, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_SEND_BYTE_TO_USER CTL_CODE( \
	FILE_DEVICE_UNKNOWN, 0x805, METHOD_BUFFERED, FILE_ANY_ACCESS) */

// Вариант :
//#define IOCTL_SEND_BYTE_TO_USER CTL_CODE( \
//    FILE_DEVICE_UNKNOWN, 0x805, METHOD_NEITHER, FILE_ANY_ACCESS)
#endif

