다음을 통해 공유


NCB 구조체(nb30.h)

[Netbios 는 Windows Vista, Windows Server 2008 및 운영 체제의 후속 버전에서 지원되지 않습니다.]

NCB 구조체는 네트워크 제어 블록을 나타냅니다. 수행할 명령에 대한 정보, 선택적 게시물 루틴, 선택적 이벤트 핸들 및 메시지 또는 기타 데이터에 사용되는 버퍼에 대한 포인터가 포함되어 있습니다. 이 구조체에 대한 포인터는 Netbios 함수에 전달됩니다.

구문

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;

멤버

ncb_command

명령 코드와 NCB 구조체가 비동기적으로 처리되는지 여부를 나타내는 플래그를 지정합니다. 가장 중요한 비트에는 플래그가 포함됩니다. ASYNCH 상수가 명령 코드와 결합된 경우(OR 연산자를 사용하여) NCB 구조체가 비동기적으로 처리됩니다. 지원되는 명령 코드는 다음과 같습니다.

코드 의미
NCBACTION

Windows Server 2003, Windows XP, Windows 2000 및 Windows NT: 전송 인터페이스에 대한 확장을 사용하도록 설정합니다. NCBACTION은 TdiAction에 매핑됩니다. 이 코드를 지정하면 ncb_buffer 멤버가 버퍼를 가리키고 ACTION_HEADER 구조체로 채워지도록 하며, 선택적으로 데이터가 뒤따릅니다. NCBCANCEL을 사용하여 NCBACTION 명령을 취소할 수 없습니다. NCBACTION은 표준 NetBIOS 3.0 명령이 아닙니다.

NCBADDGRNAME 로컬 이름 테이블에 그룹 이름을 추가합니다. 이 이름은 네트워크의 다른 프로세스에서 고유한 이름으로 사용할 수 없지만 누구나 그룹 이름으로 추가할 수 있습니다.
NCBADDNAME 로컬 이름 테이블에 고유한 이름을 추가합니다. TDI 드라이버는 네트워크 전체에서 이름이 고유하도록 합니다.
NCBASTAT 로컬 또는 원격 어댑터의 상태 검색합니다. 이 코드를 지정하면 ncb_buffer 멤버는 ADAPTER_STATUS 구조체로 채워지는 버퍼를 가리킨 다음 NAME_BUFFER구조체 배열을 가리킵니다.
NCBCALL 다른 이름의 세션을 엽니다.
NCBCANCEL 보류 중인 이전 명령을 취소합니다.
NCBCHAINSEND 지정된 세션 파트너에게 두 데이터 버퍼의 콘텐츠를 보냅니다.
NCBCHAINSENDNA 지정된 세션 파트너에게 두 데이터 버퍼의 내용을 보내고 승인을 기다리지 않습니다.
NCBDELNAME 로컬 이름 테이블에서 이름을 삭제합니다.
NCBDGRECV 모든 이름에서 데이터그램을 받습니다.
NCBDGRECVBC 모든 이름에서 브로드캐스트 데이터그램을 받습니다.
NCBDGSEND 지정된 이름으로 데이터그램을 보냅니다.
NCBDGSENDBC LAN(로컬 영역 네트워크)의 모든 호스트에 브로드캐스트 데이터그램을 보냅니다.
NCBENUM

Windows Server 2003, Windows XP, Windows 2000 및 Windows NT: LANA(LAN 어댑터) 번호를 열거합니다. 이 코드를 지정하면 ncb_buffer 멤버가 버퍼를 가리키고 LANA_ENUM 구조체로 채워집니다. NCBENUM은 표준 NetBIOS 3.0 명령이 아닙니다.

NCBFINDNAME 네트워크에서 이름의 위치를 결정합니다. 이 코드를 지정하면 ncb_buffer 멤버는 버퍼를 가리키고 FIND_NAME_HEADER 구조체와 하나 이상의 FIND_NAME_BUFFER 구조체로 채워집니다.
NCBHANGUP 지정된 세션을 닫습니다.
NCBLANSTALERT

Windows Server 2003, Windows XP, Windows 2000 및 Windows NT: 사용자에게 1분 이상 지속되는 LAN 오류를 알 수 있습니다.

NCBLISTEN 다른 이름(로컬 또는 원격)으로 세션을 열 수 있습니다.
NCBRECV 지정된 세션 파트너로부터 데이터를 받습니다.
NCBRECVANY 지정된 이름에 해당하는 모든 세션에서 데이터를 받습니다.
NCBRESET LAN 어댑터를 다시 설정합니다. 어댑터는 ncb_lana_num 멤버에서 동일한 숫자를 지정하는 다른 NCB 명령을 수락하려면 먼저 다시 설정 해야 합니다.

다음 값을 사용하여 리소스를 해제하는 방법을 지정합니다.

  • ncb_lsn 0x00 않으면 ncb_lana_num 연결된 모든 리소스가 해제됩니다.
  • ncb_lsn 0x00 경우 ncb_lana_num 연결된 모든 리소스를 해제하고 새 리소스를 할당해야 합니다. ncb_callname[0] 바이트는 최대 세션 수를 지정하고 ncb_callname[2] 바이트는 최대 이름 수를 지정합니다. 애플리케이션에서 NAME_NUMBER_1 사용하는ncb_callname[3] 바이트 요청에 대한 0이 아닌 값입니다.
NCBSEND 지정된 세션 파트너에게 데이터를 보냅니다.
NCBSENDNA 지정된 세션 파트너에게 데이터를 보내고 승인을 기다리지 않습니다.
NCBSSTAT 세션의 상태 검색합니다. 이 값을 지정하면 ncb_buffer 멤버는 SESSION_HEADER 구조체 로 채워지는 버퍼를 가리킨 다음 하나 이상의 SESSION_BUFFER 구조체를 가리킵니다.
NCBTRACE NCB 추적을 활성화하거나 비활성화합니다.

이 명령은 지원되지 않습니다.

NCBUNLINK 어댑터의 연결을 해제합니다.

이 명령은 이전 버전의 NetBIOS와의 호환성을 위해 제공됩니다. Windows에는 영향을 주지 않습니다.

ncb_retcode

반환 코드를 지정합니다. 이 값은 비동기 작업이 진행되는 동안 NRC_PENDING 설정됩니다. 시스템은 다음 값 중 하나를 반환합니다.

의미
NRC_GOODRET 작업에 성공했습니다.
NRC_BUFLEN 잘못된 버퍼 길이가 제공되었습니다.
NRC_ILLCMD 잘못된 명령이 제공되었습니다.
NRC_CMDTMO 명령 시간이 초과되었습니다.
NRC_INCOMP 메시지가 불완전했습니다. 애플리케이션은 다른 명령을 실행합니다.
NRC_BADDR 버퍼 주소가 잘못되었습니다.
NRC_SNUMOUT 세션 번호가 범위를 벗어났습니다.
NRC_NORES 사용할 수 있는 리소스가 없습니다.
NRC_SCLOSED 세션이 닫혔습니다.
NRC_CMDCAN 명령이 취소되었습니다.
NRC_DUPNAME 로컬 이름 테이블에 중복된 이름이 있습니다.
NRC_NAMTFUL 이름 테이블이 가득 찼습니다.
NRC_ACTSES 명령이 완료되었습니다. 이름에 활성 세션이 있고 더 이상 등록되지 않습니다.
NRC_LOCTFUL 로컬 세션 테이블이 가득 찼습니다.
NRC_REMTFUL 원격 세션 테이블이 가득 찼습니다. 세션 열기 요청이 거부되었습니다.
NRC_ILLNN 잘못된 이름 번호가 지정되었습니다.
NRC_NOCALL 시스템에서 호출된 이름을 찾지 못했습니다.
NRC_NOWILD 와일드카드는 ncb_name 멤버에서 허용되지 않습니다.
NRC_INUSE 이름이 원격 어댑터에서 이미 사용 중입니다.
NRC_NAMERR 이름이 삭제되었습니다.
NRC_SABORT 세션이 비정상적으로 종료되었습니다.
NRC_NAMCONF 이름 충돌이 감지되었습니다.
NRC_IFBUSY 인터페이스가 사용 중입니다.
NRC_TOOMANY 너무 많은 명령이 미해결 상태입니다. 애플리케이션은 나중에 명령을 다시 시도할 수 있습니다.
NRC_BRIDGE ncb_lana_num 멤버가 유효한 네트워크 번호를 지정하지 않았습니다.
NRC_CANOCCR 취소 작업이 발생하는 동안 명령이 완료되었습니다.
NRC_CANCEL NCBCANCEL 명령이 잘못되었습니다. 명령이 취소되지 않았습니다.
NRC_DUPENV 이름은 다른 로컬 프로세스에 의해 정의되었습니다.
NRC_ENVNOTDEF 환경이 정의되지 않았습니다. reset 명령을 실행해야 합니다.
NRC_OSRESNOTAV 운영 체제 리소스가 소진되었습니다. 애플리케이션은 나중에 명령을 다시 시도할 수 있습니다.
NRC_MAXAPPS 최대 애플리케이션 수를 초과했습니다.
NRC_NOSAPS NetBIOS에 사용할 수 있는 SAP(서비스 액세스 지점)가 없습니다.
NRC_NORESOURCES 요청된 리소스를 사용할 수 없습니다.
NRC_INVADDRESS NCB 주소가 잘못되었습니다.
NRC_INVDDID NCB DDID가 잘못되었습니다.

이 반환 코드는 IBM NetBIOS 3.0 사양의 일부가 아니며 NCB 구조에서 반환되지 않습니다. 대신 Netbios 함수에서 반환됩니다.

NRC_LOCKFAIL 사용자 영역을 잠그려는 시도가 실패했습니다.
NRC_OPENERR 디바이스 드라이버에서 수행하는 열린 작업 중에 오류가 발생했습니다. 이 오류 코드는 NetBIOS 3.0 사양의 일부가 아닙니다.
NRC_SYSTEM 시스템 오류가 발생했습니다.
NRC_PENDING 비동기 작업이 아직 완료되지 않았습니다.

ncb_lsn

로컬 세션 번호를 식별합니다. 이 숫자는 환경 내의 세션을 고유하게 식별합니다. 이 숫자는 성공적인 NCBCALL 명령 후에 Netbios 함수에서 반환됩니다.

ncb_num

로컬 네트워크 이름의 번호를 지정합니다. 이 숫자는 성공적인 NCBADDNAME 또는 NCBADDGRNAME 명령 후에 Netbios에서 반환됩니다. 이름이 아닌 이 숫자는 모든 데이터그램 명령과 NCBRECVANY 명령에 사용해야 합니다.

NAME_NUMBER_1 수는 항상 0x01. Netbios 함수는 나머지 이름에 대해 0xFE 범위 0x02 값을 할당합니다.

ncb_buffer

메시지 버퍼에 대한 포인터입니다. 버퍼에 쓰기 액세스 권한이 있어야 합니다. 해당 용도는 다음과 같습니다.

명령 용도
NCBSEND 보낼 메시지를 포함합니다.
NCBRECV 메시지를 받습니다.
NCBSSTAT 요청된 상태 정보를 받습니다.

ncb_length

메시지 버퍼의 크기(바이트)를 지정합니다. 수신 명령의 경우 이 멤버는 수신된 바이트 수를 나타내기 위해 Netbios 함수에 의해 설정됩니다.

버퍼 길이가 올바르지 않으면 Netbios 함수는 NRC_BUFLEN 오류 코드를 반환합니다.

ncb_callname[NCBNAMSZ]

원격 애플리케이션의 이름을 지정합니다. 문자열의 길이를 NCBNAMSZ와 같게 하려면 후행 공백 문자를 제공해야 합니다.

ncb_name[NCBNAMSZ]

애플리케이션이 알려진 이름을 지정합니다. 문자열의 길이를 NCBNAMSZ와 같게 하려면 후행 공백 문자를 제공해야 합니다.

ncb_rto

세션에 대한 수신 작업의 제한 시간(500밀리초 단위)을 지정합니다. 값이 0이면 시간 초과가 없음을 의미합니다. NCBCALL 또는 NCBLISTEN 명령을 사용하여 를 지정합니다. 후속 NCBRECV 명령에 영향을 줍니다.

ncb_sto

세션에 대한 보내기 작업의 제한 시간(500밀리초 단위)을 지정합니다. 값이 0이면 시간 초과가 없음을 의미합니다. NCBCALL 또는 NCBLISTEN 명령을 사용하여 를 지정합니다. 후속 NCBSENDNCBCHAINSEND 명령에 영향을 줍니다.

ncb_post

비동기 명령이 완료된 경우 호출할 post 루틴의 주소를 지정합니다. 게시물 루틴은 다음과 같이 정의됩니다.

NCB_POST PostRoutine( PNCB pncb );

여기서 pncb 매개 변수는 완료된 NCB 구조체에 대한 포인터입니다.

ncb_lana_num

LAN 어댑터 번호를 지정합니다. 이 0부터 시작하는 숫자는 특정 LAN 어댑터 보드를 사용하는 특정 전송 공급자에 해당합니다.

ncb_cmd_cplt

명령 완료 플래그를 지정합니다. 이 값은 ncb_retcode 멤버와 동일합니다.

ncb_reserve[18]

예약; 는 0이어야 합니다.

ncb_reserve 배열의 길이 X는 시스템 아키텍처에 따라 달라집니다. 64비트 시스템의 경우 배열에는 18개의 요소가 포함됩니다. 그렇지 않으면 배열에 10개의 요소가 포함됩니다.

ncb_reserve[10]

예약; 는 0이어야 합니다.

ncb_reserve 배열의 길이 X는 시스템 아키텍처에 따라 달라집니다. 64비트 시스템의 경우 배열에는 18개의 요소가 포함됩니다. 그렇지 않으면 배열에 10개의 요소가 포함됩니다.

ncb_event

비동기 명령이 수락될 때 서명되지 않은 상태로 설정된 이벤트 개체에 대한 핸들을 지정하고 비동기 명령이 완료되면 신호 상태로 설정됩니다. Netbios 함수가 0이 아닌 값을 반환하면 이벤트가 신호를 보냅니다. 수동 재설정 이벤트만 동기화에 사용해야 합니다. 지정된 이벤트를 둘 이상의 활성 비동기 명령과 연결해서는 안 됩니다.

ncb_command 멤버에 ASYNCH 플래그가 설정되어 있지 않거나 ncb_post 0이 아닌 경우 ncb_event 멤버는 0이어야 합니다. 그렇지 않으면 NetbiosNRC_ILLCMD 오류 코드를 반환합니다.

설명

ncb_event 사용하여 비동기 요청을 실행하려면 ncb_post 사용하는 것보다 적은 수의 시스템 리소스가 필요합니다. 또한 ncb_event 0이 아닌 경우 요청이 처리되기 전에 스레드가 종료되면 보류 중인 요청이 취소됩니다. ncb_post 사용하여 전송된 비동기 요청에는 적용되지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
머리글 nb30.h

추가 정보

ACTION_HEADER

ADAPTER_STATUS

FIND_NAME_BUFFER

FIND_NAME_HEADER

LANA_ENUM

NAME_BUFFER

NetBIOS 구조체

Netbios

SESSION_BUFFER

SESSION_HEADER

NetBIOS 인터페이스 개요