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 명령을 수락하려면 먼저 다시 설정 해야 합니다.
다음 값을 사용하여 리소스를 해제하는 방법을 지정합니다.
|
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 명령을 사용하여 를 지정합니다. 후속 NCBSEND 및 NCBCHAINSEND 명령에 영향을 줍니다.
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이어야 합니다. 그렇지 않으면 Netbios 는 NRC_ILLCMD 오류 코드를 반환합니다.
설명
ncb_event 사용하여 비동기 요청을 실행하려면 ncb_post 사용하는 것보다 적은 수의 시스템 리소스가 필요합니다. 또한 ncb_event 0이 아닌 경우 요청이 처리되기 전에 스레드가 종료되면 보류 중인 요청이 취소됩니다. ncb_post 사용하여 전송된 비동기 요청에는 적용되지 않습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
머리글 | nb30.h |
추가 정보