Condividi tramite


Struttura NCB (nb30.h)

[Netbios non è supportato in Windows Vista, Windows Server 2008 e versioni successive del sistema operativo]

La struttura NCB rappresenta un blocco di controllo di rete. Contiene informazioni sul comando da eseguire, una routine post facoltativa, un handle eventi facoltativo e un puntatore a un buffer usato per i messaggi o altri dati. Un puntatore a questa struttura viene passato alla funzione Netbios .

Sintassi

typedef struct _NCB {
  UCHAR  ncb_command;
  UCHAR  ncb_retcode;
  UCHAR  ncb_lsn;
  UCHAR  ncb_num;
  PUCHAR ncb_buffer;
  WORD   ncb_length;
  UCHAR  ncb_callname[NCBNAMSZ];
  UCHAR  ncb_name[NCBNAMSZ];
  UCHAR  ncb_rto;
  UCHAR  ncb_sto;
  void()(_NCB *)  * ncb_post;
  UCHAR  ncb_lana_num;
  UCHAR  ncb_cmd_cplt;
#if ...
  UCHAR  ncb_reserve[18];
#else
  UCHAR  ncb_reserve[10];
#endif
  HANDLE ncb_event;
} NCB, *PNCB;

Members

ncb_command

Specifica il codice del comando e un flag che indica se la struttura NCB viene elaborata in modo asincrono. Il bit più significativo contiene il flag. Se la costante ASYNCH viene combinata con un codice di comando (usando l'operatore OR), la struttura NCB viene elaborata in modo asincrono. Sono supportati i codici di comando seguenti.

Codice Significato
NCBACTION

Windows Server 2003, Windows XP, Windows 2000 e Windows NT: Abilita le estensioni all'interfaccia di trasporto. NCBACTION viene mappato a TdiAction. Quando viene specificato questo codice, il membro ncb_buffer punta a un buffer da riempire con una struttura ACTION_HEADER , che è facoltativamente seguita dai dati. I comandi NCBACTION non possono essere annullati tramite NCBCANCEL. NCBACTION non è un comando NetBIOS 3.0 standard.

NCBADDGRNAME Aggiunge un nome di gruppo alla tabella dei nomi locale. Questo nome non può essere usato da un altro processo nella rete come nome univoco, ma può essere aggiunto da chiunque come nome di gruppo.
NCBADDNAME Aggiunge un nome univoco alla tabella dei nomi locale. Il driver TDI garantisce che il nome sia univoco nella rete.
NCBASTAT Recupera lo stato di una scheda locale o remota. Quando viene specificato questo codice, il membro ncb_buffer punta a un buffer da riempire con una struttura ADAPTER_STATUS , seguita da una matrice di strutture NAME_BUFFER.
NCBCALL Apre una sessione con un altro nome.
NCBCANCEL Annulla un comando precedente in sospeso.
NCBCHAINSEND Invia il contenuto di due buffer di dati al partner sessione specificato.
NCBCHAINSENDNA Invia il contenuto di due buffer di dati al partner sessione specificato e non attende il riconoscimento.
NCBDELNAME Elimina un nome dalla tabella nome locale.
NCBDGRECV Riceve un datagram da qualsiasi nome.
NCBDGRECVBC Riceve un datagram di trasmissione da qualsiasi nome.
NCBDGSEND Invia datagram a un nome specificato.
NCBDGSENDBC Invia un datagram di trasmissione a ogni host nella rete locale (LAN).
NCBENUM

Windows Server 2003, Windows XP, Windows 2000 e Windows NT: Enumera i numeri dell'adattatore LAN (LANA). Quando viene specificato questo codice, il membro ncb_buffer punta a un buffer da riempire con una struttura LANA_ENUM. NCBENUM non è un comando NetBIOS 3.0 standard.

NCBFINDNAME Determina la posizione di un nome nella rete. Quando viene specificato questo codice, il membro ncb_buffer punta a un buffer da riempire con una struttura FIND_NAME_HEADER seguita da una o più strutture FIND_NAME_BUFFER .
NCBHANGUP Chiude una sessione specificata.
NCBLANSTALERT

Windows Server 2003, Windows XP, Windows 2000 e Windows NT: Notifica all'utente di errori LAN che durano più di un minuto.

NCBLISTEN Consente di aprire una sessione con un altro nome (locale o remoto).
NCBRECV Riceve i dati dal partner sessione specificato.
NCBRECVANY Riceve i dati da qualsiasi sessione corrispondente a un nome specificato.
NCBRESET Reimposta un adattatore LAN. Un adattatore deve essere reimpostato prima di poter accettare qualsiasi altro comando NCB che specifica lo stesso numero nel membro ncb_lana_num .

Usare i valori seguenti per specificare il modo in cui le risorse devono essere liberate:

  • Se ncb_lsn non è 0x00, tutte le risorse associate a ncb_lana_num devono essere liberate.
  • Se ncb_lsn è 0x00, tutte le risorse associate a ncb_lana_num devono essere liberate e le nuove risorse devono essere allocate. Il byte ncb_callname[0] specifica il numero massimo di sessioni e il byte ncb_callname[2] specifica il numero massimo di nomi. Valore diverso da zero per il byte ncb_callname[3] richiede che l'applicazione usi NAME_NUMBER_1.
NCBSEND Invia i dati al partner sessione specificato.
NCBSENDNA Invia i dati al partner sessione specificato e non attende il riconoscimento.
NCBSSTAT Recupera lo stato della sessione. Quando questo valore viene specificato, il membro ncb_buffer punta a un buffer da riempire con una struttura SESSION_HEADER , seguita da una o più strutture SESSION_BUFFER .
NCBTRACE Attiva o disattiva la traccia NCB.

Questo comando non è supportato.

NCBUNLINK Scollega l'adattatore.

Questo comando viene fornito per la compatibilità con le versioni precedenti di NetBIOS. Non ha alcun effetto in Windows.

ncb_retcode

Specifica il codice restituito. Questo valore è impostato su NRC_PENDING mentre un'operazione asincrona è in corso. Il sistema restituisce uno dei valori seguenti:

Valore Significato
NRC_GOODRET Operazione completata.
NRC_BUFLEN È stata fornita una lunghezza del buffer illegale.
NRC_ILLCMD È stato fornito un comando illegale.
NRC_CMDTMO Il comando è stato timeout.
NRC_INCOMP Il messaggio è incompleto. L'applicazione deve eseguire un altro comando.
NRC_BADDR L'indirizzo del buffer è stato illegale.
NRC_SNUMOUT Il numero di sessione non è compreso nell'intervallo.
NRC_NORES Nessuna risorsa disponibile.
NRC_SCLOSED La sessione è stata chiusa.
NRC_CMDCAN Il comando è stato annullato.
NRC_DUPNAME Un nome duplicato esiste nella tabella nome locale.
NRC_NAMTFUL La tabella dei nomi è stata completa.
NRC_ACTSES Il comando è stato completato; il nome include sessioni attive e non è più registrato.
NRC_LOCTFUL La tabella sessione locale era completa.
NRC_REMTFUL La tabella di sessione remota era completa. La richiesta di apertura di una sessione è stata rifiutata.
NRC_ILLNN È stato specificato un numero di nome non valido.
NRC_NOCALL Il sistema non ha trovato il nome chiamato.
NRC_NOWILD I caratteri jolly non sono consentiti nel membro ncb_name .
NRC_INUSE Il nome era già in uso nella scheda remota.
NRC_NAMERR Il nome è stato eliminato.
NRC_SABORT La sessione è stata terminata in modo anomalo.
NRC_NAMCONF È stato rilevato un conflitto di nomi.
NRC_IFBUSY L'interfaccia era occupato.
NRC_TOOMANY Troppi comandi erano in sospeso; L'applicazione può riprovare il comando in un secondo momento.
NRC_BRIDGE Il membro ncb_lana_num non ha specificato un numero di rete valido.
NRC_CANOCCR Il comando è stato completato durante l'esecuzione di un'operazione di annullamento.
NRC_CANCEL Il comando NCBCANCEL non è valido; il comando non è stato annullato.
NRC_DUPENV Il nome è stato definito da un altro processo locale.
NRC_ENVNOTDEF L'ambiente non è stato definito. È necessario eseguire un comando di reimpostazione.
NRC_OSRESNOTAV Le risorse del sistema operativo sono state esaurite. L'applicazione può riprovare il comando in un secondo momento.
NRC_MAXAPPS Il numero massimo di applicazioni è stato superato.
NRC_NOSAPS Non sono stati disponibili punti di accesso al servizio (SAP) per NetBIOS.
NRC_NORESOURCES Le risorse richieste non erano disponibili.
NRC_INVADDRESS L'indirizzo NCB non è valido.
NRC_INVDDID Il DDID NCB non è valido.

Questo codice restituito non fa parte della specifica IBM NetBIOS 3.0 e non viene restituito nella struttura NCB . Viene invece restituito dalla funzione Netbios .

NRC_LOCKFAIL Tentativo di bloccare l'area utente non riuscita.
NRC_OPENERR Si è verificato un errore durante un'operazione aperta eseguita dal driver del dispositivo. Questo codice di errore non fa parte della specifica NetBIOS 3.0.
NRC_SYSTEM Si è verificato un errore di sistema.
NRC_PENDING Non è ancora stata completata un'operazione asincrona.

ncb_lsn

Identifica il numero di sessione locale. Questo numero identifica in modo univoco una sessione all'interno di un ambiente. Questo numero viene restituito dalla funzione Netbios dopo un comando NCBCALL riuscito.

ncb_num

Specifica il numero per il nome di rete locale. Questo numero viene restituito da Netbios dopo un comando NCBADDNAME o NCBADDGRNAME. Questo numero, non il nome, deve essere usato con tutti i comandi del datagram e per i comandi NCBRECVANY .

Il numero per NAME_NUMBER_1 è sempre 0x01. La funzione Netbios assegna valori nell'intervallo 0x02 a 0xFE per i nomi rimanenti.

ncb_buffer

Puntatore al buffer dei messaggi. Il buffer deve avere accesso in scrittura. I relativi usi sono i seguenti:

Comando Scopo
NCBSEND Contiene il messaggio da inviare.
NCBRECV Riceve il messaggio.
NCBSSTAT Riceve le informazioni sullo stato richieste.

ncb_length

Specifica le dimensioni, in byte, del buffer dei messaggi. Per i comandi di ricezione, questo membro viene impostato dalla funzione Netbios per indicare il numero di byte ricevuti.

Se la lunghezza del buffer non è corretta, la funzione Netbios restituisce il codice di errore NRC_BUFLEN .

ncb_callname[NCBNAMSZ]

Specifica il nome dell'applicazione remota. Gli spazi finali devono essere specificati per rendere la lunghezza della stringa uguale a NCBNAMSZ.

ncb_name[NCBNAMSZ]

Specifica il nome in base al quale è nota l'applicazione. Gli spazi finali devono essere specificati per rendere la lunghezza della stringa uguale a NCBNAMSZ.

ncb_rto

Specifica il periodo di timeout per le operazioni di ricezione, in unità di 500 millisecondi, per la sessione. Un valore pari a zero non implica alcun timeout. Specificare con il comando NCBCALL o NCBLISTEN . Influisce sui comandi NCBRECV successivi.

ncb_sto

Specifica il periodo di timeout per le operazioni di invio, in unità di 500 millisecondi, per la sessione. Un valore pari a zero non implica alcun timeout. Specificare con il comando NCBCALL o NCBLISTEN . Influisce sui comandi NCBSEND e NCBCHAINSEND successivi.

ncb_post

Specifica l'indirizzo della routine post da chiamare al termine del comando asincrono. La routine post è definita come:

NCB_POST PostRoutine( PNCB pncb );

dove il parametro pncb è un puntatore alla struttura NCB completata.

ncb_lana_num

Specifica il numero di adattatore LAN. Questo numero in base zero corrisponde a un determinato provider di trasporto che utilizza una scheda scheda LAN specifica.

ncb_cmd_cplt

Specifica il flag di completamento del comando. Questo valore corrisponde al membro ncb_retcode .

ncb_reserve[18]

Riservati; deve essere zero.

La lunghezza, X, della matrice ncb_reserve dipende dall'architettura di sistema. Per i sistemi a 64 bit, la matrice contiene 18 elementi. In caso contrario, la matrice contiene 10 elementi.

ncb_reserve[10]

Riservati; deve essere zero.

La lunghezza, X, della matrice ncb_reserve dipende dall'architettura di sistema. Per i sistemi a 64 bit, la matrice contiene 18 elementi. In caso contrario, la matrice contiene 10 elementi.

ncb_event

Specifica un handle per un oggetto evento impostato sullo stato non firmato quando viene accettato un comando asincrono e viene impostato sullo stato segnalato al termine del comando asincrono. L'evento viene segnalato se la funzione Netbios restituisce un valore diverso da zero. Per la sincronizzazione devono essere usati solo gli eventi di reimpostazione manuale. Un evento specificato non deve essere associato a più di un comando asincrono attivo.

Il membro ncb_event deve essere zero se il membro ncb_command non ha il flag ASYNCH impostato o se ncb_post è diverso da zero. In caso contrario, Netbios restituisce il codice di errore NRC_ILLCMD .

Commenti

L'uso di ncb_event per inviare richieste asincrone richiede meno risorse di sistema rispetto all'uso di ncb_post. Inoltre, quando ncb_event è diverso da zero, la richiesta in sospeso viene annullata se il thread termina prima dell'elaborazione della richiesta. Ciò non vale per le richieste asincrone inviate tramite ncb_post.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Intestazione nb30.h

Vedi anche

ACTION_HEADER

ADAPTER_STATUS

FIND_NAME_BUFFER

FIND_NAME_HEADER

LANA_ENUM

NAME_BUFFER

Strutture NetBIOS

Netbios

SESSION_BUFFER

SESSION_HEADER

Panoramica dell'interfaccia NetBIOS