Compartilhar via


Estrutura NCB (nb30.h)

[Não há suporte para o Netbios no Windows Vista, no Windows Server 2008 e nas versões subsequentes do sistema operacional]

A estrutura NCB representa um bloco de controle de rede. Ele contém informações sobre o comando a ser executado, uma rotina de postagem opcional, um identificador de evento opcional e um ponteiro para um buffer que é usado para mensagens ou outros dados. Um ponteiro para essa estrutura é passado para a função Netbios .

Sintaxe

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;

Membros

ncb_command

Especifica o código de comando e um sinalizador que indica se a estrutura NCB é processada de forma assíncrona. O bit mais significativo contém o sinalizador . Se a constante ASYNCH for combinada com um código de comando (usando o operador OR), a estrutura NCB será processada de forma assíncrona. Há suporte para os códigos de comando a seguir.

Código Significado
NCBACTION

Windows Server 2003, Windows XP, Windows 2000 e Windows NT: habilita extensões para a interface de transporte. NCBACTION é mapeado para TdiAction. Quando esse código é especificado, o membro ncb_buffer aponta para um buffer a ser preenchido com uma estrutura ACTION_HEADER , que é opcionalmente seguida por dados. Os comandos NCBACTION não podem ser cancelados usando NCBCANCEL. NCBACTION não é um comando Padrão NetBIOS 3.0.

NCBADDGRNAME Adiciona um nome de grupo à tabela de nomes local. Esse nome não pode ser usado por outro processo na rede como um nome exclusivo, mas pode ser adicionado por qualquer pessoa como um nome de grupo.
NCBADDNAME Adiciona um nome exclusivo à tabela de nomes local. O driver TDI garante que o nome seja exclusivo em toda a rede.
NCBASTAT Recupera o status de um adaptador local ou remoto. Quando esse código é especificado, o membro ncb_buffer aponta para um buffer a ser preenchido com uma estrutura ADAPTER_STATUS , seguida por uma matriz de estruturas NAME_BUFFER .
NCBCALL Abre uma sessão com outro nome.
NCBCANCEL Cancela um comando pendente anterior.
NCBCHAINSEND Envia o conteúdo de dois buffers de dados para o parceiro de sessão especificado.
NCBCHAINSENDNA Envia o conteúdo de dois buffers de dados para o parceiro de sessão especificado e não aguarda a confirmação.
NCBDELNAME Exclui um nome da tabela de nomes local.
NCBDGRECV Recebe um datagrama de qualquer nome.
NCBDGRECVBC Recebe um datagrama de difusão de qualquer nome.
NCBDGSEND Envia datagrama para um nome especificado.
NCBDGSENDBC Envia um datagrama de difusão para cada host na LAN (rede local).
NCBENUM

Windows Server 2003, Windows XP, Windows 2000 e Windows NT: enumera números de LANA (adaptador LAN). Quando esse código é especificado, o membro ncb_buffer aponta para um buffer a ser preenchido com uma estrutura LANA_ENUM. NCBENUM não é um comando Padrão NetBIOS 3.0.

NCBFINDNAME Determina o local de um nome na rede. Quando esse código é especificado, o membro ncb_buffer aponta para um buffer a ser preenchido com uma estrutura FIND_NAME_HEADER seguida por uma ou mais estruturas FIND_NAME_BUFFER .
NCBHANGUP Fecha uma sessão especificada.
NCBLANSTALERT

Windows Server 2003, Windows XP, Windows 2000 e Windows NT: notifica o usuário sobre falhas de LAN que duram mais de um minuto.

NCBLISTEN Permite que uma sessão seja aberta com outro nome (local ou remoto).
NCBRECV Recebe dados do parceiro de sessão especificado.
NCBRECVANY Recebe dados de qualquer sessão correspondente a um nome especificado.
NCBRESET Redefine um adaptador lan. Um adaptador deve ser redefinido antes de aceitar qualquer outro comando NCB que especifique o mesmo número no membro ncb_lana_num .

Use os seguintes valores para especificar como os recursos devem ser liberados:

  • Se ncb_lsn não for 0x00, todos os recursos associados a ncb_lana_num serão liberados.
  • Se ncb_lsn for 0x00, todos os recursos associados a ncb_lana_num serão liberados e novos recursos deverão ser alocados. O byte ncb_callname[0] especifica o número máximo de sessões e o byte ncb_callname[2] especifica o número máximo de nomes. Um valor diferente de zero para as solicitações de bytes ncb_callname[3] que o aplicativo usa NAME_NUMBER_1.
NCBSEND Envia dados para o parceiro de sessão especificado.
NCBSENDNA Envia dados para o parceiro de sessão especificado e não aguarda a confirmação.
NCBSSTAT Recupera o status da sessão. Quando esse valor é especificado, o membro ncb_buffer aponta para um buffer a ser preenchido com uma estrutura SESSION_HEADER , seguida por uma ou mais estruturas SESSION_BUFFER .
NCBTRACE Ativa ou desativa o rastreamento NCB.

Não há suporte para esse comando.

NCBUNLINK Desvincula o adaptador.

Esse comando é fornecido para compatibilidade com versões anteriores do NetBIOS. Ele não tem efeito no Windows.

ncb_retcode

Especifica o código de retorno. Esse valor é definido como NRC_PENDING enquanto uma operação assíncrona está em andamento. O sistema retorna um dos seguintes valores:

Valor Significado
NRC_GOODRET A operação foi realizada com êxito.
NRC_BUFLEN Um comprimento de buffer inválido foi fornecido.
NRC_ILLCMD Um comando ilegal foi fornecido.
NRC_CMDTMO O comando atingiu o tempo limite.
NRC_INCOMP A mensagem estava incompleta. O aplicativo deve emitir outro comando.
NRC_BADDR O endereço do buffer era ilegal.
NRC_SNUMOUT O número da sessão estava fora do intervalo.
NRC_NORES Nenhum recurso estava disponível.
NRC_SCLOSED A sessão foi fechada.
NRC_CMDCAN O comando foi cancelado.
NRC_DUPNAME Um nome duplicado existia na tabela de nomes local.
NRC_NAMTFUL A tabela de nomes estava cheia.
NRC_ACTSES O comando foi concluído; o nome tem sessões ativas e não está mais registrado.
NRC_LOCTFUL A tabela de sessão local estava cheia.
NRC_REMTFUL A tabela de sessão remota estava cheia. A solicitação para abrir uma sessão foi rejeitada.
NRC_ILLNN Um número de nome inválido foi especificado.
NRC_NOCALL O sistema não encontrou o nome que foi chamado.
NRC_NOWILD Curingas não são permitidos no membro ncb_name .
NRC_INUSE O nome já estava em uso no adaptador remoto.
NRC_NAMERR O nome foi excluído.
NRC_SABORT A sessão terminou anormalmente.
NRC_NAMCONF Um conflito de nomes foi detectado.
NRC_IFBUSY A interface estava ocupada.
NRC_TOOMANY Muitos comandos foram excelentes; o aplicativo pode repetir o comando mais tarde.
NRC_BRIDGE O membro ncb_lana_num não especificou um número de rede válido.
NRC_CANOCCR O comando foi concluído enquanto uma operação de cancelamento estava ocorrendo.
NRC_CANCEL O comando NCBCANCEL não era válido; o comando não foi cancelado.
NRC_DUPENV O nome foi definido por outro processo local.
NRC_ENVNOTDEF O ambiente não foi definido. Um comando de redefinição deve ser emitido.
NRC_OSRESNOTAV Os recursos do sistema operacional foram esgotados. O aplicativo pode repetir o comando mais tarde.
NRC_MAXAPPS O número máximo de aplicativos foi excedido.
NRC_NOSAPS Nenhum SAPs (pontos de acesso de serviço) estava disponível para NetBIOS.
NRC_NORESOURCES Os recursos solicitados não estavam disponíveis.
NRC_INVADDRESS O endereço NCB não era válido.
NRC_INVDDID O DDID do NCB era inválido.

Esse código de retorno não faz parte da especificação IBM NetBIOS 3.0 e não é retornado na estrutura NCB . Em vez disso, ele é retornado pela função Netbios .

NRC_LOCKFAIL Falha na tentativa de bloquear a área do usuário.
NRC_OPENERR Ocorreu um erro durante uma operação aberta que está sendo executada pelo driver do dispositivo. Esse código de erro não faz parte da especificação NetBIOS 3.0.
NRC_SYSTEM Ocorreu um erro do sistema.
NRC_PENDING Uma operação assíncrona ainda não foi concluída.

ncb_lsn

Identifica o número da sessão local. Esse número identifica exclusivamente uma sessão em um ambiente. Esse número é retornado pela função Netbios após um comando NCBCALL bem-sucedido.

ncb_num

Especifica o número do nome da rede local. Esse número é retornado pelo Netbios após um comando NCBADDNAME ou NCBADDGRNAME bem-sucedido. Esse número, não o nome, deve ser usado com todos os comandos de datagram e para comandos NCBRECVANY .

O número de NAME_NUMBER_1 é sempre 0x01. A função Netbios atribui valores no intervalo 0x02 a 0xFE para os nomes restantes.

ncb_buffer

Ponteiro para o buffer de mensagens. O buffer deve ter acesso de gravação. Seus usos são os seguintes:

Comando Finalidade
NCBSEND Contém a mensagem a ser enviada.
NCBRECV Recebe a mensagem.
NCBSSTAT Recebe as informações de status solicitadas.

ncb_length

Especifica o tamanho, em bytes, do buffer de mensagem. Para comandos de recebimento, esse membro é definido pela função Netbios para indicar o número de bytes recebidos.

Se o comprimento do buffer estiver incorreto, a função Netbios retornará o código de erro NRC_BUFLEN .

ncb_callname[NCBNAMSZ]

Especifica o nome do aplicativo remoto. Caracteres de espaço à direita devem ser fornecidos para tornar o comprimento da cadeia de caracteres igual a NCBNAMSZ.

ncb_name[NCBNAMSZ]

Especifica o nome pelo qual o aplicativo é conhecido. Caracteres de espaço à direita devem ser fornecidos para tornar o comprimento da cadeia de caracteres igual a NCBNAMSZ.

ncb_rto

Especifica o período de tempo limite para operações de recebimento, em unidades de 500 milissegundos, para a sessão. Um valor zero implica que não há tempo limite. Especifique com o comando NCBCALL ou NCBLISTEN . Afeta os comandos NCBRECV subsequentes.

ncb_sto

Especifica o período de tempo limite para operações de envio, em unidades de 500 milissegundos, para a sessão. Um valor zero implica que não há tempo limite. Especifique com o comando NCBCALL ou NCBLISTEN . Afeta os comandos NCBSEND e NCBCHAINSEND subsequentes.

ncb_post

Especifica o endereço da rotina de postagem a ser chamado quando o comando assíncrono é concluído. A rotina de postagem é definida como:

NCB_POST PostRoutine( PNCB pncb );

em que o parâmetro pncb é um ponteiro para a estrutura NCB concluída.

ncb_lana_num

Especifica o número do adaptador lan. Esse número baseado em zero corresponde a um provedor de transporte específico usando uma placa de adaptador lan específica.

ncb_cmd_cplt

Especifica o sinalizador de comando completo. Esse valor é o mesmo que o membro ncb_retcode .

ncb_reserve[18]

Reservados; deve ser zero.

O comprimento X da matriz ncb_reserve depende da arquitetura do sistema. Para sistemas de 64 bits, a matriz contém 18 elementos. Caso contrário, a matriz contém 10 elementos.

ncb_reserve[10]

Reservados; deve ser zero.

O comprimento X da matriz ncb_reserve depende da arquitetura do sistema. Para sistemas de 64 bits, a matriz contém 18 elementos. Caso contrário, a matriz contém 10 elementos.

ncb_event

Especifica um identificador para um objeto de evento definido como o estado não atribuído quando um comando assíncrono é aceito e é definido como o estado sinalizado quando o comando assíncrono é concluído. O evento será sinalizado se a função Netbios retornar um valor diferente de zero. Somente eventos de redefinição manual devem ser usados para sincronização. Um evento especificado não deve ser associado a mais de um comando assíncrono ativo.

O membro ncb_event deverá ser zero se o membro ncb_command não tiver o sinalizador ASYNCH definido ou se ncb_post não for zero. Caso contrário, Netbios retornará o código de erro NRC_ILLCMD .

Comentários

Usar ncb_event para emitir solicitações assíncronas requer menos recursos do sistema do que usar ncb_post. Além disso, quando ncb_event for diferente de zero, a solicitação pendente será cancelada se o thread for encerrado antes que a solicitação seja processada. Isso não é verdadeiro para solicitações assíncronas enviadas usando ncb_post.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho nb30.h

Confira também

ACTION_HEADER

ADAPTER_STATUS

FIND_NAME_BUFFER

FIND_NAME_HEADER

LANA_ENUM

NAME_BUFFER

Estruturas NetBIOS

Netbios

SESSION_BUFFER

SESSION_HEADER

Visão geral da interface NetBIOS