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:
|
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