Descrizione dell'interfaccia verso il device driver

La libreria PACKET95.DLL è la DLL di interfacciamento tra il VXD catturatore di pacchetti VPACKET.VXD è le applicazioni che per esso verranno scritte. Esponiamo qui di seguito brevemente le API messe a disposizione dalla DLL.

Le strutture dati di PACKET95

La DLL utilizza due strutture dati fondamentali definite nel file PACKET32.H. Esse sono :

A queste due si affianca una struttura definita in NTDDPACK.H utilizzata per interrogare l’NDIS mediante la funzione di PacketRequest. Ne vedremo in seguito una descrizione.

STRUTTURA PACKET

La struttura PACKET è composta dai campi:

Il campo hEvent è stato inserito per compatibilità però non è utilizzato nelle API.

Il campo Overlapped è utilizzato per gestire le operazioni di tipo asincrono; un esempio del suo utilizzo è mostrato nella funzione PacketReceivePacket.

Questa struttura è già predefinita nell’ SDK di WINDOWS 95. In particolare la Overlapped ha un campo hEvent il quale viene resettato con la opportuna funzione chiamata ResetEvent, quando il pacchetto deve essere ricevuto in maniera asincrona.

La routine del VXD predisposta a ricevere i pacchetti dalla scheda di rete imposta dunque tale evento allo scopo di segnalare il completamento dell’operazione.

Dal punto di vista della applicazione, non occorre andare a vedere se l’evento è settato, poiché WINDOWS 95 mette a disposizione la API GetOverLappedResult che va a controllare la struttura automaticamente.

Il campo Buffer è un campo di tipo puntatore a void e rappresenta il pacchetto vero e proprio, mentre il campo Length dice quanti byte è lungo il buffer medesimo.

Il campo ulBytesReceived dice quanti byte del buffer sono occupati dal pacchetto ricevuto ed infine il campo bIoComplete indica se il pacchetto è stato riempito o no di dati validi da una lettura asincrona. Viene inoltre resettato da una PacketReceivePacket o una PacketSendPacket, mentre vengono settati quando si fa una PacketWaitPacket.

STRUTTURA ADAPTER

è la struttura che descrive un adattatore ed è composta dei campi:

Il campo hFile mantiene un puntatore all’handle del VXD : infatti per comunicare direttamente con esso occorre dunque effettuare delle DeviceIOControl utilizzando questo handle. Comunque è fortemente sconsigliato colloquiare direttamente con il VXD.

Infine il rimanente campo SymbolicLink il quale altro non è che una stringa contenente il nome dell’adattatore aperto.

STRUTTURA PACKET_OID_DATA

Tale struttura è composta dai campi seguenti:

Il campo Oid è un identificatore numerico che specifica il tipo di query/set da effettuare sull’adattatore mediante la funzione PacketRequest. I possibili valori sono definiti nel file di include NTDDNDIS.H : con tali valori è possibile ad esempio richiedere lo stato dei contatori di errore, l’indirizzo MAC della scheda, la lista dei gruppi multicast programmati sulla scheda e altre informazioni.

Il campo Length dice quale è la lunghezza del campo Data e quest’ultimo infine contiene le sequenze di byte formite a seguito di query o da fornire per una operazione di set al NDIS. La sua lunghezza è funzione del tipo di operazione da realizzare.

Le routine di PACKET95

La DLL PACKET95 fornisce le funzioni necessarie per spedire e ricevere un pacchetto, interrogare e impostare i parametri di un adattatore di rete, aprire e chiudere un adattatore ed infine gestire l’allocazione dinamica delle strutture di tipo PACKET.

Qui di seguito ne riportiamo la lista :